From 58fd672b2833bd872b387d73feb551029a5f380a Mon Sep 17 00:00:00 2001 From: Peter Alexander <peter@blackhillock.co.uk> Date: Fri, 8 Mar 2019 22:19:58 +0000 Subject: [PATCH] Try to solve demand multiple times until finding a solution --- src/ac/ed/lurg/country/AbstractCountryAgent.java | 2 +- src/ac/ed/lurg/country/gams/GamsDemandOutput.java | 4 ++++ src/ac/ed/lurg/demand/ElasticDemandManager.java | 13 ++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/ac/ed/lurg/country/AbstractCountryAgent.java b/src/ac/ed/lurg/country/AbstractCountryAgent.java index a0ae581c..89cb3ded 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 85fe7c45..9fb46108 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 3b523c30..ad27844b 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(); -- GitLab