这种打包/匹配变体的现有算法?

时间:2014-11-03 06:57:09

标签: algorithm graph dynamic-programming matching knapsack-problem

我有2个数组,一个代表项目,另一个代表可以放置项目的分档:
例如:

ArrayItemSizes = [ 1 2 3 4 ];
ArrayBinSizes = [ 3 3 4 ];

一些规则:

  1. ArrayBinSizes和ArrayItemSizes保证总和相同的数字。(在这个例子中,它们总和为10)
  2. 如果需要,每件物品都可以分成小块
  3. 每个项目仅限于放置在箱子中的物品中的一个(因此物品1的一半可以放置在箱子中,物品1的一半可以放置在不同的箱子中,但是它用于物品1)
  4. 每个项目必须完全放在垃圾箱中。
  5. 棘手的部分是我希望它具有最小数量的唯一项目 - 箱子配对 因此,如果将ArrayItemSizes(1)拆分为3个不同的bin,那将导致3个项目 - > bin pairings:

    1. 第1项 - bin 1
    2. 第1项 - bin 2
    3. 第1项 - bin 3
    4. 这比将项目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个项目)。由于增加了对数,因此将物品拆分到不同的箱子中通常是不合需要的,尽管通常需要包装所有物品。

      我无法弄清楚如何表示这个问题。我查看了图形对匹配的东西和背包/打包问题,但没有一个匹配。

      解决这个问题的好方法是什么?我应该研究优化问题求解器,动态编程,图算法还是其他什么?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用共享感知算法进行机器托管:http://research.google.com/pubs/pub37147.html