From 8fe6f868a3ca4bea9a218de1c2201484ee24a063 Mon Sep 17 00:00:00 2001
From: R0slyn <roslyn.henry.08@aberdeen.ac.uk>
Date: Mon, 23 Sep 2019 13:49:31 +0100
Subject: [PATCH] Using random starting utility value causing PLUM to be
 unreplicatable. Now starting values are incremental.

---
 src/ac/ed/lurg/country/gams/GamsDemandOutput.java | 6 ++++--
 src/ac/ed/lurg/demand/ElasticDemandManager.java   | 5 +++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/ac/ed/lurg/country/gams/GamsDemandOutput.java b/src/ac/ed/lurg/country/gams/GamsDemandOutput.java
index 450e9866..06a2c353 100644
--- a/src/ac/ed/lurg/country/gams/GamsDemandOutput.java
+++ b/src/ac/ed/lurg/country/gams/GamsDemandOutput.java
@@ -47,7 +47,9 @@ public class GamsDemandOutput {
 		return status;
 	}
 
-	public void resetForNewAttempt() {
-		utility = (Math.random()-0.5) * 40;
+	public void resetForNewAttempt(int i, double inputUtility) {
+		
+		if ((i & 1) == 0) utility = inputUtility * -1.0;
+		else utility = inputUtility + 0.8*i;
 	}
 }
diff --git a/src/ac/ed/lurg/demand/ElasticDemandManager.java b/src/ac/ed/lurg/demand/ElasticDemandManager.java
index d6aedd33..6fb6cf90 100755
--- a/src/ac/ed/lurg/demand/ElasticDemandManager.java
+++ b/src/ac/ed/lurg/demand/ElasticDemandManager.java
@@ -65,7 +65,8 @@ public class ElasticDemandManager extends AbstractSSPDemandManager {
 				break;
 			else {
 				LogWriter.printlnError(i + ": Problem solving " + c + ", " + year + " got " + gamsOutput.getStatus());
-				gamsOutput.resetForNewAttempt();
+				double inputUtility = inputData.getPreviousDemands() == null ? 0 : inputData.getPreviousDemands().getUtility();
+				gamsOutput.resetForNewAttempt(i, inputUtility);
 				inputData = new GamsDemandInput(c, year, gdpPc, consumerPrices, kcalPerT,usaGdpPc, gamsOutput);
 			}
 		}
@@ -110,7 +111,7 @@ public class ElasticDemandManager extends AbstractSSPDemandManager {
 			Map<CommodityType, Double> plumDemands = gamsOutput.getPlumDemands();
 			String initialData = String.format("%s,%d,%.2f,%.6f,%s,%.6f,%.6f", 
 					inputData.getCountry(), inputData.getYear(),inputData.getGdpPc(), population, 
-					gamsOutput.getStatus(), gamsOutput.getUtility(), gamsOutput.getHungerFactor());
+					gamsOutput.getStatus(), gamsOutput.getUtility(),gamsOutput.getHungerFactor());
 			
 			for (CommodityType commodity : CommodityType.values()) {
 				StringBuffer sbData = new StringBuffer(initialData);
-- 
GitLab