diff --git a/pom.xml b/pom.xml index 9a92aec..ebb63a7 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ zeroCUTS project - 16.0-PR3117 + 16.0-PR3120 UTF-8 @@ -87,6 +87,8 @@ + + org.matsim.contrib emissions diff --git a/src/main/java/org/matsim/vsp/freight/food/UpdateRunOutputs.java b/src/main/java/org/matsim/vsp/freight/food/UpdateRunOutputs.java new file mode 100644 index 0000000..c92e1d9 --- /dev/null +++ b/src/main/java/org/matsim/vsp/freight/food/UpdateRunOutputs.java @@ -0,0 +1,129 @@ +package org.matsim.vsp.freight.food; + +import java.io.IOException; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import org.matsim.api.core.v01.Id; +import org.matsim.api.core.v01.Scenario; +import org.matsim.core.config.Config; +import org.matsim.core.config.ConfigUtils; +import org.matsim.core.controler.Controler; +import org.matsim.core.controler.OutputDirectoryHierarchy; +import org.matsim.core.scenario.ScenarioUtils; +import org.matsim.freight.carriers.Carrier; +import org.matsim.freight.carriers.CarrierPlan; +import org.matsim.freight.carriers.CarrierPlanWriter; +import org.matsim.freight.carriers.CarriersUtils; +import org.matsim.freight.carriers.FreightCarriersConfigGroup; +import org.matsim.freight.carriers.ScheduledTour; +import org.matsim.freight.carriers.Tour; +import org.matsim.freight.carriers.analysis.RunFreightAnalysisEventBased; +import org.matsim.freight.carriers.controler.CarrierModule; + +/** + * Diese Klasse soll den Output von "alten" runs derart updaten, + * dass nun die heutigen Event-based Analysen genutzt werden können. + * D.h. insbesondere, dass die ganzen Carrier-Events nachgeworfen werden. + * @author Kai Martins-Turner (kturner) + */ +public class UpdateRunOutputs { + + public static void main(String[] args) throws InterruptedException, ExecutionException { + var listOfRuns = List.of( + "foodRetailing_wo_rangeConstraint/71_ICEVBEV_NwCE_BVWP_10000it_DCoff_noTax/", + "foodRetailing_wo_rangeConstraint/71a_ICEV_NwCE_BVWP_10000it_DCoff_noTax/", + "foodRetailing_wo_rangeConstraint/72_ICEVBEV_NwCE_BVWP_10000it_DCoff_Tax25/", + "foodRetailing_wo_rangeConstraint/73_ICEVBEV_NwCE_BVWP_10000it_DCoff_Tax50/", + "foodRetailing_wo_rangeConstraint/74_ICEVBEV_NwCE_BVWP_10000it_DCoff_Tax100/", + "foodRetailing_wo_rangeConstraint/75_ICEVBEV_NwCE_BVWP_10000it_DCoff_Tax150/", + "foodRetailing_wo_rangeConstraint/76_ICEVBEV_NwCE_BVWP_10000it_DCoff_Tax200/", + "foodRetailing_wo_rangeConstraint/77_ICEVBEV_NwCE_BVWP_10000it_DCoff_Tax250/", + "foodRetailing_wo_rangeConstraint/78_ICEVBEV_NwCE_BVWP_10000it_DCoff_Tax300/", + //nun Runs mit ReichweitenConstraint + "foodRetailing_with_rangeConstraint/21_ICEVBEV_NwCE_BVWP_10000it_DC_noTax/", + "foodRetailing_with_rangeConstraint/22_ICEVBEV_NwCE_BVWP_10000it_DC_Tax25/", + "foodRetailing_with_rangeConstraint/23_ICEVBEV_NwCE_BVWP_10000it_DC_Tax50/", + "foodRetailing_with_rangeConstraint/24_ICEVBEV_NwCE_BVWP_10000it_DC_Tax100/", + "foodRetailing_with_rangeConstraint/25_ICEVBEV_NwCE_BVWP_10000it_DC_Tax150/", + "foodRetailing_with_rangeConstraint/26_ICEVBEV_NwCE_BVWP_10000it_DC_Tax200/", + "foodRetailing_with_rangeConstraint/27_ICEVBEV_NwCE_BVWP_10000it_DC_Tax250/", + "foodRetailing_with_rangeConstraint/28_ICEVBEV_NwCE_BVWP_10000it_DC_Tax300/" + ) ; + for (String runDir : listOfRuns) { + run(args, runDir); + } + } + public static void run( String[] args, String runDir ) + throws InterruptedException, ExecutionException { + + // Path to public repo: + String pathToInput = "https://svn.vsp.tu-berlin.de/repos/public-svn/matsim/scenarios/countries/de/berlin/projects/freight/" + runDir; + // ### config stuff: ### + Config config; + if ( args==null || args.length==0 || args[0]==null ){ + config = ConfigUtils.createConfig(); + config.network().setInputFile("https://svn.vsp.tu-berlin.de/repos/public-svn/matsim/scenarios/countries/de/berlin/berlin-v5.5-10pct/output-berlinv5.5/berlin-v5.5.3-10pct.output_network.xml.gz"); + config.controller().setOutputDirectory( "../shared-svn/projects/freight/studies/UpdateEventsfromEarlierStudies/" + runDir ); + config.controller().setLastIteration( 0 ); // no iterations; for iterations see RunFreightWithIterationsExample. kai, jan'23 + config.controller().setOverwriteFileSetting(OutputDirectoryHierarchy.OverwriteFileSetting.deleteDirectoryIfExists); + config.global().setCoordinateSystem("EPSG:31468"); + + FreightCarriersConfigGroup freightConfigGroup = ConfigUtils.addOrGetModule( config, FreightCarriersConfigGroup.class ); + freightConfigGroup.setCarriersFile( pathToInput + "output_carriers.xml.gz" ); + freightConfigGroup.setCarriersVehicleTypesFile( pathToInput + "output_vehicleTypes.xml.gz" ); + } else { + config = ConfigUtils.loadConfig( args, new FreightCarriersConfigGroup() ); + } + + // load scenario (this is not loading the freight material): + Scenario scenario = ScenarioUtils.loadScenario( config ); + + //load carriers according to freight config + CarriersUtils.loadCarriersAccordingToFreightConfig( scenario ); + + // output before jsprit runDir (not necessary) +// new CarrierPlanWriter(CarriersUtils.getCarriers( scenario )).write( "output/unmodifiedCarriers.xml" ) ; + // (this will go into the standard "output" directory. note that this may be removed if this is also used as the configured output dir.) + + for (Carrier carrier : CarriersUtils.addOrGetCarriers(scenario).getCarriers().values()) { + final CarrierPlan selectedPlan = carrier.getSelectedPlan(); + + //Add meaningful TourIds. + int tourIdIndex = 1; + Collection updatedScheduledTours = new LinkedList<>(); + for (ScheduledTour scheduledTour : selectedPlan.getScheduledTours().stream().toList()) { + updatedScheduledTours.add(ScheduledTour.newInstance( + scheduledTour.getTour().duplicateWithNewId(Id.create(tourIdIndex, Tour.class)), + scheduledTour.getVehicle(), + scheduledTour.getDeparture() )); + tourIdIndex++; + } + selectedPlan.getScheduledTours().clear(); + selectedPlan.getScheduledTours().addAll(updatedScheduledTours); + + //put score into JspritScore and Set MATSimscore to -INF. + selectedPlan.setJspritScore(selectedPlan.getScore()); + selectedPlan.setScore(Double.NEGATIVE_INFINITY); + } + +// new CarrierPlanWriter(CarriersUtils.getCarriers( scenario )).write( "output/updatedCarriersWithTourIds.xml" ); + + // ## MATSim configuration: ## + final Controler controler = new Controler( scenario ) ; + controler.addOverridingModule(new CarrierModule() ); + + + // ## Start of the MATSim-Run: ## + controler.run(); + + var analysis = new RunFreightAnalysisEventBased(config.controller().getOutputDirectory() , config.controller().getOutputDirectory()+"Analysis", "EPSG:31468"); + try { + analysis.runAnalysis(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/org/matsim/vsp/freight/food/analyse/FreightAnalyseKT.java b/src/main/java/org/matsim/vsp/freight/food/analyse/FreightAnalyseKT.java index 6b7ab44..02cb189 100644 --- a/src/main/java/org/matsim/vsp/freight/food/analyse/FreightAnalyseKT.java +++ b/src/main/java/org/matsim/vsp/freight/food/analyse/FreightAnalyseKT.java @@ -81,7 +81,9 @@ public class FreightAnalyseKT { // private static final String RUN_DIR = "../shared-svn/projects/freight/studies/WP51_EmissionsFood/output/20200611_fa8d691/51a_ICEV_NwCE_BVWP_2000it_DCoff_noTax/" ; // private static final String RUN_DIR = "../shared-svn/projects/freight/studies/WP51_EmissionsFood/output/20200611_fa8d691/21a_ICEV_NwCE_BVWP_10000it_DC_noTax/" ; - private static final String RUN_DIR = "../shared-svn/projects/freight/studies/WP51_EmissionsFood/output/20200611_fa8d691/10000it/71a_ICEV_NwCE_BVWP_10000it_DCoff_noTax/" ; +// private static final String RUN_DIR = "../shared-svn/projects/freight/studies/WP51_EmissionsFood/output/20200611_fa8d691/10000it/71a_ICEV_NwCE_BVWP_10000it_DCoff_noTax/" ; + + private static final String RUN_DIR = "./output/freightUpdate71-2/" ; // private static final String RUN_DIR = "../shared-svn/projects/freight/studies/WP51_EmissionsFood/output/Demo1ItDC/" ; @@ -109,7 +111,7 @@ private void run() { // File populationFile = new File(RUN_DIR + "output_plans.xml.gz"); File networkFile = new File(RUN_DIR+ "output_network.xml.gz"); File carrierFile = new File(RUN_DIR+ "output_carriers.xml.gz"); - File vehicleTypeFile = new File(RUN_DIR+ "output_vehicleTypes.xml.gz"); + File vehicleTypeFile = new File(RUN_DIR+ "output_carriersVehicleTypes.xml.gz"); Network network = NetworkUtils.readNetwork(networkFile.getAbsolutePath());