线性规划模型

  • 模型描述
  • Matlab代码
    • 基于求解器
    • 基于问题
  • Python代码
    • Scipy库
    • Plup库

模型描述

m i n z = f T x ( 1 ) s . t . { A x ≤ b ( 2 ) A e q ⋅ x = b e q ( 3 ) l b ≤ x ≤ u b ( 4 ) f 、 x 、 b 、 b e q 、 l b 、 u b 均为列向量 f 称为价值向量 , b 称为资源向量 l b 为决策变量的下界 , u b 为决策变量的上界 A 、 A e q 为矩阵 {min}\ z=f^Tx \ \ \ \ \ \ (1)\\ \ \\ s.t. \ \ \ \ \ \ \ \ \ \ \begin{cases} Ax\le b &(2) \\ Aeq\cdot x=beq &(3)\\ lb\le x \le ub &(4)\\ \end{cases}\\ \ \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ f、x、b、beq、lb、ub均为列向量\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ f\ 称为价值向量,b\ 称为资源向量\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lb\ 为决策变量的下界,ub\ 为决策变量的上界\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ A、Aeq为矩阵 min z=fTx      (1) s.t.          ⎩ ⎨ ⎧​Ax≤bAeq⋅x=beqlb≤x≤ub​(2)(3)(4)​                     f、x、b、beq、lb、ub均为列向量                    f 称为价值向量,b 称为资源向量                    lb 为决策变量的下界,ub 为决策变量的上界                  A、Aeq为矩阵

  • (1)为目标函数, m i n z min\ z min z 称为最优值

  • x x x的分量称为决策变量

  • (2),(3),(4)为约束条件,用 s . t . s.t. s.t.(subject to) 表示

  • (2)为不等式约束条件;(3)为等式约束条件;(4)为上下界约束条件

  • 满足约束条件的解 x = ( x 1 , x 2 , ⋅ ⋅ ⋅ , x n ) x=(x_1,x_2,···,x_n) x=(x1​,x2​,⋅⋅⋅,xn​) 称为线性规划的可行解

  • 可行解中使得目标函数达到最值的解称为最优解

Matlab代码

基于求解器

将模型化为标准形式,直接使用函数

[x,fval] = linprog(f,A,b)
[x,fval] = linprog(f,A,b,Aeq,beq)
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)
  • x为最优解
  • fval为目标函数的最优值

如:

m a x 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}\ z=2x_1+3x_2-5x_3\\ s.t. \ \ \ \ \ \ \ \ \ \ \begin{cases} x_1+x_2+x_3=7\\ 2x_1-5x_2+x_3\ge10\\ x_1+3x_2+x_3\le 12\\ x_1,x_2,x_3\ge 0 \\ \end{cases}\\ max z=2x1​+3x2​−5x3​s.t.          ⎩ ⎨ ⎧​x1​+x2​+x3​=72x1​−5x2​+x3​≥10x1​+3x2​+x3​≤12x1​,x2​,x3​≥0​

化为标准形式:

m i n − z = − 2 x 1 − 3 x 2 + 5 x 3 s . t . { − 2 x 1 + 5 x 2 − x 3 ≤ − 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 + x 2 + x 3 = 7 0 ≤ x 1 , x 2 , x 3 {min}\ -z=-2x_1-3x_2+5x_3\\ s.t. \ \ \ \ \ \ \ \ \ \ \begin{cases} -2x_1+5x_2-x_3\le-10\\ x_1+3x_2+x_3\le 12\\ x_1+x_2+x_3=7\\ 0\le x_1,x_2,x_3\\ \end{cases}\\ min −z=−2x1​−3x2​+5x3​s.t.          ⎩ ⎨ ⎧​−2x1​+5x2​−x3​≤−10x1​+3x2​+x3​≤12x1​+x2​+x3​=70≤x1​,x2​,x3​​


f = [ − 2 − 3 5 ] , x = [ x 1 x 2 x 3 ] f=\begin{bmatrix} -2\\ -3\\ 5\\ \end{bmatrix} ,x=\begin{bmatrix} x_1\\ x_2\\ x_3\\ \end{bmatrix} f=⎣ ⎡​−2−35​⎦ ⎤​,x=⎣ ⎡​x1​x2​x3​​⎦ ⎤​

A = [ − 2 5 − 1 1 3 1 ] , b = [ − 10 12 ] A=\begin{bmatrix} -2&5&-1\\ 1&3&1\\ \end{bmatrix}, b=\begin{bmatrix}-10\\12\end{bmatrix}\\\\ A=[−21​53​−11​],b=[−1012​]

A e q = [ 1 1 1 ] , b e q = [ 7 ] Aeq=\begin{bmatrix}1&1&1\end{bmatrix},beq=[7] Aeq=[1​1​1​],beq=[7]
l b = [ 0 0 0 ] lb=\begin{bmatrix}0\\0\\0\end{bmatrix}\\\\ lb=⎣ ⎡​000​⎦ ⎤​
故编写代码如下:

clc,clear% 目标函数
f = [-2; -3; 5] ;% 不等式约束
A=[-2 5 -1; 1 3 1];
b=[-10; 12];% 等式约束
Aeq=[1, 1, 1];
beq= 7;% 上下界约束
lb=[0; 0; 0];% 求解
[x,zmin]=linprog(f,A,b,Aeq,beq,lb);
zmax=-zmin;% 展示结果
display(x);
display(zmax);
Optimal solution found.x =6.42860.57140zmax =14.5714

基于问题

先建立线性规划的问题模型,决策变量,再添加限制条件,最后进行求解

clc,clear% 建立问题
prob = optimproblem('ObjectiveSense','max');% 创建决策变量
x=optimvar('x',3,'LowerBound',0);% 目标函数
prob.Objective = 2*x(1)+3*x(2)-5*x(3);% 约束条件
prob.Constraints.con1 = x(1)+x(2)+x(3)==7;
prob.Constraints.con2 = 2*x(1)-5*x(2)+x(3)>=10;
prob.Constraints.con3 = x(1)+3*x(2)+x(3)<=12;% 求解
[result,zmin]=solve(prob);
zmax=-zmin;% 展示结果
display(result.x);
display(zmax);
Solving problem using linprog.Optimal solution found.6.42860.57140zmax =14.5714

Python代码

Scipy库

# 导库
from scipy import optimize
import numpy as np# 目标函数
c = 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])# 上下界约束
lb = [0, 0, 0]
ub = [None, None, None]
bounds = np.array(list(zip(lb, ub)))   # 各个决策变量的(左界,右界)元组组成的数组# 求解
result = optimize.linprog(c, A, b, Aeq, beq, bounds)
x=result.x
zmax=-result.fun
print(result)
print(f"最优解:{x}\n最优值:{zmax}")
 con: array([1.80712245e-09])fun: -14.571428565645084message: 'Optimization terminated successfully.'nit: 5slack: array([-2.24599006e-10,  3.85714286e+00])status: 0success: Truex: array([6.42857143e+00, 5.71428571e-01, 2.35900788e-10])
最优解:[6.42857143e+00 5.71428571e-01 2.35900788e-10]
最优值:14.571428565645084
  • fun为目标函数的最优值
  • x为最优解

Plup库

# 导库
import pulp
import numpy as np# 初始化线性规划问题模型
pro = pulp.LpProblem()# 创建决策变量
lb = [0, 0, 0]
ub = [None, None, None]
bounds = np.array(list(zip(lb, ub)))
x = np.array([pulp.LpVariable(f'x{i}',lowBound=bounds[i - 1][0],upBound=bounds[i - 1][1]) for i in [1, 2, 3]
])#建立目标函数
c = np.array([-2, -3, 5])
pro += pulp.lpDot(c, x)# 不等式约束
A = np.array([[-2, 5, -1], [1, 3, 1]])
b = np.array([-10, 12])
for i in range(len(A)):pro += (pulp.lpDot(A[i], x) <= b[i])  # 添加限制条件# 等式约束
Aeq = np.array([[1, 1, 1]])
beq = np.array([7])
for i in range(len(Aeq)):pro += (pulp.lpDot(Aeq[i], x) == beq[i])#求解
pro.solve()#输出结果
print(pro)
print(f'最优值:{-pulp.value(pro.objective)}')
print(f'最优解:{[pulp.value(var) for var in x]}')
  • pro.objective为最优解
  • x代表决策变量数组([x1,x2,x3]),使用pulp.value查看x中各决策变量的值
NoName:
MINIMIZE
-2*x1 + -3*x2 + 5*x3 + 0
SUBJECT TO
_C1: - 2 x1 + 5 x2 - x3 <= -10_C2: x1 + 3 x2 + x3 <= 12_C3: x1 + x2 + x3 = 7VARIABLES
x1 Continuous
x2 Continuous
x3 Continuous最优值:14.57142851
最优解:[6.4285714, 0.57142857, 0.0]

个人数学建模算法库之线性规划模型相关推荐

  1. 数学建模算法与应用 线性规划(cvxpy包)

    数学建模算法与应用 线性规划(使用cvxpy包) 说明 使用python中cvxpy库完成<数学建模算法与应用>中课后习题 因为本人也是初学者,若代码有错误还请各位指出 cvxpy库的使用 ...

  2. 司守奎《数学建模算法与应用》课后习题:线性规划

    系列目录 司守奎<数学建模算法与应用>课后习题:线性规划 模拟退火算法解决旅行商问题详解 遗传算法解决旅行商问题 MATLAB实现 基于模拟退火优化的投影寻踪评价法求解供货能力评价模型 目 ...

  3. 数学建模算法与应用学习day1——线性规划问题整数规划问题

    以下内容来自司守奎编写的数学建模算法与应用学习,主要是记录自己的学习历程,转载还请标明出处! 一.线性规划 知识点 1.1线性规划问题 1.1.2线性规划解的概念 f = [-2 ; -3 ; 5]; ...

  4. 数学建模算法学习笔记 已完结

    这是为了准备国赛突击学习的模型算法,我在原有的基础上加上自己的理解虽然不知道对不对,就是为了记录下自己学的模型他究竟是个什么东西,语言通俗,但是极不准确,只适合做一个大概的了解,建议大家详细的还是要看 ...

  5. 数学建模算法:支持向量机_从零开始的算法:支持向量机

    数学建模算法:支持向量机 从零开始的算法 (Algorithms From Scratch) A popular algorithm that is capable of performing lin ...

  6. python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)

    文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...

  7. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  8. python dendrogram_【聚类分析】《数学建模算法与应用》第十章 多元分析 第一节 聚类分析 python实现...

    第十章 多元分析 第一节 聚类分析 介绍 这里是司守奎教授的<数学建模算法与应用>全书案例代码python实现,欢迎加入此项目将其案例代码用python实现 GitHub项目地址:Math ...

  9. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

最新文章

  1. python __builtins__ set类 (60)
  2. Ajax简要应用说明及技术开发实例
  3. 阿里技术专家对 SRE 的解读
  4. JS实现图片预览与等比缩放
  5. 搅局者奇虎360:特供机背后的周式隐忧
  6. python爬虫的用途_python爬虫用代理ip有什么用途?
  7. Log4net 配置详解
  8. 2022最新iApp源码(破解ZIP密码)+已编译的成品
  9. 智能汽车“增量部件”争夺战(一):以华为海思为样榜,比亚迪蔚来们的漫漫造芯路
  10. 满足国六标准通用型故障诊断仪:Q-OBD
  11. 费马小定理(详细证明)
  12. 微信内如何通过链接一键关注微信公众号
  13. html怎么引轮播图插件,原生js写一个无缝轮播图插件(支持vue)
  14. 徕卡 sl android app,随时随地无缝互联 徕卡发布最新版FOTOS App
  15. 分布式系统:概念与设计读书笔记
  16. 软件系统分析与设计指南--HOMEWORK1
  17. 【Linux】基础特性与常见系统管理命令详解1
  18. 装机员 Ghost Win7 Sp1 64位装机9月版
  19. 001-Photoshop基础操作
  20. √【大学物理】电磁学 12-16章笔记

热门文章

  1. 2021年高交会圆满闭幕:推动高质量发展,构建新发展格局
  2. 从构建进程间缓存设计谈Webpack5 优化和工作原理
  3. 使用Maple的Python API :OpenMaple(Windows下的解决方案)
  4. 微信小程序直播项目(包含发礼物,实时通信IM,互动和动画显示,全屏模式等等)完整(免费)
  5. GO语言的进阶之路-协程和Channel
  6. 当达摩院大牛学会抠图,这一切都不受控制了……
  7. 降噪耳机哪款好?性价比高的降噪耳机
  8. Linux 退出Vi编辑器
  9. 沐风老师3dsMax高脚杯(酒杯)建模教程
  10. mysql windows安装版下载地址_Windows下mysql的下载和安装