diff --git a/GAMS/IntExtOpt.gms b/GAMS/IntExtOpt.gms index 5c0b442d41016a4a1964d089b434680737186add..d3cf16ca35792b711aed03b9ba6f87a7d8d1c09a 100644 --- a/GAMS/IntExtOpt.gms +++ b/GAMS/IntExtOpt.gms @@ -118,11 +118,11 @@ $gdxin pasture 1.4 / ; PARAMETER baseCost(crop) base cost per hectare - / wheat 0.08 + / wheat 0.10 maize 0.08 rice 0.08 oilcropsNFix 0.16 - oilcropsOther 0.08 + oilcropsOther 0.14 pulses 0.08 starchyRoots 0.08 fruitveg 0.08 @@ -133,11 +133,14 @@ $gdxin PARAMETER otherIntCost(crop); otherIntCost(crop) = prodCost(crop) * otherICost; - + + PARAMETER animalProdCost(animal) / ruminants 0.20 monogastrics 0.20 /; + fertiliserUnitCost = 1.2; + PARAMETER previousNetImport(import_types); previousNetImport(import_types) = previousImportAmount(import_types) - previousExportAmount(import_types); diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java index 5ab6c2388e138c7c17a2aec342f57d4553262300..31c1c2ab33fdcbc13a84c4cd41a9d4cad843d728 100755 --- a/src/ac/ed/lurg/ModelConfig.java +++ b/src/ac/ed/lurg/ModelConfig.java @@ -238,8 +238,8 @@ public class ModelConfig { public static final double INITAL_PRICE_MONOGASTRICS = getDoubleProperty("INITAL_PRICE_MONOGASTRICS", 0.318 * ModelConfig.INITIAL_PRICE_SHIFT); // value from calibration public static final double INITAL_PRICE_RUMINANTS = getDoubleProperty("INITAL_PRICE_RUMINANTS", 0.246 * ModelConfig.INITIAL_PRICE_SHIFT); // value from calibration public static final double INITAL_PRICE_ENERGYCROPS = getDoubleProperty("INITAL_PRICE_ENERGYCROPS", 0.0377 * ModelConfig.INITIAL_PRICE_SHIFT); - public static final double INITAL_PRICE_FRUITVEG = getDoubleProperty("INITAL_PRICE_FRUITVEG", 0.0656 * ModelConfig.INITIAL_PRICE_SHIFT); - public static final double INITAL_PRICE_SUGAR = getDoubleProperty("INITAL_PRICE_SUGAR", 0.0213 * ModelConfig.INITIAL_PRICE_SHIFT); + public static final double INITAL_PRICE_FRUITVEG = getDoubleProperty("INITAL_PRICE_FRUITVEG", 0.0506 * ModelConfig.INITIAL_PRICE_SHIFT); + public static final double INITAL_PRICE_SUGAR = getDoubleProperty("INITAL_PRICE_SUGAR", 0.0113 * ModelConfig.INITIAL_PRICE_SHIFT); // These are initial demand system prices in 2000 kcal terms public static final double INITAL_DEMAND_PRICE_CEREALS_STARCHY_ROOTS = getDoubleProperty("INITAL_DEMAND_PRICE_CEREALS_STARCHY_ROOTS", 110.23); @@ -331,7 +331,8 @@ public class ModelConfig { // Calibration related stuff public static final boolean IS_CALIBRATION_RUN = getBooleanProperty("IS_CALIBRATION_RUN", false); public static final String CALIB_DIR = IS_CALIBRATION_RUN ? OUTPUT_DIR : getProperty("CALIB_DIR", OUTPUT_DIR); - public static final int END_FIRST_STAGE_CALIBRATION = getIntProperty("END_FIRST_STAGE_CALIBRATION", 1); + public static final int END_FIRST_STAGE_CALIBRATION = getIntProperty("END_FIRST_STAGE_CALIBRATION", 5); // Keep trade fixed + public static final int END_SECOND_STAGE_CALIBRATION = getIntProperty("END_SECOND_STAGE_CALIBRATION", 20); // Keep land cover fixed public static final String SERIALIZED_LAND_USE_FILENAME = "landUseRaster.ser"; public static final String SERIALIZED_CROP_USAGE_FILENAME = "countryCropUsages.ser"; public static final String SERIALIZED_INTERNATIONAL_MARKET_FILENAME = "internationalMarket.ser"; @@ -409,10 +410,10 @@ public class ModelConfig { public static final String CONVERSION_COST_FILE = getProperty("CONVERSION_COST_FILE", DATA_DIR + File.separator + "conversion_costs.csv"); // cost of converting from one land cover to another, $1000/ha public static final double LAND_CONVERSION_COST_FACTOR = getDoubleProperty("LAND_CONVERSION_COST_FACTOR", 1.0); // for monte carlo public static final double AGRI_LAND_EXPANSION_COST_FACTOR = getDoubleProperty("AGRI_LAND_EXPANSION_COST_FACTOR", 1.0); // for monte carlo - public static final double CROPLAND_CONVERSION_COST = getDoubleProperty("CROPLAND_CONVERSION_COST", 0.16 * LAND_CONVERSION_COST_FACTOR); - public static final double PASTURE_CONVERSION_COST = getDoubleProperty("PASTURE_CONVERSION_COST", 0.1 * LAND_CONVERSION_COST_FACTOR); - public static final double FOREST_CONVERSION_COST = getDoubleProperty("FOREST_CONVERSION_COST", 0.24 * LAND_CONVERSION_COST_FACTOR); - public static final double NATURAL_CONVERSION_COST = getDoubleProperty("NATURAL_CONVERSION_COST", 0.04 * LAND_CONVERSION_COST_FACTOR); + public static final double CROPLAND_CONVERSION_COST = getDoubleProperty("CROPLAND_CONVERSION_COST", 0.3 * LAND_CONVERSION_COST_FACTOR); + public static final double PASTURE_CONVERSION_COST = getDoubleProperty("PASTURE_CONVERSION_COST", 0.2 * LAND_CONVERSION_COST_FACTOR); + public static final double FOREST_CONVERSION_COST = getDoubleProperty("FOREST_CONVERSION_COST", 0.5 * LAND_CONVERSION_COST_FACTOR); + public static final double NATURAL_CONVERSION_COST = getDoubleProperty("NATURAL_CONVERSION_COST", 0.02 * LAND_CONVERSION_COST_FACTOR); public static final double TECHNOLOGY_CHANGE_ANNUAL_RATE = getDoubleProperty("TECHNOLOGY_CHANGE_ANNUAL_RATE", 0.002); public static final int TECHNOLOGY_CHANGE_START_STEP = getIntProperty("TECHNOLOGY_CHANGE_START_STEP", 0); @@ -455,7 +456,7 @@ public class ModelConfig { public static final double IRRIG_COST_SCALE_FACTOR = getDoubleProperty("IRRIG_COST_SCALE_FACTOR", 0.00035); public static final double IRRIG_COST_MULTIPLIER = getDoubleProperty("IRRIG_COST_MULTIPLIER", 1.0); - public static final double FERTILISER_COST_PER_T = getDoubleProperty("FERTILISER_COST_PER_T", 1.4); // $1000 per tonne + public static final double FERTILISER_COST_PER_T = getDoubleProperty("FERTILISER_COST_PER_T", 1.2); // $1000 per tonne public static final double FERTILISER_MAX_COST = FERTILISER_COST_PER_T * MAX_FERT_AMOUNT/1000; public static final double DOMESTIC_PRICE_MARKUP = getDoubleProperty("DOMESTIC_PRICE_MARKUP", 1.0); diff --git a/src/ac/ed/lurg/landuse/ConversionCostReader.java b/src/ac/ed/lurg/landuse/ConversionCostReader.java index c2420d048cfd441e567f302181173e6c57bdb6fc..8315101b1347c93e5e2004174d318d7e35f0a379 100644 --- a/src/ac/ed/lurg/landuse/ConversionCostReader.java +++ b/src/ac/ed/lurg/landuse/ConversionCostReader.java @@ -3,6 +3,7 @@ package ac.ed.lurg.landuse; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; +import java.sql.Time; import java.util.HashMap; import java.util.Map; @@ -17,9 +18,11 @@ public class ConversionCostReader { private static final int TO_COL = 1; private static final int COST_COL = 2; private Map<LccKey, Double> conversionCosts = new HashMap<LccKey, Double>(); + private Timestep timestep; public ConversionCostReader(Timestep timestep) { + this.timestep = timestep; if (ModelConfig.CONVERSION_COSTS_FROM_FILE) { read(); } else { @@ -92,6 +95,11 @@ public class ConversionCostReader { double baseCost = conversionCosts.get(key); conversionCosts.put(key, baseCost * ModelConfig.AGRI_LAND_EXPANSION_COST_FACTOR); } + + // Allow countries to adjust trade without changing land cover too much + if (timestep.getTimestep() < ModelConfig.END_SECOND_STAGE_CALIBRATION & ModelConfig.IS_CALIBRATION_RUN) { + conversionCosts.put(key, 100.0); + } } } }