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); }
public HSolve() { Utilities = new Utilities(); PricingUtilities = new PricingUtilities(); OutputUtilities = new OutputUtilities(); }
//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); } }