package cz.agents.agentpolis.darptestbed.siminfrastructure.request.generator;
import com.google.inject.Guice;
import com.google.inject.Injector;
import cz.agents.agentpolis.darptestbed.global.Utils;
import cz.agents.agentpolis.darptestbed.siminfrastructure.request.generator.support.GPSPositionGeneratorWithRestaurantDensityBasedDistributionFactory;
import cz.agents.agentpolis.darptestbed.siminfrastructure.request.generator.support.PassengerGeneratorImpl;
import cz.agents.agentpolis.darptestbed.siminfrastructure.request.generator.support.PassengerGeneratorWithContinousRequestCallTimeDistribution;
import cz.agents.agentpolis.darptestbed.siminfrastructure.request.generator.support.RandomVehicleCapacityGenerator;
import cz.agents.agentpolis.darptestbed.simulator.initializator.osm.NodeExtendedFunction;
import org.apache.commons.math3.random.Well19937c;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.xalan.xsltc.DOM;
import org.codehaus.jackson.map.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class RestaurantDensityBasedRequestGeneratorApp {
private static final Logger LOGGER = Logger.getRootLogger();
static final String BENCHMARK_DIR = "prague";
static final String OSM_FILE_NAME = "prague";
static final int PASSENGER_REQUESTS_COUNT = 300;
static final int DRIVERS_COUNT = 100;
public static final String LOG_LOG4J_XML = "log/log4j.xml";
// static String BENCHMARK_DIR = "hague_20_drivers";
// static String OSM_FILE_NAME = "haag";
/**
* @param args
* @throws java.io.IOException
* @throws org.codehaus.jackson.map.JsonMappingException
*
* @throws org.codehaus.jackson.JsonGenerationException
*
*/
public static void main(String[] args) throws IOException, SQLException {
File logFile = new File(LOG_LOG4J_XML);
if (logFile.exists()) {
DOMConfigurator.configure(LOG_LOG4J_XML);
} else {
URL url = RestaurantDensityBasedRequestGeneratorApp.class.getResource("/log/log4j.xml");
DOMConfigurator.configure(url);
}
if (args.length == 1 && args[0].equals("DEFAULT")) {
args = new String[] {BENCHMARK_DIR, OSM_FILE_NAME, Integer.toString(PASSENGER_REQUESTS_COUNT),
Integer.toString(DRIVERS_COUNT)};
System.out.printf("Using default command-line parameters: %s %s %s %s\n", args);
} else if (args.length != 4) {
System.out.println("Usage 1: <path-with-input-data> <osm-clean-file-name> <passenger-requests-count> " +
"<driver-requests-counter>");
System.out.println("Usage 2: DEFAULT");
return;
} else {
System.out.printf("Using command-line parameters: %s %s %s %s\n", args);
}
final String osmFileName = "experiments/" + args[0] + "/data/" + args[1] + ".osm";
final String benchmarkDir = "experiments/" + args[0] + "/";
Well19937c rnd = new Well19937c();
Random random = new Random();
Injector injector = Guice.createInjector();
GPSPositionGeneratorWithRestaurantDensityBasedDistributionFactory positionGeneratorFactory =
new GPSPositionGeneratorWithRestaurantDensityBasedDistributionFactory(osmFileName, benchmarkDir,
rnd, injector);
LOGGER.debug("PositionGenerator finished");
RestaurantDensityBasedRequestGenerator generator = new RestaurantDensityBasedRequestGenerator(
positionGeneratorFactory, random, 1, osmFileName, benchmarkDir, new ObjectMapper(), injector);
LOGGER.debug("RequestGenerator finished");
File osmMap = new File(osmFileName);
generator.generatePassengers(Integer.parseInt(args[2]),
new PassengerGeneratorWithContinousRequestCallTimeDistribution(
PassengerGeneratorWithContinousRequestCallTimeDistribution.createDayMockDistribution(0),
random, generator.getUtils()),
"passenger-with-requests.json", osmMap);
LOGGER.debug("GeneratePassengers finished");
generator.generateDrivers(Integer.parseInt(args[3]), new RandomVehicleCapacityGenerator(5, random),
"driver.json", osmMap);
LOGGER.debug("GenerateDrivers finished");
}
}