我有2个数组,一个代表项目,另一个代表可以放置项目的分档:
例如:
ArrayItemSizes = [ 1 2 3 4 ];
ArrayBinSizes = [ 3 3 4 ];
一些规则:
棘手的部分是我希望它具有最小数量的唯一项目 - 箱子配对 因此,如果将ArrayItemSizes(1)拆分为3个不同的bin,那将导致3个项目 - > bin pairings:
这比将项目1装入1个bin更不可取,这只会创建1个项目 - bin对。
一个好的解决方案看起来像这样:
ArrayItemSizes( 1 ) in ArrayBinSizes ( 1 )
ArrayItemSizes( 2 ) in ArrayBinSizes ( 1 )
ArrayItemSizes( 3 ) in ArrayBinSizes ( 2 )
ArrayItemSizes( 4 ) in ArrayBinSizes ( 3 )
它具有最小数量的可能的项目 - 箱子配对(4对),并使用所有项目。
不合需要的解决方案如下:
A fraction of ArrayItemSizes( 1 ) in ArrayBinSizes ( 1 )
A fraction of ArrayItemSizes( 1 ) in ArrayBinSizes ( 2 )
A fraction of ArrayItemSizes( 1 ) in ArrayBinSizes ( 3 )
A fraction of ArrayItemSizes( 2 ) in ArrayBinSizes ( 1 )
A fraction of ArrayItemSizes( 2 ) in ArrayBinSizes ( 2 )
A fraction of ArrayItemSizes( 2 ) in ArrayBinSizes ( 3 )
依旧......
这会产生比所需更多的项目 - 箱子配对,并且是不可取的(仅适用于前2个项目)。由于增加了对数,因此将物品拆分到不同的箱子中通常是不合需要的,尽管通常需要包装所有物品。
我无法弄清楚如何表示这个问题。我查看了图形对匹配的东西和背包/打包问题,但没有一个匹配。
解决这个问题的好方法是什么?我应该研究优化问题求解器,动态编程,图算法还是其他什么?