protected override BinPacking2D CreatePacking(
            Solution partialSolution,
            ref IList <int> remainingIDs, IList <PackingItem> items)
        {
            var bp = new BinPacking2D(partialSolution.BinShape);

            bp.ExtremePointBasedPacking(ref remainingIDs, items, stackingConstraints: false);
            return(bp);
        }
        public Solution Decode(Permutation permutation, PackingShape binShape, IList <PackingItem> items)
        {
            Solution    result       = new Solution(binShape, useExtremePoints: true, stackingConstraints: false);
            IList <int> remainingIDs = new List <int>(permutation);

            while (remainingIDs.Count > 0)
            {
                var bp = new BinPacking2D(binShape);
                bp.ExtremePointBasedPacking(ref remainingIDs, items, stackingConstraints: false);
                result.Bins.Add(bp);
            }
            result.UpdateBinPackings();
            return(result);
        }