using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Problems.VehicleRouting.Interfaces; using HeuristicLab.Problems.VehicleRouting.Encodings.Potvin; using HeuristicLab.Problems.VehicleRouting.Encodings.Alba; using HeuristicLab.Core; using HeuristicLab.Problems.VehicleRouting.Encodings.GVR; using HeuristicLab.Encodings.PermutationEncoding; using HeuristicLab.Problems.VehicleRouting.Encodings.Prins; using HeuristicLab.Problems.VehicleRouting.Encodings.Zhu; using HeuristicLab.Problems.VehicleRouting; namespace HeuristicLab.Operators.MPISupport.BinaryTransport { enum VRPEncodingTypes { Alba, GVR, Potvin, Prins, Zhu } [Serializable] class VRPTransfer { public VRPEncodingTypes VRPEncodingType { get; set; } public List Route { get; set; } public static VRPTransfer Convert(IVRPEncoding item) { VRPTransfer result = new VRPTransfer(); if (item is AlbaEncoding) result.VRPEncodingType = VRPEncodingTypes.Alba; else if (item is GVREncoding) result.VRPEncodingType = VRPEncodingTypes.GVR; else if (item is PotvinEncoding) result.VRPEncodingType = VRPEncodingTypes.Potvin; else if (item is PrinsEncoding) result.VRPEncodingType = VRPEncodingTypes.Prins; else if (item is ZhuEncoding) result.VRPEncodingType = VRPEncodingTypes.Zhu; int tourIdx = 0; result.Route = new List(); foreach (Tour tour in item.GetTours()) { foreach (int stop in tour.Stops) { result.Route.Add(stop); } result.Route.Add(-item.GetVehicleAssignment(tourIdx)); tourIdx++; } return result; } public static IVRPEncoding Convert(VRPTransfer item, IExecutionContext globalScope) { IVRPEncoding result = null; IVRPProblemInstance instance = (globalScope.Parameters["ProblemInstance"] as IValueParameter).Value as IVRPProblemInstance; if (item.VRPEncodingType == VRPEncodingTypes.Alba) result = AlbaEncoding.ConvertFrom(item.Route, instance); else if (item.VRPEncodingType == VRPEncodingTypes.GVR) result = GVREncoding.ConvertFrom(item.Route, instance); else if (item.VRPEncodingType == VRPEncodingTypes.Potvin) result = PotvinEncoding.ConvertFrom(item.Route, instance); else if (item.VRPEncodingType == VRPEncodingTypes.Prins) result = PrinsEncoding.ConvertFrom(item.Route, instance); else if (item.VRPEncodingType == VRPEncodingTypes.Zhu) result = ZhuEncoding.ConvertFrom(item.Route, instance); return result; } } }