将双线性优化程序公式化为整数线性程序

时间:2013-11-02 14:54:39

标签: integer-programming

在我的工作中,我遇到了以下问题:给定相似度矩阵D,其中$ d_ {i,j} \ in \ Re $表示对象$ i $和$ j $之间的相似度,我想选择$ k $对象,对于$ k \ in {1,\ dots,n} $,以最小化所选对象之间的相似性。我第一次尝试正式制定这个问题是使用以下整数程序:

$ \最小化$ $ d_ {1,2} X_1X_2 + d_ {1,3} X_1X_3 + \ dots + d_ {1,n} X_1X_n + d_ {2,1} X_2X_1 + \ dots + d_ {n, n-1} X_nX_ {n-1} $

这样$ X_1 + X_2 + \ dots + X_n = k $和$ X_y \ in {0,1} $,$ y = 1,\ dots,n $

在上面的程序中,$ X_y $表示是否选择了对象$ y $。显然,上述程序不是线性的。我试图通过使用变量$ X_ {1,2} $来使目标函数成为线性,这表示是否选择了对象$ X_1 $和$ X_2 $。但是,我正在努力制定必须选择恰好$ k $对象的约束,即先前的约束$ X_1 + X_2 + \ dots + X_n = k $。

由于我不是数学编程方面的专家,我想知道你是否可以帮助我。

提前谢谢! 一切顺利,

亚瑟

1 个答案:

答案 0 :(得分:0)

你走的是正确的道路,只是缺少一件事:

如果选择对象i,则x_i为1,否则为0。

如果同时选择了对象y_ij,则i & j为1,否则为

IP如下:

最大化

sum d_ij y_ij

s.t。

sum x_i = k

x_i + x_j - 1 <= y_ij for all i<j

x & y binary variables

奇怪的链接约束表示y_ij = 1 iff x_i + x_j =2

仅为每对定义一个y变量!

希望这有帮助