static void Main(string[] args) { DateTime t = DateTime.Now; MemoryStream ms = new MemoryStream(); System.IO.File.OpenRead("dvrp_problems\\smallokul12D.txt").CopyTo(ms); byte[] data = ms.ToArray(); DVRP dvrpDivide = new DVRP(data); dvrpDivide.DivideProblem(1000); Console.WriteLine("Sets: " + dvrpDivide.PartialProblems.Length); //Console.ReadKey(); List<byte[]> ans = new List<byte[]>(); foreach (var x in dvrpDivide.PartialProblems) { DVRP dvrpSolve = new DVRP(data); dvrpSolve.Solve(x, new TimeSpan(3, 0, 0)); ans.Add(dvrpSolve.Solution); } DVRP dvrpMerge = new DVRP(data); dvrpMerge.MergeSolution(ans.ToArray()); SolutionContainer a = (SolutionContainer)new BinaryFormatter().Deserialize(new MemoryStream(dvrpMerge.Solution)); Console.WriteLine(); Console.WriteLine("MinCost = " + a.MinCost); Console.WriteLine(); foreach (var q in a.MinPath) { foreach (var w in q) Console.Write(w + ", "); Console.WriteLine(); } Console.WriteLine(); foreach (var q in a.Times) { foreach (var w in q) Console.Write(w + ", "); Console.WriteLine(); } Console.WriteLine(); TimeSpan ts = DateTime.Now - t; Console.WriteLine("Time: " + ts.ToString()); }
public void SolveProblemTest() { var testData = System.IO.File.ReadAllText(@"DVRPTestData\okul12D.vrp"); DVRP result = DVRP.Parse(testData); }
public void DivideProblemTest() { string testData = System.IO.File.ReadAllText(@"DVRPTestData\okul12D.vrp"); byte[] problemData = CommunicationModule.ConvertStringToData(testData); TaskSolverDVRP taskSolver = new TaskSolverDVRP(problemData); byte[][] result = taskSolver.DivideProblem(10); string fistNodeText = System.IO.File.ReadAllText(@"DVRPTestData\AllTxtFiles.txt"); int[][][] firstNodeTab = DVRP.ParseData(CommunicationModule.ConvertStringToData(fistNodeText)); int[][][] firstNodeTest = DVRP.ParseData(result[0]); bool ok = true; string msg = ""; if (firstNodeTab.Length == firstNodeTest.Length) { for (int i = 0; i < firstNodeTab.Length; i++) { if (firstNodeTab[i].Length == firstNodeTest[i].Length) { for (int j = 0; j < firstNodeTab[i].Length; j++) { if (firstNodeTab[i][j].Length == firstNodeTest[i][j].Length) { for (int k = 0; k < firstNodeTab[i][j].Length; k++) { if (firstNodeTab[i][j][k] != firstNodeTest[i][j][k]) { msg = "firstNodeTab[i][j][k] != firstNodeTest[i][j][k]"; ok = false; break; } } if (!ok) { break; } } else { msg = "firstNodeTab[i][j].Length != firstNodeTest[i][j].Length"; ok = false; break; } } if (!ok) { break; } } else { msg = "firstNodeTab[i].Length == firstNodeTest.Length"; ok = false; break; } } } else { msg = "firstNodeTab.Length != firstNodeTest.Length"; ok = false; } Assert.IsTrue(ok, msg); }
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); }