python二次规划包cvxopt的应用--含公式转化--附代码

python二次规划包cvxopt的应用

  1. 将二次规划模型转化成标准形式,如下:
    在这里插入图片描述
    转化过程:
    在这里插入图片描述
    在这里插入图片描述

  2. Anaconda Prompt终端中安装cvxopt包

pip install cvxopt
  1. 代码求解
from cvxopt  import solvers, matrix

#输入参数
a=matrix([1.3,1.7,1.6,2.0,2.4,2.0])     #
MC=10.0                                 #
MP=10.0                                 #
C=13.81                                 #
PP=67.6                                 #
r=matrix([0.5413,-0.5331,3.1365,-0.1012,0.2158,0.9516])               #
r=r/100 #单位是%
delta_s=matrix([0.0,-0.0052,-0.002852675,7.8E-05,0.0,-0.003913261])   #一阶差分
Q=215.72                                #
ER=0.005
#ER=0
b1=23.65                                #
B=46.53                                 #
#协方差
u = matrix([[ 0.56151323,0.02505385,0.13533642,0.00212289,0.49597174,0.41500665],
 [0.02505385,0.0095071,0.02321269,0.00208772,0.00916027,0.00735012],
 [0.13533642,0.02321269,0.16043025,0.00609671,0.17117526,0.13249022],
 [0.00212289,0.00208772,0.00609671,0.0008067,0.00116325,0.00218411],
 [0.49597174,0.00916027,0.17117526,0.00116325,0.49047643,0.39924501],
 [0.41500665,0.00735012,0.13249022,0.00218411,0.39924501,0.34130143]])
#一阶差分协方差
v = matrix([[0.0,0.0,0.0,0.0,0.0,0.0],
[0,0.00129,0.00006,0,0,0.00018],
[0,0.00006,0.00001,0,0,0.00002],
[0,0,0,0,0,0],
[0,0,0,0,0,0],
[0,0.00018,0.00002,0,0,0.00018]])
#化标准格式的项
ADD=matrix([[(a[0]+MC),0.0,0.0,0.0,0.0,0.0],
           [0.0,a[1],0.0,0.0,0.0,0.0],
           [0.0,0.0,a[2]+MP,0.0,0.0,0.0],
           [0.0,0.0,MP,a[3]+MP,0.0,0.0],
           [0.0,0.0,MP,MP,a[4]+MP,0.0],
           [0.0,0.0,MP,MP,MP,a[5]+MP]])


#目标函数1/2 x^Px+q^x
P =u+v+ADD  # matrix里区分int和double,所以数字后面都需要加小数点
P=P*2
q = matrix([-2*MC*C,0.0,-2*MP*PP,-2*MP*PP,-2*MP*PP,-2*MP*PP])

#不等式约束Gx≤h
G = matrix([[-r[0]-delta_s[0],-1.0,0.0,0.0,0.0,0.0,0.0,0.0],
          [-r[1]-delta_s[1],0.0,-1.0,0.0,0.0,0.0,0.0,0.0],
          [-r[2]-delta_s[2],0.0,0.0,-1.0,0.0,0.0,0.0,-1.0],
          [-r[3]-delta_s[3],0.0,0.0,0.0,-1.0,0.0,0.0,-1.0],
          [-r[4]-delta_s[4],0.0,0.0,0.0,0.0,-1.0,0.0,-1.0],
          [-r[5]-delta_s[5],0.0,0.0,0.0,0.0,0.0,-1.0,-1.0]])
h = matrix([-ER*Q,-b1,-0.0,-0.0,-0.0,-0.0,-0.0,-B])

#等式约束Ax=b
A=matrix([[1.0],[1.0],[1.0],[1.0],[1.0],[1.0]])
b=matrix([Q])

# 调用优化函数solvers.qp求解
sol = solvers.qp(P,q,G,h,A,b)   
print(sol['x'])                 # 打印结果,sol里面还有很多其他属性,读者可以自行了解

打印结果
在这里插入图片描述
转载请注明出处,谢谢。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值