捕获 MILP 中某些对象的顺序

计算科学 混合整数规划
2021-12-20 04:20:53

我有一个凸优化问题,它取决于一组的顺序N对象。这意味着,对于每个可能的排序,我都会得到一个不同的凸优化问题。我的最终目标是在给定所有可能排序的情况下找到最佳解决方案。一种方法是解决所有问题n!可能的问题。一个更好的方法(我认为)是将整个事情写成一个 MILP,让 MOSEK 来处理这些艰苦的工作。我这样做如下:我创建了N每个对象的二进制变量总共N2二进制变量。说对象是F1,,FN并且二进制变量是bkj在哪里k,j{1,,N}.

我让

bkj={1if object Fk goes into position j;0otherwise.

为了保证每个对象都准确地进入一个位置,我对每个对象都强制执行以下约束k

j=1Nbkj=1
此外,为了保证每个位置都接收到一个对象,我对每个位置强制执行以下约束j
k=1Nbkj=1

这对我有用,我能够使用 MOSEK 解决问题。

我的第一个问题是:有没有更好的方法来做到这一点?可能少于N2二进制变量?

我的第二个问题是:假设我想要对象p出现在对象之前q. 我如何在约束中强制它?我能想出的唯一想法是以下。我们必须对每个k{1,,N1}.

bpk=1bqk==bqN=0
我们翻译成:
bpk=0bqk==bqN=0
由于“或”,这将需要额外的二进制变量来处理。有更好的主意吗?

谢谢

1个回答

在混合整数线性规划公式中编码此约束需要n2变量,并且在实践中对于大型n. 另一种方法是超越整数线性规划,使用支持“alldiff”约束的约束规划系统。