数学规划、线性规划,matlab\python实现

数学规划模型

什么是数学规划

  • 数学规划是运筹学的一个分支,用来研究:在给定的条件下(约束条件),如何按照某一衡量指标(目标函数)来寻求计划、管理工作中的最优方案

数学规划的一般形式

min ⁡ ( 或 max ⁡ ) z = f ( x ) s . t { g i ( x ) ≤ 0 i = 1 , 2 , . . . , m 1 h i ( x ) = 0 i = 1 , 2 , . . . , m 2 \min(或\max)\quad z=f(x)\\ s.t \begin{cases} g_i(x)\le0 & i=1,2,...,m_1\\ h_i(x)=0 & i=1,2,...,m_2\\ \end{cases} min(max)z=f(x)s.t{gi(x)0hi(x)=0i=1,2,...,m1i=1,2,...,m2

  • x x x称为决策变量,(1)称为问题的目标函数,(2)称为问题的约束条件,是规划问题数学模型的三个要素

数学规划的分类

  1. 线性规划:目标函数及约束条件均为线性函数,故被称为线性规划问题,通用的算法有单纯形法
  2. 整数规划:变量取整数值的数学规划,包括线性整数规划和非线性整数规划,目前所流行的求解整数规划的算法往往只适用于线性整数规划
  3. 非线性规划:目标函数或约束条件是非线性表达的数学规划。目前没有通用算法,大多数算法都是在选定决策变量的初始值后,通过一定的搜索方法寻求最优的决策变量

线性规划问题解的概念

  • 一般线性规划的标准型为

min ⁡ z = ∑ j = 1 n c j x j s . t { ∑ j = 1 n a i j x j ≤ b i i = 1 , 2 , . . . , m x j ≥ 0 j = 1 , 2 , . . . , n \min\quad z=\sum_{j=1}^nc_jx_j\\ s.t \begin{cases} \sum_{j=1}^na_{ij}x_j\leq b_i&i=1,2,...,m\\ x_j\ge0&j=1,2,...,n \end{cases} minz=j=1ncjxjs.t{j=1naijxjbixj0i=1,2,...,mj=1,2,...,n
满足约束条件的解称为线性规划问题的可行解,而使目标函数达到最小值的可行解称为最优解,所有可行解构成的集合称为问题的可行域,记为R。

线性规划的Matlab标准形式及解法

min ⁡ x f T x s . t . { A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b \min_x\quad f^T\boldsymbol x \\ s.t. \begin{cases} A\boldsymbol x\leq b\\ Aeq\cdot\boldsymbol x=beq\\ lb\le\boldsymbol x\le ub \end{cases} minxfTxs.t.AxbAeqx=beqlbxub

  • 基本调用函数 [x,fval]=linprog(c,A,b,Aeq,Beq,lb,ub,X0,options)

例:
max ⁡ z = 2 x 1 + 3 x 2 − 5 x 3 s . t . { x 1 + x 2 + x 3 = 7 2 x 1 − 5 x 2 + x 3 ≥ 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 , x 2 , x 3 ≥ 0 \max \quad z=2x_1+3x_2-5x_3\\ s.t. \begin{cases} x_1+x_2+x_3=7 \\ 2x_1-5x_2+x_3\ge 10 \\ x_1+3x_2+x_3\le 12\\ x_1,x_2,x_3\ge 0 \end{cases} maxz=2x1+3x25x3s.t.x1+x2+x3=72x15x2+x310x1+3x2+x312x1,x2,x30

f=[-2 -3 5];
A=[-2 5 -1 ;1 3 1];
b=[-10;12];
Aeq=[1 1 1];
beq=7;
lb=zeros(3,1);
[x,fval]=linprog(f,A,b,Aeq,beq,lb);
disp(["最优解为:" num2str(x')]);
disp(["最优值为:" num2str(-fval)]);
from scipy.optimize import linprog
import numpy as np
f=np.array([2,3,-5])
A=np.array([[-2,5,-1],[1,3,1]])
b=np.array([-10,12])
Aeq=np.array([[1,1,1]])
beq=np.array([7])
res=linprog(f,A_ub=A,b_ub=b,A_eq=Aeq,b_eq=beq,bounds=[(0, None), (0, None), (0, None)])

可以转化为线性规划的问题

  • 很多看起来不是线性规划的问题可以通过变换变成线性规划的问题来解决
  1. 数学规划问题

min ⁡ ∣ x 1 ∣ + ∣ x 2 ∣ + . . . + ∣ x n ∣ s . t . A x ≤ b \min\quad|x_1|+|x_2|+...+|x_n|\\ s.t.\quad A\boldsymbol x\le b minx1+x2+...+xns.t.Axb
因为对任意的 x i x_i xi存在 u i , v i ≥ 0 u_i,v_i\ge0 ui,vi0满足
u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 u_i=\frac{x_i+|x_i|}{2},v_i=\frac{|x_i|-x_i}{2} ui=2xi+xi,vi=2xixi
所以问题可以转化为
min ⁡ x ∑ i = 1 n ( u i + v i ) s . t . { A ( u − v ) ≤ b u , v ≥ 0 \min_x\quad \sum_{i=1}^n(u_i+v_i) \\ s.t. \begin{cases} A\boldsymbol {(u-v)}\leq b\\ \boldsymbol {u,v}\ge0 \end{cases} minxi=1n(ui+vi)s.t.{A(uv)bu,v0

  1. min ⁡ x i { max ⁡ ∣ ε i ∣ } , 其 中 ε i = x i − y i \min_{x_i}\{\max|\varepsilon_i|\},其中\varepsilon_i=x_i-y_i minxi{maxεi}εi=xiyi

若取 v = max ⁡ ∣ ε i ∣ v=\max|\varepsilon_i| v=maxεi,则问题可转化为
min ⁡ v s . t . { x 1 − y 1 ≤ v , . . . , x n − y n ≤ v y 1 − x 1 ≤ v , . . . , y n − x n ≤ v \min\quad v\\s.t. \begin{cases} x_1-y_1\le v,...,x_n-y_n\le v\\ y_1-x_1\le v,...,y_n-x_n\le v \end{cases} minvs.t.{x1y1v,...,xnynvy1x1v,...,ynxnv

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_961876584

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值