【发布时间】:2021-10-10 00:35:25
【问题描述】:
请告诉我如何使用以下变量解决我的问题。
哪个求解器更好?
目标函数 = x^T Q x + C^T x
-
Q是与Q(i,i)>=0的对角矩阵 x.shape=(n,1)
等式约束:Aeq.x =beq
-
Aeq.shape=(n,n)和beq.shape=(n,1)
下限和上限:lb <= x <= ub
import random
import numpy as np
lb.shape=(n,1) and ub.shape=(n,1)
I=np.eye(24)
Z=np.zeros((24,24))
a=0.012
b=1.1
gamma1=0.9/80
gamma2=1.1/80
MM=np.eye(24)
for i in range (22):
MM[i+1,i]=-1
MM[0,23]=-1
M=random.randint(200,300, size=(24,1))
max_pch=30.0
max_pdch=30.0
ppp=random.randint(150,200, size=(24,))
Q=np.asarray(np.bmat([[a*I,Z,Z,Z],[Z,a*I,Z,Z],[Z,Z,0.00001*I,Z],[Z,Z,Z,0.00001*I] ]))
C=np.asarray(np.bmat([[b*np.ones(24),b*np.ones(24),0*np.ones(24),ppp]]))
Aeq=np.asarray(np.bmat([[-I,I,Z,I], [-gamma1*I, gamma2*I,MM,Z],[Z,Z,Z,Z],[Z,Z,Z,Z]]))
beq=np.asarray(np.bmat([[M],[np.zeros((72,1))]]))
lb=np.asarray(np.bmat([[0*np.ones(24),0*np.ones(24),[0.1],0.1*np.ones(22),[0.9],0.0*np.ones(24)]]))
ub=np.asarray(np.bmat([[max_pch*np.ones(24),max_pdch*np.ones(24),[0.9],0.9*np.ones(22),[0.9],500*np.ones(24)]]))
x = solve_qp(P=Q, q=C.T.reshape((96,)),
G=None , h=None,
A=Aeq , b=beq.reshape(96,),
lb=lb.T.reshape((96,)) , ub=ub.T.reshape((96,)))
print("QP solution: x = {}".format(x))
有什么问题?
- QP解决方案:
x = None
Matlab 中的相同代码(带有fmincon)给出了正确的结果。但是,在 Python 中,我无法得到该结果。
【问题讨论】:
-
欢迎来到 Stack Overflow。请编辑问题并包含您尝试过的代码,"Minimal, Reproducible, Example."
-
谢谢。编辑。你能帮帮我吗?
标签: python matlab constraints cvxopt quadratic-programming