此优化算法的正式名称?

时间:2018-08-11 04:48:45

标签: algorithm optimization mathematical-optimization

我的一个编码项目中存在以下问题,在此我将对其进行简化:

我正在在线订购食品杂货,并且需要非常特定数量的特定物品。我想订购以下商品:

  • 8个苹果
  • 1山药
  • 2汤
  • 3牛排
  • 20个橙汁

有许多商店与我等距,我将从那里运送食物。并非所有商店都有我需要的东西。 我想用最少的订单数来获得所需的东西。例如,从下面的#2商店订购是浪费的订单,因为通过从不同的商店订购,我可以用更少的订单完成商品。 能解决这个问题的优化算法的名字是什么?

商店#1供应

  • 50个苹果

第2个商店的货源

  • 1橙汁

  • 2牛排

  • 1汤

商店#3供应

  • 25汤

  • 50橙汁

商店#4供应

  • 25牛排

  • 10根山药

在这种情况下,最低的可能顺序是3。 #1商店有8个苹果。 #3商店的2汤和20橙汁。 #4商店有1块山药和3块牛排。

1 个答案:

答案 0 :(得分:1)

在我看来,这很可能是Integer Linear programming problem (ILP)的一种受限情况,即其0或1变体,其中整数变量仅限于集合{0,1}。已知这是NP难的(相应的决策问题是NP完全的)。

此问题的表达方式如下(遵循引文中的约定):

  

给出矩阵 A ,约束向量 b 和权重向量 c ,找到向量 x ∈∈{0,1} N 因此满足所有约束 A⋅x b ,并且成本 c⋅x 很小。

我翻转了约束不等式,但这等效于更改 A b 的符号

不等式表示您对订单的满意程度:您可以至少在所逛商店中购买每件商品的金额。请注意, b 的长度与 A 中的行数以及两个< em> c x 。点积 c⋅x 自然是一个标量。

由于您要尽量减少旅行次数,因此每次旅行的费用相同,因此 c == 1 < strong>c⋅x 是旅行总数。商店库存矩阵 A 每个项目都有一行,每个商店都有一列,而 b 是您的购物清单。

自然地,通过尝试 x 的所有可能的2 N 值,可以找到确切的最佳解决方案。

由于没有单一的方法可以解决NP难题,因此请考虑问题的大小以及您要达到的最佳值的接近程度。当“库存”很大时,贪婪的方法会很有效(当您下一个要访问的商店的物品总数最多时)。如果您事先对预期的最小行程数有所了解,则可以将搜索光束调整为某个值,使行程数超出某个倍增系数。当您的搜索受到时间限制时,这是最好的方法(我通常进行波束搜索,与本文中提到的分支和剪切方法密切相关,在图形中占用几GB内存的速度略快于每个内存30ms的限制光束宽达10,000的探测步骤)。如果搜索范围不太粗糙,模拟退火也可以。

search on cs.SE;对于这类问题,它甚至可能是一个更好的地方。