Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 /// <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;
 }