Beispiel #1
0
        public bool CheckAnswer(List<Order>[,] oplossingen, Order[] orders, int[,] reistijden)
        {
            for (int i1 = 0; i1 < 2; i1++)
            {
                for (int i2 = 0; i2 < 5; i2++)
                {
                    List<Order> oplossing = oplossingen[i1, i2];
                    mogelijk = true;
                    int vrachtWagenGewicht = 0;
                    int j = 1;
                    double reistijd = 0;
                    //for(int j = 0; j < oplossing.route.Length - 1; j++)
                    while (oplossing.Count > j && mogelijk)
                    {
                        reistijd += reistijden[oplossing[j - 1].routeNummer, oplossing[j].routeNummer];
                        reistijd += oplossing[j].legingsDuur * 60;
                        vrachtWagenGewicht += oplossing[j - 1].aantalContainers * oplossing[j - 1].afvalPerContainer;
                        if (oplossing[j - 1].orderNummer == 0)
                            vrachtWagenGewicht = 0;

                        if (vrachtWagenGewicht > 100000)
                            return mogelijk = false;
                        if (reistijd > 43200)
                            return mogelijk = false;
                        j++;
                    }
                }
            }
            return mogelijk;
        }
Beispiel #2
0
        //Parameters: Huidige oplossing, niet-ingeplande orders, de lijst van alle orders
        // return: nieuwe oplossing, nieuwe lijst van niet-ingeplande orders.
        public static KeyValuePair<List<Order>[, ], List<int>> AddOrder(List<Order>[,] oldList, List<int> unplannedOrders, Order[] orders, Random rand)
        {
            List<Order>[,] list = (List<Order>[,])oldList.Clone();
            List<int> upOrders = unplannedOrders;

            if (upOrders.Count != 0)
            {
                int plannableOrder = upOrders[rand.Next(upOrders.Count)];

                Order order = orders.Where(i => i.orderNummer ==plannableOrder).First();
                int day = rand.Next(5);
                int truck = rand.Next(2);

                switch (order.aantalOphalen)
                #region switch
                {
                    case 1:
                        list[truck, day].Add(order);
                        break;
                    case 2:
                        if (day != 2)
                        {
                            list[truck, day].Add(order);
                            day = (day + 3) % 6;
                            list[truck, day].Add(order);
                        }
                        break;
                    case 3:
                        if (day == 0 || day == 2 || day == 4)
                        {
                            list[truck, 0].Add(order);
                            list[truck, 2].Add(order);
                            list[truck, 4].Add(order);
                        }
                        break;
                    case 4:
                        list[truck, day].Add(order);
                        day = (day + 1) % 5;
                        list[truck, day].Add(order);

                        day = (day + 1) % 5;
                        list[truck, day].Add(order);

                        day = (day + 1) % 5;
                        list[truck, day].Add(order);
                        break;
                    case 5:
                        for (int a = 0; a < 5; a++)
                        {
                            list[truck, a].Add(order);
                        }
                        break;
                    default: break;
                }
                #endregion

            }
            return new KeyValuePair<List<Order>[,], List<int>>(list, upOrders);
        }
Beispiel #3
0
        public static KeyValuePair<List<Order>[, ], List<int>> Change(List<Order>[,] oldList, List<int> unplannedOrders, Order[] orders, Random rand, int c)
        {
            int day, truck;
            KeyValuePair<List<Order>[,], List<int>> result;
            List<Order>[,] list = oldList;
            List<int> upOrders = unplannedOrders;

            switch (c)
            {
                //15% chance to add a random order to the solution
                case 0:case 1:case 2:
                    result = Verbeteringen.AddOrder(list, upOrders, orders, rand);
                    list = result.Key;
                    upOrders = result.Value;
                    break;
                //10% chance to remove a random order from the solution
                case 3:case 4:
                    result = Verbeteringen.RemoveOrder(list, upOrders, orders, rand);
                    list = result.Key;
                    upOrders = result.Value;
                    break;
                //20% chance to change the solution with 2-opt
                case 5:case 6:case 7:case 8:
                    day = rand.Next(5);
                    truck = rand.Next(2);
                    list[truck, day] = Verbeteringen.Opt(list[truck, day]);
                    break;
                //15% chance to change the order of a route randomly
                case 9:case 10:case 11:
                    day = rand.Next(5);
                    truck = rand.Next(2);
                    list[truck, day] = Verbeteringen.RandomChange(list[truck, day], rand);
                    break;
                //15% chance to change the day of an order
                case 12:case 13:case 14:
                    list = Verbeteringen.ChangeDay(list, rand);
                    break;
                //15% chance to change the truck of an order
                case 15:case 16:case 17:
                    list = Verbeteringen.ChangeTruck(list, rand);
                    break;
                //5% chance to add a trip to the dump
                case 18:
                    list = Verbeteringen.AddDump(list, rand);
                    //TODO
                    break;
                //5% chance to remove a trip to the dump
                 case 19:
                    list = Verbeteringen.RemoveDump(list, rand);

                    //TODO
                    break;
            }

               return new KeyValuePair<List<Order>[,], List<int>>(list, upOrders);
        }
Beispiel #4
0
 public int RijTijden(List<Order>[,] oplossing, Order[] orders, int[,] reistijden, List<int> nietIngepland)
 {
     int rijtijden = 0;
     for (int i1 = 0; i1 < 2; i1++)
     {
         for (int i2 = 0; i2 < 5; i2++)
         {
             rijtijden += checkRijTijd(oplossing[i1, i2], orders, reistijden);
         }
     }
     return rijtijden;
 }
Beispiel #5
0
 public int checkRijTijd(List<Order> oplossing, Order[] orders, int[,] reistijden)
 {
     int rijtijd = 0;
     int j = 1;
     while (oplossing.Count > j && mogelijk)
     {
         rijtijd += reistijden[oplossing[j - 1].routeNummer, oplossing[j].routeNummer];
         rijtijd += (int)oplossing[j].legingsDuur * 60;
         j++;
     }
     return rijtijd;
 }
Beispiel #6
0
        public List<Order>[,] StartOplossing(Order[] orders)
        {
            List<Order>[,] oplossingen = new List<Order>[2,5];

            for (int i = 0; i < 2; i++)
            {
                for (int k = 0; k < 5; k++)
                {
                    oplossingen[i, k] = new List<Order>();
                }
            }
            StreamReader r2 = new StreamReader("startfiles/OplossingFile.txt");

            string newLine = r2.ReadLine();
            int j = 0;
            while (newLine != null)
            {
                string[] newLines = newLine.Split(';');

                for (int i = 0; i < orders.Length; i++)
                {
                    if (orders[i].orderNummer == int.Parse(newLines[3]))
                        oplossingen[int.Parse(newLines[0]) - 1, int.Parse(newLines[1]) - 1].Add(orders[i]);
                    else
                        continue;
                    break;
                }

                if (int.Parse(newLines[3]) == 0)
                {
                 //   oplossingen[int.Parse(newLines[0]) + int.Parse(newLines[1])].stort[j] = int.Parse(newLines[2]);
                 //   j++;
                }
                newLine = r2.ReadLine();
            }
            return oplossingen;
        }
Beispiel #7
0
        public Order[] OrderList()
        {
            Order[] orders = new Order[1178];
            /* Moet je aanpassen */
            StreamReader r3 = new StreamReader("startfiles/OrderFile.txt");

            string newLine = r3.ReadLine();
            int i = 1;
            orders[0] = new Order(0, 0, 0, 0, 30,56343016,513026712, 0);
            while (newLine != null)
            {
                string[] newLines = newLine.Split(';');
                string[] newLines2 = newLines[2].Split('P');
                for (int j = 0; j < newLines.Length; j++)
                {
                    newLines[j].Trim();
                }
                orders[i] = new Order(int.Parse(newLines[0]), int.Parse(newLines2[0]), int.Parse(newLines[3]), int.Parse(newLines[4]), double.Parse(newLines[5], CultureInfo.InvariantCulture), double.Parse(newLines[7], CultureInfo.InvariantCulture), double.Parse(newLines[8], CultureInfo.InvariantCulture),int.Parse(newLines[6]));
                i++;
                newLine = r3.ReadLine();
            }

            return orders;
        }
Beispiel #8
0
        //Parameters: Huidige oplossing, niet-ingeplande orders, de lijst van alle orders
        // return: nieuwe oplossing, nieuwe lijst van niet-ingeplande orders.
        public static KeyValuePair<List<Order>[, ], List<int>> RemoveOrder(List<Order>[,] oldList, List<int> unplannedOrders, Order[] orders, Random rand)
        {
            int day = rand.Next(5);
            int truck = rand.Next(2);
            List<int> upOrders = unplannedOrders;
            List<Order>[,] list = oldList;
            if (list[truck, day].Count != 0)
            {

                int removableIndex = rand.Next(list[truck, day].Count);
                Order removable = list[truck, day][removableIndex];
                if (removable.orderNummer != 0)
                {
                    int count = 0;

                    for (int i = 0; i < 2; i++)
                    {
                        for (int j = 0; j < 5; j++)
                        {
                            if (count >= removable.aantalOphalen)
                                break;

                            if (list[i, j].Remove(removable))
                            {
                                count++;
                            }
                        }
                    }
                    upOrders.Add(removable.orderNummer);
                }
            }
            return new KeyValuePair<List<Order>[,], List<int>>(list, upOrders);
        }
Beispiel #9
0
 public List<int> UnPlannedOrders(Order[] orders, List<Order>[,] oplossingen)
 {
     List<int> unPlannedOrders = new List<int>();
     for (int i = 0; i < 1178; i++)
     {
         bool finishedorder = false;
         for (int j1 = 0; j1 < 2; j1++)
         {
             for (int j2 = 0; j2 < 5; j2++)
             {
                 int k = 0;
                 while (oplossingen[j1, j2].Count > k)
                 {
                     if (oplossingen[j1, j2][k] == orders[i])
                     {
                         finishedorder = true;
                         break;
                     }
                     k++;
                 }
                 if (finishedorder)
                     break;
             }
             if (finishedorder)
                 break;
         }
         if (finishedorder)
             continue;
         unPlannedOrders.Add(orders[i].orderNummer);
     }
     return unPlannedOrders;
 }