簡體   English   中英

CVXPY 中的混合 Integer 編程約束

[英]Mixed Integer Programming Constraints in CVXPY

其中: V: 3x3 Matrix
V:標量復數常數
問題是要找到一個boolean矩陣X
最小化Residules=cp.norm(cp.sum(cp.multiply(Vc,S))-V)

以下代碼有效:

import numpy as np

import cvxpy as cp 



V= np.random.random(3)*10 + np.random.random(3)*10 * 1j
C=3+4j
X=cp.Variable((3,3), boolean=True)

Residules=cp.norm(cp.sum(cp.multiply(Vc,S))-V)
Objective= cp.Minimize(Residules)





Const1=cp.sum(X,0)<=1

Prob1= cp.Problem(Objective)



Prob1.solve() 
X=np.array(X.value)  
print(np.round(X))
print(Prob1.value)

output:

[[ 1.  0.  0.]
 [ 1. -0. -0.]
 [-0.  1. -0.]]
1.39538277332097

我的問題:我想對問題進行約束,以便對於Matrix X中的每一列,只有一個元素可以是“1”,並且 rest 應該為零。 這樣在每一列中最多有一個值為 1 的元素。我試過:

Const1=cp.sum(X,0)<=1
Prob1= cp.Problem(Objective,[Const1])
Prob1.solve() 

發生以下錯誤:

文件“path\Anaconda3\lib\site-packages\cvxpy\reductions\complex2real\complex2real.py”,第 95 行,invert dvars[vid] = solution.dual_vars[cid]

密鑰錯誤:11196
任何其他方式來設置這個約束?

我將complex的部分與real部分分開。 我認為它有效。

import numpy as np
import cvxpy as cp


Vr= np.random.random((3,3))
Vi=np.random.random((3,3))
Cr=3
Ci=4

X=cp.Variable((3,3),boolean=True)



Real=cp.sum(cp.multiply(Vr,X))-Cr
Imag=cp.sum(cp.multiply(Vi,X))-Ci


Residules=cp.norm(cp.hstack([Real, Imag]), 2)
Objective= cp.Minimize(Residules)




const1=[cp.sum(X,axis = 0)<=1]


Prob1= cp.Problem(Objective,const1)



Prob1.solve() 
X=np.array(X.value)  
print(np.round(X))
print(Prob1.value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM