Skip to content
Snippets Groups Projects
GamsLocationTest.java 5.29 KiB
package ac.ed.lurg.country.gams;

import java.util.HashMap;
import java.util.Map;

import ac.ed.lurg.Timestep;
import ac.ed.lurg.country.CompositeCountry;
import ac.ed.lurg.country.CountryPrice;
import ac.ed.lurg.landuse.LandUseItem;
import ac.ed.lurg.landuse.IrrigationItem;
import ac.ed.lurg.types.CommodityType;
import ac.ed.lurg.types.CropType;
import ac.ed.lurg.types.LandCoverType;
import ac.ed.lurg.types.YieldType;
import ac.ed.lurg.yield.YieldResponsesItem;

public class GamsLocationTest {
	public static final int NUM_LOCATIONS_PER_COUNTRY = 3;

	public static void main(String[] args)  {
		GamsLocationTest aGamsTest = new GamsLocationTest();
		aGamsTest.run();
	}
	
	private void run() {
		GamsCountryInput countryLevelInputs = GamsCountryInput.createInput(new CompositeCountry("Test"), getProjectedDemand(), getCountryPrices(), null, null, 0.1);
		GamsLocationInput gamsInput = new GamsLocationInput(new Timestep(0), getYields(), getPreviousArea(), getIrrigationCosts(), countryLevelInputs);
		
		GamsLocationOptimiser opti = new GamsLocationOptimiser(gamsInput);		
		opti.run();
	}

	Map<CommodityType, Double> getProjectedDemand() {
		Map<CommodityType, Double> dummyMap = new HashMap<CommodityType, Double>();
		dummyMap.put(CommodityType.CEREALS, 300.0);
		dummyMap.put(CommodityType.OILCROPS, 50.0);
		dummyMap.put(CommodityType.PULSES, 60.0);
		dummyMap.put(CommodityType.STARCHY_ROOTS, 150.0);
		dummyMap.put(CommodityType.MEAT, 480.0);
		return dummyMap;
	}
	
	Map<CropType, CountryPrice> getCountryPrices() {
		
		Map<CropType, CountryPrice> dummyTradeMap = new HashMap<CropType, CountryPrice>();
	
		dummyTradeMap.put(CropType.WHEAT, createCountryPrice(0.15,0.15));
		dummyTradeMap.put(CropType.MAIZE, createCountryPrice(0.15,0.15));
		dummyTradeMap.put(CropType.RICE, createCountryPrice(0.4,0.4));
		dummyTradeMap.put(CropType.OILCROPS, createCountryPrice(0.4,0.4));
		dummyTradeMap.put(CropType.PULSES, createCountryPrice(0.2,0.2));
		dummyTradeMap.put(CropType.STARCHY_ROOTS, createCountryPrice(0.1,0.1));
		dummyTradeMap.put(CropType.MEAT, createCountryPrice(0.2,0.2));

		return dummyTradeMap;
	}

	CountryPrice createCountryPrice(double imports, double exports){
		
		return new CountryPrice(imports,exports);
		
	}
	
	Map<Integer, YieldResponsesItem> getYields() {
		
		YieldResponsesItem yresp = getYieldRespItem(1, 1);
		Map<Integer, YieldResponsesItem> returnMap = new HashMap<Integer, YieldResponsesItem>();
		
		for (int i= 1; i<=NUM_LOCATIONS_PER_COUNTRY; i++)
			returnMap.put(i, yresp);

		return returnMap;
	}
	
	YieldResponsesItem getYieldRespItem(double base, double pastureFactor) {
		YieldResponsesItem yresp = new YieldResponsesItem();
		
		for (CropType crop : CropType.getAllItems()) {
			double factor = base;
			if (CropType.PASTURE == crop)
				factor = base * pastureFactor;
				
			yresp.setYield(YieldType.NO_FERT_NO_IRRIG, crop, factor);
			yresp.setYield(YieldType.FERT_MID_NO_IRRIG, crop, factor*2.2);
			yresp.setYield(YieldType.FERT_MAX_NO_IRRIG, crop, factor*3);
//			yresp.setYield(YieldType.IRRIG_MID_ONLY, crop, factor*1.8);
			yresp.setYield(YieldType.NO_FERT_IRRIG_MAX, crop, factor*2);
			yresp.setYield(YieldType.FERT_MAX_IRRIG_MAX, crop, factor*4);
		}
		return yresp;
	}

	private Map<Integer, IrrigationItem> getIrrigationCosts() {
		Map<Integer, IrrigationItem> returnMap = new HashMap<Integer, IrrigationItem>();
		
		for (int i= 1; i<=NUM_LOCATIONS_PER_COUNTRY; i++) {
			IrrigationItem dummyIrrigCost = new IrrigationItem();
			dummyIrrigCost.setIrrigCost(Math.random());
			returnMap.put(i, dummyIrrigCost);
		}

		return returnMap;
	}
	
	private Map<Integer, LandUseItem> getPreviousArea() {
		LandUseItem dummyMap = getAreaItem(0,0);
		Map<Integer, LandUseItem> returnMap = new HashMap<Integer, LandUseItem>();
		
		for (int i= 1; i<=NUM_LOCATIONS_PER_COUNTRY; i++)
			returnMap.put(i, dummyMap);

		return returnMap;
	}

	LandUseItem getAreaItem(double cereal, double pasture) {
		LandUseItem dummyMap = new LandUseItem();
		
		dummyMap.setCropFraction(CropType.WHEAT, 0.2);
		dummyMap.setCropFraction(CropType.MAIZE, 0.2);
		dummyMap.setCropFraction(CropType.RICE, 0.1);
		dummyMap.setCropFraction(CropType.OILCROPS, 0.1);
		dummyMap.setCropFraction(CropType.PULSES, 0.1);
		dummyMap.setCropFraction(CropType.STARCHY_ROOTS, 0.1);
		
		dummyMap.setLandCoverArea(LandCoverType.PASTURE, pasture);
		dummyMap.setLandCoverArea(LandCoverType.CROPLAND, cereal);
		dummyMap.setLandCoverArea(LandCoverType.FOREST, 200 - pasture - cereal);
		dummyMap.setLandCoverArea(LandCoverType.OTHER_NATURAL, 30);
		return dummyMap;
	}

	Map<CropType, Double> getWorldInputEnergy() {
		Map<CropType, Double> dummyMap = new HashMap<CropType, Double>();
		dummyMap.put(CropType.WHEAT, 0.4);
		dummyMap.put(CropType.MAIZE, 0.4);
		dummyMap.put(CropType.RICE, 1.0);
		dummyMap.put(CropType.OILCROPS, 10.0);
		dummyMap.put(CropType.PULSES, 20.0);
		dummyMap.put(CropType.STARCHY_ROOTS, 5.0);
		dummyMap.put(CropType.PASTURE, 80.0);
		return dummyMap;
	}

	Map<CropType, Double> getBaseNetImport() {
		Map<CropType, Double> dummyMap = new HashMap<CropType, Double>();
		dummyMap.put(CropType.WHEAT, 24.0);
		dummyMap.put(CropType.MAIZE, 5.0);
		dummyMap.put(CropType.OILCROPS, 5.0);
		dummyMap.put(CropType.OILCROPS, 10.0);
		dummyMap.put(CropType.PULSES, 20.0);
		dummyMap.put(CropType.STARCHY_ROOTS, 5.0);
		dummyMap.put(CropType.PASTURE, 5.0);
		return dummyMap;
	}
}