diff --git a/src/ac/ed/lurg/country/AbstractCountryAgent.java b/src/ac/ed/lurg/country/AbstractCountryAgent.java index a0ae581c53119dabc2c8366e4651929c697fd43c..89cb3ded3cc5e46351e094d98ee7a17c2fa3b486 100644 --- a/src/ac/ed/lurg/country/AbstractCountryAgent.java +++ b/src/ac/ed/lurg/country/AbstractCountryAgent.java @@ -80,7 +80,7 @@ public abstract class AbstractCountryAgent { else priceMarkupFactor = priceMarkupFactors.get(commodity); - prices.put(commodity, commPrice); + prices.put(commodity, commPrice * priceMarkupFactor); // * priceMarkupFactor to rebase prices to those provide by G&G LogWriter.println("Price for " + commodity.getGamsName() + " is " + commPrice * priceMarkupFactor + " after markup of " + priceMarkupFactor); } diff --git a/src/ac/ed/lurg/country/gams/GamsDemandOutput.java b/src/ac/ed/lurg/country/gams/GamsDemandOutput.java index 85fe7c454d769fe2580e04f2cb127745e655853f..9fb461082b8bf15a80a68c1d11e450fedb4ff661 100644 --- a/src/ac/ed/lurg/country/gams/GamsDemandOutput.java +++ b/src/ac/ed/lurg/country/gams/GamsDemandOutput.java @@ -41,4 +41,8 @@ public class GamsDemandOutput { public String getStatus() { return status; } + + public void resetForNewAttempt() { + utility = (Math.random()-0.5) * 40; + } } diff --git a/src/ac/ed/lurg/demand/ElasticDemandManager.java b/src/ac/ed/lurg/demand/ElasticDemandManager.java index 3b523c30fd41b2b6a359ec94adf5c115f5355fb8..ad27844b64510758e7deb71f3b461c6dcb0f39c6 100644 --- a/src/ac/ed/lurg/demand/ElasticDemandManager.java +++ b/src/ac/ed/lurg/demand/ElasticDemandManager.java @@ -41,7 +41,18 @@ public class ElasticDemandManager extends AbstractSSPDemandManager { GamsDemandInput inputData = new GamsDemandInput(c, year, gdpPc, prices, usaGdpPc, previousGamsDemands.get(c)); // Do the projection - GamsDemandOutput gamsOutput = new GamsDemandOptimiser(inputData).getDemandPc(); + GamsDemandOutput gamsOutput = null; + for (int i = 1; i < 50; ++i) { + gamsOutput = new GamsDemandOptimiser(inputData).getDemandPc(); + if (gamsOutput.getStatus().equals("SOLVED")) + break; + else { + LogWriter.printlnError(i + ": Problem solving " + c + ", " + year + " got " + gamsOutput.getStatus()); + gamsOutput.resetForNewAttempt(); + inputData = new GamsDemandInput(c, year, gdpPc, prices, usaGdpPc, gamsOutput); + } + } + previousGamsDemands.put(c, gamsOutput); Map<CommodityType, Double> foodPc = gamsOutput.getPlumDemands();