Optimization 用python求解非线性装箱优化问题

Optimization 用python求解非线性装箱优化问题,optimization,constraints,bin-packing,non-linear,discrete,Optimization,Constraints,Bin Packing,Non Linear,Discrete,是否有一种直接的方法(例如,某个模块带有常用的解算器)来解决由python中众所周知的装箱问题(例如,请参阅)衍生的问题 详细地说,箱子包装问题,其中s(i)是物品的重量 minimize K = sum_j y_j # use as less bins as possible s.t. sum_i s(i)x_i,j <= B*y_j for all j # bin capacity B must not be exceeded sum

是否有一种直接的方法(例如,某个模块带有常用的解算器)来解决由python中众所周知的装箱问题(例如,请参阅)衍生的问题

详细地说,箱子包装问题,其中s(i)是物品的重量

minimize K = sum_j y_j                    # use as less bins as possible
s.t. sum_i s(i)x_i,j <= B*y_j for all j   # bin capacity B must not be exceeded
     sum_j x_i,j = 1 for all i            # all items have been fit in exactly one bin
     x_i,j, y_j being integer variables in {0,1}
因此,不仅应尽量减少使用的箱子数量,还应尽量减少共享箱子的选定项目的标准偏差(这通常会导致一些必要的折衷)。因此,在我看来,这个问题是非线性的

对于如何使用python解决这个问题的任何建议,我非常感激(python api就足够了,算法本身也可以用任何其他语言实现)

到目前为止,我已经尝试扩展现有的装箱解算器(基于硬币或分支和切割解算器)关于目标函数中的附加部分,但失败了。这大概是由于诱发非线性


非常感谢您提前

不要使用标准偏差,而是可以更容易地最小化范围:
max-min
。这可以用线性方式表示:

  Minimize xmax-xmin
  xmax >= x[i]  for all i
  xmin <= x[i]  for all i
最小化xmax xmin
xmax>=x[i]表示所有i

谢谢你的想法。我不确定是否需要纯线性目标函数的解算器能够处理此问题,因为max和min可以用绝对值表示(例如max(a,b)=0.5*(a+b+(a-b)),因此不能被视为线性。有什么想法可以继续吗?
minimizemax(a,b)-min(a,b)
可以很容易地线性化为:
minimizexmaxxmin
根据
xmax≥a、 最大值≥b、 xmin≤a、 xmin≤b
现在它有意义了。您引入了两个附加变量(“辅助变量”)xmax和xmin,以及回答中所述的两组附加约束。很好,谢谢!
  Minimize xmax-xmin
  xmax >= x[i]  for all i
  xmin <= x[i]  for all i