Ejemplo n.º 1
0
 private void Copy(object obj)
 {
     if (SelectedSequence != null)
     {
         var copy  = SelectedSequence.Copy();
         var index = Sequences.IndexOf(SelectedSequence);
         Sequences.Insert(index + 1, copy);
         ReorderSequenceNumbers();
         SelectedSequence = copy;
     }
 }
Ejemplo n.º 2
0
        //AC2, PU3, PU05, PU002R, PU02R.

        public void ComputeAlgorithm()
        {
            double widthCovered = double.MaxValue;
            double areaCovered  = double.MaxValue;

            IList <string> itemAllocationMethods = new List <string>
            {
                "AC1",
                //"AC2"
            };
            IList <string> pricingRules = new List <string>
            {
                "IP1",
                "IP2",
                "IP3",
                "IP4"
            };
            IList <string> priceUpdatingRules = new List <string>
            {
                "PU1",
                "PU2",
                //"PU3",

                //"PU001",
                "PU002",
                "PU005",
                "PU02",
                //"PU05",

                //"PU001R",
                //"PU002R",
                "PU005R",
                //"PU02R",
                "PU05R"
            };

            Sequences.Add(new Sequence());
            Sequences.Add(new Sequence());

            int counter = 0;

            foreach (string itemAllocationMethod in itemAllocationMethods)
            {
                foreach (string pricingRule in pricingRules)
                {
                    foreach (string priceUpdatingRule in priceUpdatingRules)
                    {
                        //ogni volta mi arrivano da hsolve due sequenze, la prima e l'ultima
                        IList <Sequence> sequences = HSolve.ComputeHeuristic(Configuration, itemAllocationMethod,
                                                                             pricingRule, priceUpdatingRule);

                        //controllo se la lunghezza coperta dall'ultimo bin della soluzione è
                        //minore rispetto alla lunghezza trovata nelle sequenze precedentementi
                        if (sequences[0].WidthCovered < widthCovered)
                        {
                            widthCovered = sequences[0].WidthCovered;
                            Console.WriteLine("LUNGHEZZA UPDATE -> widthCovered " + widthCovered + ", " + itemAllocationMethod + " " +
                                              pricingRule + " " + priceUpdatingRule);
                            Sequences.RemoveAt(0);
                            Sequences.Insert(0, sequences[0]);
                        }

                        //controllo se l'area coperta dall'ultimo bin della soluzione è
                        //minore rispetto all'area trovata nelle sequenze precedentementi
                        if (sequences[1].AreaCovered < areaCovered)
                        {
                            areaCovered = sequences[1].AreaCovered;
                            Console.WriteLine("AREA UPDATE -> areaCovered " + areaCovered + ", " + itemAllocationMethod + " " +
                                              pricingRule + " " + priceUpdatingRule);
                            Sequences.RemoveAt(1);
                            Sequences.Insert(1, sequences[1]);
                        }
                        Console.WriteLine("check " + counter);
                        counter += 1;
                    }
                }
            }

            Console.WriteLine("\n SEQUENZA W// MIN LUNGHEZZA");
            Console.WriteLine("numero bin " + Sequences[0].Bins.Count);
            Console.WriteLine("lunghezza coperta ultimo bin " + Sequences[0].WidthCovered);
            Console.WriteLine("area usata ultimo bin - valore assoluto " + Sequences[0].UsedAreaAbsoluteValue);
            Console.WriteLine("area usata ultimo bin - percentuale " + Sequences[0].UsedAreaPercentageValue + "%");

            Console.WriteLine("\n SEQUENZA W// MIN AREA");
            Console.WriteLine("numero bin " + Sequences[1].Bins.Count);
            Console.WriteLine("Area coperta ultimo bin " + Sequences[1].AreaCovered);
            Console.WriteLine("lunghezza coperta ultimo bin " + Sequences[1].WidthCovered);
            Console.WriteLine("area usata ultimo bin - valore assoluto " + Sequences[1].UsedAreaAbsoluteValue);
            Console.WriteLine("area usata ultimo bin - percentuale " + Sequences[1].UsedAreaPercentageValue + "%");
        }