在PICOS优化中,不能对矩阵变量施加正半确定约束

时间:2017-05-29 23:29:07

标签: python optimization graph convex-optimization picos-api

我正在尝试使用Picos包解决以下半确定程序。事实上,这是一个SDP放宽,用于解决3个子图的情况下的maxcut问题。

                int chkComm1 = comm1.ExecuteNonQuery();

            if(chkComm1 == 1)
            {
                //so basically if query call is successful (which it is) it should open a panel with message on my main program or form1, but It doesnt work? anyone help?
                Main_Program mp = new Main_Program();
                mp.orderALERT.Enabled = true;
                mp.orderALERT.Visible = true;
                mp.Refresh();

            }

我得到以下输出:

import picos as pic

maxcut = pic.Problem()    
Y=maxcut.add_variable('Y',(47,47),'symmetric')

WW = 2/3*nx.adjacency_matrix(G).todense()
for i in range(47):
   for j in range(i+1,47):
       WW[i,j]=0
W=pic.new_param('W',WW)


maxcut.add_constraint(Y>>0)
maxcut.add_constraint(pic.tools.diag_vect(Y)==1)
maxcut.add_list_of_constraints([Y[i]> -0.5 for i in range(47*47)])


maxcut.set_objective('max',W|(1-Y))

print (maxcut)
maxcut.solve(verbose = 0)

print ('bound from the SDP relaxation: {0}'.format(maxcut.obj_value()))

问题是虽然我要求Y是正半定--------------------- optimization problem (SDP): 1128 variables, 2256 affine constraints, 1128 vars in 1 SD cones Y : (47, 47), symmetric maximize 〈 W | -Y + |1| 〉 such that Y ≽ |0| diag(Y) = |1| [2209 constraints (first: Y[0] > -0.5)] --------------------- bound from the SDP relaxation: 41.67318021477081 ,但当我检查它的特征值时,并非所有这些都是非负的。

当我删除对角线上的约束(maxcut.add_constraint(Y>>0))时,这个问题就解决了。但是,我确实需要这个约束。

如果您可以建议我的代码有什么问题,那就太棒了...... 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我试图在计算机中重现您的代码。但是,似乎没有定义变量“nx”和$ G $。解决SDP时我也有类似的问题;也许你可能需要施加类似于

的条件
maxcut.add_constraint(Y-10 ** (-3) >>0)

这将确保您的特征值大于$ 10 ^ { - 3} $。