static void Run(Arguments arguments) { IGraphHopperClient graphHopperClient = new GraphHopperClient(); INominatimClient nominatimClient = new NominatimClient(); IDemandGenerator demand = arguments.UseBetaDistribution ? (IDemandGenerator) new BetaDemandGenerator(arguments.AlphaDemandDistribution, arguments.BetaDemandDistribution, arguments.Capacity) : new GammaDemandGenerator(arguments.GammaShape, arguments.GammaRate); IVrpGenerator generator = new VrpGenerator( demand, new ClientCoordsGenerator(nominatimClient, 0.001), new DistanceMatrixGenerator(graphHopperClient)); IVrpProblemWriter writer = new VrpProblemWriter(); var param = new GeneratorParameters() { ProblemName = arguments.ProblemName, Clients = arguments.Clients, Streets = arguments.Streets, Comment = "Generated by a tool", Capacity = arguments.Capacity, Depot = new Location() { Latitude = arguments.DepotLatitude, Longitude = arguments.DepotLongitude }, IncludeCoords = arguments.IncludeCoords, }; var tasks = new Task[arguments.NumberOfInstances]; for (int i = 0; i < arguments.NumberOfInstances; i++) { int num = i + 1; tasks[i] = Task.Run(async() => { var problem = await generator.Generate(param); if (arguments.NumberOfInstances > 1) { problem.Name += num; } await WriteFiles(writer, problem, arguments, num); }); } Task.WaitAll(tasks); }
/// <summary> /// Initializes a new instance of VrpGenerator. /// </summary> /// <param name="demandGenerator">Demand generator.</param> /// <param name="clientCoordsGenerator">Client coordinates generator.</param> /// <param name="distanceMatrixGenerator">Distance matrix generator.</param> public VrpGenerator(IDemandGenerator demandGenerator, IClientCoordsGenerator clientCoordsGenerator, IDistanceMatrixGenerator distanceMatrixGenerator) { _demandGenerator = demandGenerator; _clientCoordsGenerator = clientCoordsGenerator; _distanceMatrixGenerator = distanceMatrixGenerator; }