示例#1
0
        public string CheckIfAllItemsAreAllocated(Configuration configuration, IUtilities Utilities, IPricingUtilities PricingUtilities,
                                                  string itemAllocationMethod, IOutputUtilities OutputUtilities, string pricingRule, string priceUpdatingRule)
        {
            string res = "";

            z = i; // K

            //============ TEST ==============
            LowerBound = Utilities.ComputeLowerBound(NotRemovedItems, configuration.BinWidth, configuration.BinHeight);
            NotRemovedItems.Clear();

            if ((z + LowerBound) > Zstar)
            {
                //goto l2;
                //UpdateItemPrices(configuration, PricingUtilities, priceUpdatingRule);
                res = "UpdateItemPrices";
            }
            //================================

            bool isSortedTemporaryItemsEmpty = true;

            //controllo se tutta la lista è stata svuotata
            foreach (Item temporaryItem in TemporaryItems)
            {
                if (temporaryItem.IsRemoved == false)
                {
                    isSortedTemporaryItemsEmpty = false;
                    break;
                }
            }

            if (isSortedTemporaryItemsEmpty)
            {
                //goto l0;
                //UpdateBestSolution(OutputUtilities, itemAllocationMethod, pricingRule, priceUpdatingRule);
                res = "UpdateBestSolution";
            }
            if (!isSortedTemporaryItemsEmpty)
            {
                i += 1;
                //l1
                //FillUpBinI(itemAllocationMethod, Utilities);
                res = "FillUpBinI";
            }
            return(res);
        }
示例#2
0
 public HSolve()
 {
     Utilities        = new Utilities();
     PricingUtilities = new PricingUtilities();
     OutputUtilities  = new OutputUtilities();
 }
示例#3
0
        //l0

        public void UpdateBestSolution(IOutputUtilities OutputUtilities, string itemAllocationMethod,
                                       string pricingRule, string priceUpdatingRule)
        {
            Zstar = z;
            Bins  = TemporaryBins;

            //Utilities.IsSolutionCorrect(items, bins, iter);

            if (OutputUtilities.IsNewBestWidthFound(Bins[i]))
            {
                //aggiungo la sequenza di un certa iterazione
                Sequence s = new Sequence()
                {
                    Zstar          = Zstar,
                    Bins           = new List <Bin>(),
                    IteratioNumber = Iter,
                    Criterias      = new List <string>
                    {
                        itemAllocationMethod,
                        pricingRule,
                        priceUpdatingRule
                    },
                    WidthCovered            = OutputUtilities.GetBestWidthFound(),
                    UsedAreaAbsoluteValue   = OutputUtilities.ComputeUsedAreaAbsoluteValue(Bins[i].NestedItems),
                    UsedAreaPercentageValue = OutputUtilities.ComputeUsedAreaPercentageValue(Bins[i].Height, Bins[i].Width)
                };

                //per mettere in sequence solo i bin che hanno elementi e non quelli dove nestedItems = null
                s.Bins = Bins.Where(x => x.NestedItems != null).ToList();

                Sequences.RemoveAt(0);
                Sequences.Insert(0, s);
            }

            if (OutputUtilities.IsNewBestAreaFound(Bins[i]))
            {
                //aggiungo la sequenza di un certa iterazione
                Sequence s = new Sequence()
                {
                    Zstar          = Zstar,
                    Bins           = new List <Bin>(),
                    IteratioNumber = Iter,
                    Criterias      = new List <string>
                    {
                        itemAllocationMethod,
                        pricingRule,
                        priceUpdatingRule
                    },
                    WidthCovered            = OutputUtilities.ComputeWidthLastBin(Bins[i].NestedItems),
                    AreaCovered             = OutputUtilities.GetBestAreaFound(),
                    UsedAreaAbsoluteValue   = OutputUtilities.ComputeUsedAreaAbsoluteValue(Bins[i].NestedItems),
                    UsedAreaPercentageValue = OutputUtilities.ComputeUsedAreaPercentageValue(Bins[i].Height, Bins[i].Width)
                };

                //per mettere in sequence solo i bin che hanno elementi e non quelli dove nestedItems = null
                s.Bins = Bins.Where(x => x.NestedItems != null).ToList();

                Sequences.RemoveAt(1);
                Sequences.Insert(1, s);
            }
        }