Newer
Older
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ac.ed.lurg.country.Country;
import ac.ed.lurg.country.CountryAgent;
import ac.ed.lurg.country.CountryAgentCreator;
import ac.ed.lurg.country.CountryBoundaryItem;
import ac.ed.lurg.country.CountryBoundaryReader;
import ac.ed.lurg.demand.DemandManager;
import ac.ed.lurg.types.ModelFitType;
import ac.ed.lurg.utils.LogWriter;
import ac.ed.lurg.yield.YieldRaster;
import ac.sac.raster.RasterKey;
public class ModelMain {
private Collection<CountryAgent> countryAgents;
private ModelContext modelContext;
private Map<Country, List<RasterKey>> countryToKeysMap;
public static void main(String[] args) {
ModelMain theModel = new ModelMain();
theModel.setup();
theModel.run();
}
/* setup models, reading inputs, etc. */
private void setup() {
DemandManager demandManager = new DemandManager(ModelFitType.LOGISTIC, "SSP2_v9_130325");
modelContext = new ModelContext(demandManager);
countryToKeysMap = getCountryToKeysMap();
countryAgents = new CountryAgentCreator().getAgents(modelContext);
}
private Map<Country, List<RasterKey>> getCountryToKeysMap() {
CountryBoundaryReader countryReader = new CountryBoundaryReader();
RasterSet<CountryBoundaryItem> countryBoundaries = countryReader.getRasterDataFromFile(ModelConfig.COUNTRY_BOUNDARY_FILE);
Map<Country, List<RasterKey>> countryToKeysMap = new HashMap<Country, List<RasterKey>>();
for (Map.Entry<RasterKey, CountryBoundaryItem> entry : countryBoundaries.entrySet()) {
List<RasterKey> keys = countryToKeysMap.get(entry.getValue().getCountry());
if (keys == null) {
keys = new ArrayList<RasterKey>();
countryToKeysMap.put(entry.getValue().getCountry(), keys);
}
keys.add(entry.getKey());
}
return countryToKeysMap;
}
/* run the model */
private void run() {
for (int i = ModelConfig.START_TIMESTEP; i <= ModelConfig.END_TIMESTEP; i++)
doTimestep(i);
}
private void doTimestep(int timestep) {
YieldRaster yieldSurfaces = getYieldSurfaces(timestep);
LogWriter.println("Timestep " + timestep);
for (CountryAgent ca : countryAgents) {
LogWriter.println("Country " + ca.getCountry());
Collection<RasterKey> countryKeys = countryToKeysMap.get(ca.getCountry());
YieldRaster countryYieldSurfaces = yieldSurfaces.getSubsetRasterForKeys(countryKeys);
ca.determineProduction(timestep, countryYieldSurfaces);
}
// examine global trade balance
private YieldRaster getYieldSurfaces(int timestep) {
String rootDir = ModelConfig.YIELD_DIR + File.separator + (timestep + ModelConfig.BASE_YEAR) + File.separator;
YieldRaster yieldSurfaces = null;
String cropDir = rootDir + cropType.getGamsName() + File.separator;
for (YieldType yieldType : YieldType.values()) {
YieldResponseMapReader yieldReader = new YieldResponseMapReader(yieldSurfaces, yieldType, cropType);
yieldSurfaces = (YieldRaster)yieldReader.getRasterDataFromFile(cropDir + yieldType.getFileName());