首页 > 其他分享 >【磨刀霍霍向数模】系列之凸优化求解利器cvxpy

【磨刀霍霍向数模】系列之凸优化求解利器cvxpy

时间:2022-12-03 10:32:59浏览次数:53  
标签:cvxpy end 磨刀霍霍 cvx 求解 align 数模 bmatrix prob

CVXPY是Python中内置的解决凸优化问题的模块,其可以自动转化问题为标准形式,调用解法器,求解。

本文介绍求解的常见思路方法。

1. 设定变量

cvx.Variable(shape=(), name=None, var_id=None, **kwargs)
# 举例
x=cp.Variable(shape=(10,3), name='cov', symmetric=True)
  • 参数介绍
参数 参数含义
shape 变量的维度, 如使用(10,2) 表示 10 × 2的矩阵
name 变量名
**kwargs 可添加的其他属性:neg (负数),nonneg(非负) 等(需要用字典形式传入,如neg =True)

2. 设定目标函数

可选cvx.Minimize(最大值)或则和cvx.Maximize(最小值)

如:cvx.Minimize(A@x)(A@x表示A点乘x)

3. 求解

  • 定义问题

prob=cvx.Problem(obj,cons)

  • 求解

prob.solve()

4. 实例

  • 求解问题

$min_x\ \ \frac{1}{2}x_1^2 +x_2^2 -x_1x_2-2x_1-6x_2$

$\begin{align}s.t. \ x_1 +x_2 \leq 2\-x_1+2x_2\leq2\2x_1+x_2\leq3\0\leq x\end{align}$

  • 求解思路

先将目标函数转化为二次规划问题的一般形式:

$\begin{align} minimize\ \frac{1}{2}x^TPx + q^Tx \end{align}$

$\begin{align} subject\ to\ \ Gx≤h\Ax=b \end{align}$

可得:$P = \begin{bmatrix}1 & -1\-1&2\end{bmatrix}, f' = \begin{bmatrix}-2\-6\end{bmatrix}$

前三个约束条件可以转化为:$A = \begin{bmatrix}1&1\-1&2\2&1\\end{bmatrix}$然后求解即可。

  • 完整代码
# 导入库
import numpy as np
import cvxpy as cvx
# 变量个数
x = cvx.Variable(2)
# 二次规划目标函数中的参数
P = np.array([[1, -1],
              [-1, 2]])
f = np.array([-2, -6])
# 约束条件左侧
A = np.array([[1, -1],
              [-1, 2],
              [2, 1]])
# 约束条件右侧
b = np.array([2, 2, 3])
# 完整的目标函数
obj = cvx.Minimize((1/2)*cvx.quad_form(x, P)+f.T@x)
# 完整的约束条件(用list形式)
cons = [A@x <= b, x >= 0]
# 求解
prob = cvx.Problem(obj, cons)
prob.solve()
# 输出结果
print(prob.status, prob.value, x.value)

参考链接:https://aistudio.baidu.com/aistudio/projectdetail/2564143

标签:cvxpy,end,磨刀霍霍,cvx,求解,align,数模,bmatrix,prob
From: https://blog.51cto.com/coderusher/5908485

相关文章

  • 模板——函数模板
    概念:建立通用的模具,提高复用性。。特点:●模板不能被直接使用,他只是一个框架●模板是通用,但不是万能C++中的一种编程思想称为泛型编程,主要利用的技术就是模板C++提供......
  • 河北稳控科技VM系列振弦采集读数模块的振弦传感器测量流程
    河北稳控科技VM系列振弦采集读数模块的振弦传感器测量流程 如下图所示,VMXXX的测量过程分为激励、采样、计算三个大的步骤。在连续测量模式,计算完成后立即重新开始一......
  • 拓端tecdat|R语言贝叶斯非参数模型:密度估计、非参数化随机效应meta分析心肌梗死数据
    概述最近,我们使用贝叶斯非参数(BNP)混合模型进行马尔科夫链蒙特卡洛(MCMC)推断。在这篇文章中,我们通过展示如何使用具有不同内核的非参数混合模型进行密度估计。在后面的文章中......
  • 河北稳控科技VM系列振弦采集读数模块的测量模式
    河北稳控科技VM系列振弦采集读数模块的测量模式 模块有连续测量和单次测量两种测量模式,通过向测量模式寄存器WKMOD.[0]写入1使模块工作于连续测量工作模式,写入0......
  • VM系列振弦采集读数模块的测量模式
    河北稳控科技VM系列振弦采集读数模块的测量模式模块有连续测量和单次测量两种测量模式,通过向测量模式寄存器WKMOD.[0]写入1使模块工作于连续测量工作模式,写入0使模......
  • [数模小记]2021深圳杯&东三省
    [数模小记]2021深圳杯&东三省上午和队友把深圳杯&东三省的论文交了,终于迎来了完结撒花的时刻,感谢队友带飞,现在简单谈谈感想吧。比赛评价没想到第一次打数模就是深圳杯,基本算......
  • VM系列振弦读数模块采集测量数据的一般步骤
    VM模块是通用型单振弦式传感器测量模块,主要功能是测量频率的传感器内置的温度传感器,使用默认工作参数即可自动测读绝大多数振弦传感器。但由于传感器类型、结构、厂家、钢......
  • VM501振弦读数模块开发测试套件
    开发板(demoboard)是用来进行嵌入式系统开发的电路板,包括中央处理器、存储器、输入设备、输出设备、数据通路/总线和外部资源接口等一系列硬件组件。开发板一般由嵌入式系统......
  • 数模论文写手
    数模论文写手真正的数模专业户,建模方面,看历年来的国家一等奖论文超过100篇,学习别人是怎么建模解决问题;写论文方面,系统学习Latex排版技巧和论文的言语表达以及格式等(Word......
  • 随机数模板
    #ifndef_RANDOM_#define_RANDOM_#include<iostream>#include<ctime>#include<cstdlib>#include<algorithm>intrandom(intx){//生成一个0到x-1范围......