package cz.agents.agentpolis.darptestbedvisio; import com.google.common.collect.Sets; import com.google.inject.Injector; import cz.agents.agentpolis.darptestbed.global.GeneratorParams; import cz.agents.agentpolis.darptestbed.global.GlobalParams; import cz.agents.agentpolis.darptestbed.siminfrastructure.logger.analyser.TestbedLogAnalyser; import cz.agents.agentpolis.darptestbed.siminfrastructure.logger.analyser.init.TestbedAnalyserProcessorInit; import cz.agents.agentpolis.darptestbed.siminfrastructure.logger.item.PassengerGetInVehicleLogItem; import cz.agents.agentpolis.darptestbed.siminfrastructure.logger.item.PassengerGetOffVehicleLogItem; import cz.agents.agentpolis.darptestbed.siminfrastructure.planner.init.TestbedPlannerModuleFactory; import cz.agents.agentpolis.darptestbed.simmodel.agent.TestbedEntityType; import cz.agents.agentpolis.darptestbed.simmodel.agent.logicconstructor.DecentralizedLogicConstructor; import cz.agents.agentpolis.darptestbed.simmodel.environment.TestbedEnvironmentFactory; import cz.agents.agentpolis.darptestbed.simulator.initializator.DispatchingAndTimersInitFactory; import cz.agents.agentpolis.darptestbed.simulator.initializator.DriverForBenchmarkInitFactory; import cz.agents.agentpolis.darptestbed.simulator.initializator.PassengerForBenchmarkInitFactory; import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.NearestNodeInitModuleFactory; import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.init.TestbedMapInit; import cz.agents.agentpolis.siminfrastructure.logger.LogItem; import cz.agents.agentpolis.simulator.creator.SimulationCreator; import cz.agents.agentpolis.simulator.vehiclemodel.init.VehicleDataModelModulFactory; import cz.agents.agentpolis.tools.geovisio.database.connection.DatabaseConnectionSettings; import cz.agents.agentpolis.tools.geovisio.spy.AgentPolisDataReaderFactory; import cz.agents.agentpolis.tools.geovisio.spy.SpyAgentInitFactory; import cz.agents.agentpolis.tools.geovisio.spy.agentpolis.AgentPolisDataReader; import cz.agents.agentpolis.tools.geovisio.spy.darptestbed.DarpTestbedDataReader; import cz.agents.agentpolis.tools.geovisio.spy.darptestbed.LogHandler; import cz.agents.agentpolis.utils.config.ConfigReader; import cz.agents.agentpolis.utils.config.ConfigReaderException; import cz.agents.dbtokmlexporter.darptestbed.DarpTestbedKmlVisualisator; import eu.superhub.wp4.initializator.simulator.delaymodel.InfinityDelayingSegmentCapacityDeterminer; import org.apache.log4j.Logger; import java.awt.*; import java.io.File; import java.io.IOException; import java.util.Set; /** * The main class of Mobility Testbed. */ public class Main { // ====================== SETTINGS START ======================= // get path to the "experiments" directory on your filesystem private static String experimentsPath = new File(System.getProperty("user.dir")).getParentFile().getParent() + "/experiments/"; // specify the directory containing the benchmark scenario static String BENCHMARK_DIR = experimentsPath + "hague_20_drivers"; // should the KML visualization be interpolated? (recommended: true) private static final boolean INTERPOLATE_VISUALIZATION = true; // ======================= SETTINGS END ======================== private static final Logger LOGGER = Logger.getLogger(Main.class); /** * @param args * @throws cz.agents.agentpolis.utils.config.ConfigReaderException * @throws java.io.IOException */ public static void main(String[] args) throws ConfigReaderException, IOException { // select the benchmark directory File experiment; if (args.length > 1) { experiment = new File(args[0]); } else if (args.length == 1) { experiment = new File("experiments/" + args[0]); } else { experiment = new File(BENCHMARK_DIR); } LOGGER.debug("Path: " + experiment.getAbsolutePath()); ConfigReader scenario = ConfigReader.initConfigReader(new File(experiment, "config/scenario.groovy").toURL()); int resultFolderId = 0; // extract the filenames from scenario.groovy config file String driverPopulationPath = scenario.getStringValueFromConfig("driverPopulationPath"); String passengerPopulationPath = scenario.getStringValueFromConfig("passengerPopulationPath"); String darpResultFileName = scenario.getStringValueFromConfig("darpResultFileName"); int epsg = scenario.getIntegerValueFromConfig("epsg"); String vehicledatamodelPath = scenario.getStringValueFromConfig("vehicledatamodelPath"); // args = new String[0]; // visualization settings final DatabaseConnectionSettings settings = new DatabaseConnectionSettings("", 0, "doesnt", "matter", "testbed", "public"); String visualizationName = darpResultFileName; int visInterval = 1 * 60 * 1000; File resultFolder = new File(experiment, "results" + File.separator + resultFolderId); // visualization settings end TestbedLogAnalyser testbedLogAnalyser = new TestbedLogAnalyser(new File(resultFolder, "result_" + darpResultFileName + ".txt"), System.currentTimeMillis()); final LogHandler logHandler = new LogHandler(); SimulationCreator creator = new SimulationCreator(new TestbedEnvironmentFactory( new InfinityDelayingSegmentCapacityDeterminer()), experiment, resultFolderId, scenario); creator.addLogger(testbedLogAnalyser); creator.addLogger(logHandler); creator.addInitModulFactory(new VehicleDataModelModulFactory(new File(vehicledatamodelPath))); TestbedAnalyserProcessorInit processorInit = new TestbedAnalyserProcessorInit(testbedLogAnalyser); creator.addInitFactory(processorInit); Set<Class<? extends LogItem>> logItems = Sets.newHashSet(); logItems.add(PassengerGetInVehicleLogItem.class); logItems.add(PassengerGetOffVehicleLogItem.class); creator.addAllowEventForEventViewer(logItems); // generate a random seed for the whole application if (args.length > 1) { GlobalParams.setUseResultsFile(false); GlobalParams.setRandomSeed(Long.parseLong(args[1])); GlobalParams.setTimerDriverInterval(Integer.parseInt(args[2])); GlobalParams.setTimerPassengerInterval(Integer.parseInt(args[3])); if (args.length > 4) GlobalParams.setTimerDispatchingInterval(Integer.parseInt(args[4])); } else { // default (in-source) settings of parameters GlobalParams.setUseResultsFile(true); GlobalParams.setRandomSeed(4); GlobalParams.setTimerDispatchingInterval(10); GlobalParams.setTimerDriverInterval(1); // 30 GlobalParams.setTimerPassengerInterval(1); // 35 } GlobalParams.setVelocityInKmph(15); GlobalParams.setDriverReturnsBack(false); GlobalParams.setPricePerKilometer(1000); LOGGER.info("Seed = " + GlobalParams.getRandomSeed()); creator.addInitModulFactory(new NearestNodeInitModuleFactory(epsg)); creator.addInitModulFactory(new TestbedPlannerModuleFactory()); // add agents into the environment final DecentralizedLogicConstructor logicConstructor = new DecentralizedLogicConstructor(); creator.addAgentInit(new DriverForBenchmarkInitFactory(new File(driverPopulationPath), logicConstructor)); // creator.addAgentInit(new PassengerInitFactory()); creator.addAgentInit(new PassengerForBenchmarkInitFactory(new File(passengerPopulationPath), logicConstructor)); // initialize the dispatching and timers creator.addInitModulFactory(new DispatchingAndTimersInitFactory(logicConstructor)); // set up visual appearance of agents creator.addEntityStyleVis(TestbedEntityType.TAXI_DRIVER, Color.BLUE, 9); creator.addEntityStyleVis(TestbedEntityType.PASSENGER, Color.GREEN, 8); // visualization init creator.addAgentInit(new SpyAgentInitFactory(visInterval, visualizationName, new AgentPolisDataReaderFactory() { public AgentPolisDataReader createAgentPolisReader(Injector injector, String visName, int interval) throws ReflectiveOperationException, InterruptedException { return new DarpTestbedDataReader(settings, injector, visName, interval, 4326, logHandler .getRequestStorage()); } }, creator)); // start it up creator.startSimulation(new TestbedMapInit(epsg)); // after finishing the simulation, report statistics testbedLogAnalyser.processResult(); String outputString = resultFolder.getAbsolutePath() + File.separator + "visualizations"; // export visualization to kml if (scenario.getBooleanValueFromConfig("createVisualizations") == true) { DarpTestbedKmlVisualisator kmlVisualisator = new DarpTestbedKmlVisualisator(settings, visInterval, "public", outputString, INTERPOLATE_VISUALIZATION, BENCHMARK_DIR+File.separator+"data"+File.separator+"visualizations"); kmlVisualisator.visualize(); } else { LOGGER.info("Visualizations are turned off."); } LOGGER.info("FINISHED!"); System.exit(0); } private static boolean uni(int r) { return r != -1; } }