CVXPY 中的混合整数规划约束
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)
输出:
[[ 1. 0. 0.]
[ 1. -0. -0.]
[-0. 1. -0.]]
1.39538277332097
我的问题:
我想对问题施加约束,以便 Matrix X
中的每一列只有一个元素可以为“1”,其余元素应该为零。因此在每一列中最多有一个值为 1 的元素。
我试过了:
Const1=cp.sum(X,0)<=1
Prob1= cp.Problem(Objective,[Const1])
Prob1.solve()
出现以下错误:
File
"path\Anaconda3\lib\site-packages\cvxpy\reductions\complex2real\complex2real.py",
line 95, in invert
dvars[vid] = solution.dual_vars[cid]
KeyError: 11196
Any other way to set this constraint ??
我将 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)
其中:
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)
输出:
[[ 1. 0. 0.]
[ 1. -0. -0.]
[-0. 1. -0.]]
1.39538277332097
我的问题:
我想对问题施加约束,以便 Matrix X
中的每一列只有一个元素可以为“1”,其余元素应该为零。因此在每一列中最多有一个值为 1 的元素。
我试过了:
Const1=cp.sum(X,0)<=1
Prob1= cp.Problem(Objective,[Const1])
Prob1.solve()
出现以下错误:
File "path\Anaconda3\lib\site-packages\cvxpy\reductions\complex2real\complex2real.py", line 95, in invert dvars[vid] = solution.dual_vars[cid]
KeyError: 11196
Any other way to set this constraint ??
我将 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)