public void SolveProblemTest17D()
        {
            string testData = System.IO.File.ReadAllText(@"DVRPTestData\okul17D.vrp");

            byte[]         problemData = CommunicationModule.ConvertStringToData(testData);
            TaskSolverDVRP taskSolver  = new TaskSolverDVRP(problemData);

            byte[][] division  = taskSolver.DivideProblem(6);
            byte[][] solutions = new byte[6][];
            for (int i = 0; i <= 6; i++)
            {
                int[][] partialData = DVRPHelper.ParsePartialProblemData(division[i]);
                solutions[i] = taskSolver.Solve(division[i], new TimeSpan());
            }
            taskSolver.MergeSolution(solutions);
            DVRPPartialSolution finalSol = DVRPPartialSolution.Parse2FinalSol(CommunicationModule.ConvertDataToString(taskSolver.Solution, taskSolver.Solution.Length), taskSolver.Dvrp);

            Assert.IsTrue(Math.Abs(finalSol.pathLen - 1089) < 1);
        }
        public void GetIndexTest()
        {
            var subsets = TaskSolverDVRP.CreateSubsets(new int[10] {
                0, 1, 2, 3, 4, 5, 6, 7, 8, 9
            });                                                                                      //.ToArray();

            subsets.Sort(
                delegate(int[] tab1, int[] tab2)
            {
                if (tab1.Length < tab2.Length)
                {
                    return(-1);
                }
                else if (tab2.Length < tab1.Length)
                {
                    return(1);
                }
                else
                {
                    for (int i = 0; i < tab1.Length; i++)
                    {
                        if (tab1[i] < tab2[i])
                        {
                            return(-1);
                        }
                        else if (tab2[i] < tab1[i])
                        {
                            return(1);
                        }
                    }
                    return(0);
                }
            }
                );
            var subsetsArray = subsets.ToArray();

            long[,] comb = DVRPHelper.GetAllCombination(11);

            int wyn = DVRPHelper.GetIndex(subsetsArray[15], comb, 10);

            Assert.IsTrue(wyn == 15);
        }
Пример #3
0
        public void DVRPParseTest1()
        {
            string testData = System.IO.File.ReadAllText(@"DVRPTestData\okul12D.vrp");
            DVRP   result   = DVRPHelper.Parse(testData);

            DVRP model = new DVRP();

            model.FormatVersionNumber = "okul12a";
            model.Comment             = "Best known objective: 976.27TIMESTEP: 7";
            model.Name          = "okul12a";
            model.NumDepots     = 1;
            model.NumCapacities = 1;
            model.NumVistis     = 12;
            model.NumLocations  = 13;
            model.NumVehicles   = 12;
            model.Capacities    = 100;

            model.Depots            = new Depot[model.NumDepots];
            model.Depots[0]         = new Depot();
            model.Depots[0].depotID = 0;

            model.Clients = new Client[model.NumVistis];
            for (int i = 0; i < model.NumVistis; i++)
            {
                model.Clients[i] = new Client();
            }
            model.Clients[0].visitID     = 1;
            model.Clients[0].size        = -48;
            model.Clients[0].locationID  = 1;
            model.Clients[1].visitID     = 2;
            model.Clients[1].size        = -20;
            model.Clients[1].locationID  = 2;
            model.Clients[2].visitID     = 3;
            model.Clients[2].size        = -45;
            model.Clients[2].locationID  = 3;
            model.Clients[3].visitID     = 4;
            model.Clients[3].size        = -19;
            model.Clients[3].locationID  = 4;
            model.Clients[4].visitID     = 5;
            model.Clients[4].size        = -32;
            model.Clients[4].locationID  = 5;
            model.Clients[5].visitID     = 6;
            model.Clients[5].size        = -42;
            model.Clients[5].locationID  = 6;
            model.Clients[6].visitID     = 7;
            model.Clients[6].size        = -19;
            model.Clients[6].locationID  = 7;
            model.Clients[7].visitID     = 8;
            model.Clients[7].size        = -35;
            model.Clients[7].locationID  = 8;
            model.Clients[8].visitID     = 9;
            model.Clients[8].size        = -30;
            model.Clients[8].locationID  = 9;
            model.Clients[9].visitID     = 10;
            model.Clients[9].size        = -26;
            model.Clients[9].locationID  = 10;
            model.Clients[10].visitID    = 11;
            model.Clients[10].size       = -42;
            model.Clients[10].locationID = 11;
            model.Clients[11].visitID    = 12;
            model.Clients[11].size       = -27;
            model.Clients[11].locationID = 12;

            model.Locations = new Location[model.NumLocations];
            for (int i = 0; i < model.NumLocations; i++)
            {
                model.Locations[i] = new Location();
            }
            model.Locations[0].locationID  = 0;
            model.Locations[0].x           = 0;
            model.Locations[0].y           = 0;
            model.Locations[1].locationID  = 1;
            model.Locations[1].x           = -55;
            model.Locations[1].y           = -26;
            model.Locations[2].locationID  = 2;
            model.Locations[2].x           = -24;
            model.Locations[2].y           = 38;
            model.Locations[3].locationID  = 3;
            model.Locations[3].x           = -99;
            model.Locations[3].y           = -29;
            model.Locations[4].locationID  = 4;
            model.Locations[4].x           = -42;
            model.Locations[4].y           = 30;
            model.Locations[5].locationID  = 5;
            model.Locations[5].x           = 59;
            model.Locations[5].y           = 66;
            model.Locations[6].locationID  = 6;
            model.Locations[6].x           = 55;
            model.Locations[6].y           = -35;
            model.Locations[7].locationID  = 7;
            model.Locations[7].x           = -42;
            model.Locations[7].y           = 3;
            model.Locations[8].locationID  = 8;
            model.Locations[8].x           = 95;
            model.Locations[8].y           = 13;
            model.Locations[9].locationID  = 9;
            model.Locations[9].x           = 71;
            model.Locations[9].y           = -90;
            model.Locations[10].locationID = 10;
            model.Locations[10].x          = 38;
            model.Locations[10].y          = 32;
            model.Locations[11].locationID = 11;
            model.Locations[11].x          = 67;
            model.Locations[11].y          = -22;
            model.Locations[12].locationID = 12;
            model.Locations[12].x          = 58;
            model.Locations[12].y          = -97;

            //DEPOT_LOCATION_SECTION
            model.Depots[0].locationID = 0;

            foreach (var v in model.Clients)
            {
                v.unld = 20;
            }

            //DEPOT_TIME_WINDOW_SECTION
            model.Depots[0].start = 0;
            model.Depots[0].end   = 640;

            //TIME_AVAIL_SECTION
            model.Clients[0].time  = 616;
            model.Clients[1].time  = 91;
            model.Clients[2].time  = 240;
            model.Clients[3].time  = 356;
            model.Clients[4].time  = 528;
            model.Clients[5].time  = 459;
            model.Clients[6].time  = 433;
            model.Clients[7].time  = 513;
            model.Clients[8].time  = 444;
            model.Clients[9].time  = 44;
            model.Clients[10].time = 318;
            model.Clients[11].time = 20;

            Assert.AreEqual <DVRP>(result, model);
        }