From 5adb831e34541affec03c8d8afba8a0f3e39f22e Mon Sep 17 00:00:00 2001 From: Peter Alexander <peter@blackhillock.co.uk> Date: Fri, 31 Oct 2014 12:23:26 +0000 Subject: [PATCH] no message --- GAMS/IntExtOpt.gms | 70 ++++++++++++++++++++++++++++++++++ bin/ac/ed/lurg/GamsTest.class | Bin 5406 -> 0 bytes src/ac/ed/lurg/GamsTest.java | 15 +++----- 3 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 GAMS/IntExtOpt.gms delete mode 100644 bin/ac/ed/lurg/GamsTest.class diff --git a/GAMS/IntExtOpt.gms b/GAMS/IntExtOpt.gms new file mode 100644 index 00000000..19eff5da --- /dev/null +++ b/GAMS/IntExtOpt.gms @@ -0,0 +1,70 @@ + + SET crop crop types including pasture / cereals, fruits, oilcrops, starchyRoots, treenuts, vegetables, pasture / + SET crop_less_pasture(crop) arable crops types includes treenuts but not pasture / cereals, fruits, oilcrops, starchyRoots, treenuts, vegetables / + SET feed_crop(crop) / cereals, oilcrops / + SET landuse land use type / cropland, pasture / + + PARAMETER previous_area(landuse) areas for previous timestep in ha + PARAMETER demand(crop) yield in t per ha + PARAMETER yield_ref(crop) yield in t per ha + +$gdxin %gdxincname% +$load previous_area, demand, yield_ref +$gdxin + + + PARAMETER + feedEnergy(crop) energy from feed in MJ per t + / cereals 1 + oilcrops 1.5 + pasture 0.4 + / ; + + SCALAR meatDemand /200/; + SCALAR meatEfficency /0.1/; + SCALAR maxLandUseChange /0.1/; + + VARIABLES + area(crop) total area for each crop + feedArea(crop) area used for feed for each crop + intensity(crop) intensity for each crop + yield(crop) energy per area for each crop + unit_energy(crop) energy per area for each crop + energy total input energy + ; + + POSITIVE VARIABLE area, intensity, feedArea; + + EQUATIONS + UNIT_ENERGY_EQ(crop) energy per area + YIELD_EQ(crop) yield given chosen intensity + CROP_DEMAND_CONSTRAINT(crop_less_pasture) satisfy demand for crop + MEAT_DEMAND_CONSTRAINT satisfy demand for crop + INTENSITY_CONSTRAINT(crop) intensity constraint + CROPLAND_CHANGE_CONSTRAINT constraint on the rate of land use change + PASTURE_CHANGE_CONSTRAINT constraint on the rate of land use change + AGRI_LAND_CHANGE_CONSTRAINT constraint expansion of agricultural land + ENERGY_EQ define objective function; + + UNIT_ENERGY_EQ(crop) .. unit_energy(crop) =E= intensity(crop) + intensity(crop) / 2 * intensity(crop) / 8; + + YIELD_EQ(crop) .. yield(crop) =E= yield_ref(crop) * intensity(crop); + + CROP_DEMAND_CONSTRAINT(crop_less_pasture) .. (area(crop_less_pasture) - feedArea(crop_less_pasture)) * yield(crop_less_pasture) =G= demand(crop_less_pasture); + + MEAT_DEMAND_CONSTRAINT .. meatEfficency*sum(feed_crop, feedEnergy(feed_crop) * feedArea(feed_crop) * yield(feed_crop)) + + feedEnergy('pasture') * area('pasture') * yield('pasture') =G= meatDemand; + + INTENSITY_CONSTRAINT(crop) .. intensity(crop) =G= 1; + + CROPLAND_CHANGE_CONSTRAINT .. abs(sum(crop_less_pasture, area(crop_less_pasture))/previous_area('cropland') - 1) =L= maxLandUseChange; + + PASTURE_CHANGE_CONSTRAINT .. abs(area('pasture')/previous_area('pasture') - 1) =L= maxLandUseChange; + + AGRI_LAND_CHANGE_CONSTRAINT .. abs(sum(crop, area(crop)) / sum(landuse, previous_area(landuse)) - 1) =L= maxLandUseChange; + + ENERGY_EQ .. energy =E= SUM(crop, area(crop)*unit_energy(crop)); + + MODEL LAND_USE /ALL/ ; + SOLVE LAND_USE USING DNLP MINIMIZING energy; + diff --git a/bin/ac/ed/lurg/GamsTest.class b/bin/ac/ed/lurg/GamsTest.class deleted file mode 100644 index 6e6d3546bd597db783ca2346c807837a05d1f0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5406 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 UIYmoc#Z5M+n*x_mQAI5MFF%)DZU6uP diff --git a/src/ac/ed/lurg/GamsTest.java b/src/ac/ed/lurg/GamsTest.java index 55e9345d..a62e52cb 100644 --- a/src/ac/ed/lurg/GamsTest.java +++ b/src/ac/ed/lurg/GamsTest.java @@ -15,15 +15,13 @@ import com.gams.api.GAMSWorkspaceInfo; public class GamsTest { + private final static String WORKING_DIR = "/Users/peteralexander/Documents/R_Workspace/tempDir"; + public static void main(String[] args) { - - // create GAMSWorkspace "ws" with default working directory - // (the directory named with current date and time under System.getProperty("java.io.tmpdir")) - System.out.println(System.getProperty("user.dir")); - File workingDirectory = new File(System.getProperty("user.dir"), "GamsTest"); + + File workingDirectory = new File(WORKING_DIR, "GamsTest"); workingDirectory.mkdir(); - // create a workspace GAMSWorkspaceInfo wsInfo = new GAMSWorkspaceInfo(); wsInfo.setWorkingDirectory(workingDirectory.getAbsolutePath()); @@ -59,7 +57,6 @@ public class GamsTest { } // add a database and add input data into the database - GAMSParameter a = db.addParameter("previous_area", 1, "previous area"); for(String c : previous_area.keySet()) a.addRecord(c).setValue(previous_area.get(c)); @@ -73,7 +70,7 @@ public class GamsTest { y.addRecord(c).setValue(yield_ref.get(c)); // create GAMSJob "t2" from the "model" string variable - GAMSJob t2 = ws.addJobFromFile("/Users/peteralexander/Documents/R_Workspace/landalloc/GAMS/IntExtOpt.gms"); + GAMSJob t2 = ws.addJobFromFile("/Users/peteralexander/Documents/R_Workspace/UNPLUM/GAMS/IntExtOpt.gms"); GAMSOptions opt = ws.addOptions(); System.out.println(db.getName()); @@ -90,8 +87,6 @@ public class GamsTest { // cleanup GAMSWorkspace's working directory cleanup(ws.workingDirectory()); - // terminate program - System.exit(0); } static void cleanup(String directory) { -- GitLab