Exemplo n.º 1
0
 public ClientLocationsPartition(DVRP dvrp)
 {
     this.dvrp  = dvrp;
     this.zbior = new int[dvrp.Clients.Length];
     for (int i = 0; i < zbior.Length; i++)
     {
         zbior[i] = dvrp.Clients[i].locationID;
     }
 }
 public TaskSolverDVRP(byte[] problemData)
     : base(problemData)
 {
     if (problemData.Length > 0 && problemData != null)
     {
         this._problemData = problemData;
         this.Dvrp         = DVRPHelper.Parse(ConvertDataToString(problemData, problemData.Length));
         this.comb         = DVRPHelper.GetAllCombination(Dvrp.ClientID.Length + 1);
     }
 }
Exemplo n.º 3
0
        public bool Equals(DVRP p)
        {
            // If parameter is null return false:
            if ((object)p == null)
            {
                return(false);
            }

            // Return true if the fields match:
            return(DVRPComparer.AreObjectsEqual(this, p, new string[0] {
            }));
        }
        private int depth; // głębokość rekurencji

        public DVRPPathFinder(int[] partialData, DVRP dvrp)
        {
            this.clientsId         = partialData;
            this.act_cycle         = new List <Location>();
            this.best_cycle        = null;
            this.arrivalTimes      = new List <double>();
            this.bestArrivalsTimes = null;
            this.used        = new bool[partialData.Length];
            this.bestPathLen = Double.MaxValue;
            this.dvrp        = dvrp;
            this.cutOff      = 0.5;
            this.depth       = partialData.Length;
        }
Exemplo n.º 5
0
        public static DVRPSolution Parse(string input, DVRP dvrp)
        {
            if (String.IsNullOrWhiteSpace(input))
            {
                throw new ArgumentException(input);
            }

            DVRPSolution instance = new DVRPSolution();

            //var lines = input.Split(new[] { '\n' });
            //int ind = 0;
            //for (int i = 0; i < lines.Length - 1; i++)
            //{
            //    string[] split = DVRPHelper.SplitText(lines[i]);

            //    switch (split[0])
            //    {
            //        case:"SOL":
            //            instance = new List<Location>[int.Parse(split[1])];
            //            instance.pathsArrivalsTimes = new List<double>();
            //            instance.pathLen = double.Parse(split[2]);
            //            break;
            //        case "SOLUTION":

            //            break;
            //        case "PATH":
            //            instance.paths[ind] = new List<Location>();
            //            for (int n = 1; n < split.Length; n++)
            //            {
            //                instance.paths[ind].Add(dvrp.Locations.First(x => x.locationID == int.Parse(split[n])));
            //            }
            //            break;
            //        case "TIMES":
            //            instance.pathsArrivalsTimes[ind] = new List<double>();
            //            for (int n = 1; n < split.Length; n++)
            //            {
            //                instance.pathsArrivalsTimes[ind].Add(double.Parse(split[n]));
            //            }
            //            ind++;
            //            break;
            //    }
            //}
            return(instance);
        }
Exemplo n.º 6
0
        public override bool Equals(System.Object obj)
        {
            // If parameter is null return false.
            if (obj == null)
            {
                return(false);
            }

            // If parameter cannot be cast to Point return false.
            DVRP p = obj as DVRP;

            if ((System.Object)p == null)
            {
                return(false);
            }

            // Return true if the fields match:
            return(DVRPComparer.AreObjectsEqual(this, p, new string[0] {
            }));
        }
Exemplo n.º 7
0
        public static int[][][] ParseData(byte[] data)
        {
            int[][][] result = new int[0][][];
            string    text   = Communication_Library.CommunicationModule.ConvertDataToString(data, data.Length);

            string[] lines = text.Split(new[] { '\n' });

            int set  = 0;
            int path = 0;

            for (int i = 0; i < lines.Length - 1; i++)
            {
                string[] split = DVRP.SplitText(lines[i]);

                switch (split[0])
                {
                case "NUMSETS":
                    result = new int[int.Parse(split[1])][][];
                    break;

                case "SET":
                    result[set] = new int[int.Parse(split[1])][];
                    set++;
                    path = 0;
                    break;

                case "PATH":
                    result[set - 1][path] = new int[int.Parse(split[1])];
                    path++;
                    break;

                default:
                    for (int j = 0; j < split.Length; j++)
                    {
                        result[set - 1][path - 1][j] = int.Parse(split[j]);
                    }
                    break;
                }
            }
            return(result);
        }
Exemplo n.º 8
0
        public static DVRP Parse(string input)
        {
            if (String.IsNullOrWhiteSpace(input))
            {
                throw new ArgumentException(input);
            }

            var instance = new DVRP();
            var lines    = input.Split(new[] { '\n' });

            for (int i = 0; i < lines.Length; i++)
            {
                string[] split = DVRPHelper.SplitText(lines[i]);

                switch (split[0])
                {
                case "VRPTEST":
                    instance.FormatVersionNumber = split[1];
                    break;

                case "COMMENT":
                    instance.Comment += lines[i].Substring(9, lines[i].Length - 9).Trim(new Char[] { ' ', '\r' });    // split[j] + " ";
                    break;

                case "NAME":
                    instance.Name = split[1];
                    break;

                case "NUM_DEPOTS":
                    instance.NumDepots = int.Parse(split[1]);
                    instance.Depots    = new Depot[instance.NumDepots];
                    break;

                case "NUM_CAPACITIES":
                    instance.NumCapacities = int.Parse(split[1]);
                    break;

                case "NUM_VISITS":
                    instance.NumVistis = int.Parse(split[1]);
                    instance.Clients   = new Client[instance.NumVistis];
                    instance.ClientID  = new int[instance.NumVistis];
                    break;

                case "NUM_LOCATIONS":
                    instance.NumLocations = int.Parse(split[1]);
                    instance.Locations    = new Location[instance.NumLocations];
                    break;

                case "NUM_VEHICLES":
                    instance.NumVehicles = int.Parse(split[1]);
                    break;

                case "CAPACITIES":
                    instance.Capacities = int.Parse(split[1]);
                    break;
                //case "DATA_SECTION":

                case "DEPOTS":
                    for (int j = 0; j < instance.NumDepots; j++)
                    {
                        instance.Depots[j]         = new Depot();
                        instance.Depots[j].depotID = int.Parse(lines[++i]);
                    }
                    break;

                case "DEMAND_SECTION":
                    for (int j = 0; j < instance.NumVistis; j++)
                    {
                        instance.Clients[j] = new Client();
                        string[] clientsSplit = DVRPHelper.SplitText(lines[++i]);
                        instance.Clients[j].visitID = int.Parse(clientsSplit[0]);
                        instance.Clients[j].size    = int.Parse(clientsSplit[1]);
                        instance.ClientID[j]        = j;//int.Parse(clientsSplit[0]);
                    }
                    break;

                case "LOCATION_COORD_SECTION":
                    for (int j = 0; j < instance.NumLocations; j++)
                    {
                        instance.Locations[j] = new Location();
                        string[] locationsSplit = DVRPHelper.SplitText(lines[++i]);
                        instance.Locations[j].locationID = int.Parse(locationsSplit[0]);
                        instance.Locations[j].x          = int.Parse(locationsSplit[1]);
                        instance.Locations[j].y          = int.Parse(locationsSplit[2]);
                    }
                    break;

                case "DEPOT_LOCATION_SECTION":
                    for (int j = 0; j < instance.NumDepots; j++)
                    {
                        string[] depotLocationsSplit = DVRPHelper.SplitText(lines[++i]);
                        int      depotId             = int.Parse(depotLocationsSplit[0]);
                        instance.Depots.First(x => x.depotID == depotId).locationID = int.Parse(depotLocationsSplit[1]);
                    }
                    break;

                case "VISIT_LOCATION_SECTION":
                    for (int j = 0; j < instance.NumVistis; j++)
                    {
                        string[] clientsSplit = DVRPHelper.SplitText(lines[++i]);
                        int      visitId      = int.Parse(clientsSplit[0]);
                        instance.Clients.First(x => x.visitID == visitId).locationID = int.Parse(clientsSplit[1]);
                    }
                    break;

                case "DURATION_SECTION":
                    for (int j = 0; j < instance.NumVistis; j++)
                    {
                        string[] clientsSplit = DVRPHelper.SplitText(lines[++i]);
                        int      visitId      = int.Parse(clientsSplit[0]);
                        instance.Clients.First(x => x.visitID == visitId).unld = double.Parse(clientsSplit[1]);
                    }
                    break;

                case "DEPOT_TIME_WINDOW_SECTION":
                    for (int j = 0; j < instance.NumDepots; j++)
                    {
                        string[] depotLocationsSplit = DVRPHelper.SplitText(lines[++i]);
                        int      depotId             = int.Parse(depotLocationsSplit[0]);
                        Depot    d = instance.Depots.First(x => x.depotID == depotId);
                        d.start = double.Parse(depotLocationsSplit[1]);
                        d.end   = double.Parse(depotLocationsSplit[2]);
                    }
                    break;

                //COMMENT: TIMESTEP: 7
                case "TIME_AVAIL_SECTION":
                    for (int j = 0; j < instance.NumVistis; j++)
                    {
                        string[] clientsSplit = DVRPHelper.SplitText(lines[++i]);
                        int      visitId      = int.Parse(clientsSplit[0]);
                        instance.Clients.First(x => x.visitID == visitId).time = double.Parse(clientsSplit[1]);
                    }
                    break;

                case "EOF":
                    break;
                }
            }

            instance.distances = new double[instance.Locations.Length, instance.Locations.Length];
            for (int j = 0; j < instance.Locations.Length; j++)
            {
                for (int k = 0; k < instance.Locations.Length; k++)
                {
                    instance.distances[j, k] = DVRPHelper.Distance(instance.Locations[j], instance.Locations[k]);
                }
            }

            return(instance);
        }
Exemplo n.º 9
0
        public static DVRPPartialSolution Parse(string input, DVRP dvrp)
        {
            if (String.IsNullOrWhiteSpace(input))
            {
                throw new ArgumentException(input);
            }

            DVRPPartialSolution instance = new DVRPPartialSolution();
            //instance.ElemCount = new List<int>();

            var lines = input.Split(new[] { '\n' });
            int ind   = 0;

            for (int i = 0; i < lines.Length - 1; i++)
            {
                string[] split = DVRPHelper.SplitText(lines[i]);

                switch (split[0])
                {
                case "SOL":
                    instance.ElemCount    = int.Parse(split[1]);
                    instance.PartialPaths = new List <Location> [int.Parse(split[1])];
                    instance.PartialPathsArrivalsTimes = new List <double> [int.Parse(split[1])];
                    instance.PartialPathLen            = new List <double>();
                    instance.PartialClientID           = new List <int> [int.Parse(split[1])];
                    instance.NodeNumber = int.Parse(split[2]);
                    break;

                case "SET":
                    i++;
                    split = DVRPHelper.SplitText(lines[i]);
                    instance.PartialClientID[ind] = new List <int>();
                    for (int n = 0; n < split.Length; n++)
                    {
                        instance.PartialClientID[ind].Add(int.Parse(split[n]));
                    }
                    ind++;
                    break;

                case "SOLUTION":
                    instance.PartialPathLen.Add(Double.Parse(split[2]));
                    break;

                case "PATH":
                    instance.PartialPaths[ind] = new List <Location>();
                    for (int n = 1; n < split.Length; n++)
                    {
                        if (int.Parse(split[n]) != -1)
                        {
                            instance.PartialPaths[ind].Add(dvrp.Locations.First(x => x.locationID == int.Parse(split[n])));
                        }
                        else
                        {
                            instance.PartialPaths[ind].Add(new Location()
                            {
                                locationID = -1
                            });
                        }
                    }
                    break;

                case "TIMES":
                    instance.PartialPathsArrivalsTimes[ind] = new List <double>();
                    for (int n = 1; n < split.Length; n++)
                    {
                        instance.PartialPathsArrivalsTimes[ind].Add(double.Parse(split[n]));
                    }

                    break;
                }
            }
            return(instance);
        }