在我的工作中,我遇到了以下问题:给定相似度矩阵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 $。
由于我不是数学编程方面的专家,我想知道你是否可以帮助我。
提前谢谢! 一切顺利,
亚瑟答案 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变量!
希望这有帮助