栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数学建模常用算法汇总及python,MATLAB实现(一)—— 线性规划

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数学建模常用算法汇总及python,MATLAB实现(一)—— 线性规划

线性规划

文章目录
  • 线性规划
      • 数学原型
      • 1. matlab求解
          • 函数原型
      • 2. python求解
      • 3. 例题
        • matlab求解

数学原型

m i n x c ⃗ T x ⃗ s . t . { A x ⃗ ≤ b ⃗ A e q ⋅ x ⃗ = b e q ⃗ l b ⃗ ≤ x ⃗ ≤ u b ⃗ min_xquad vec c^Tvec x\ s.t.left{ begin{aligned} Avec x leq vec{b} \ Aeqcdot vec x = vec {beq} \ vec {lb} leq vec x leq vec{ub} end{aligned} right . minx​c Tx s.t.⎩⎪⎪⎨⎪⎪⎧​Ax ≤b Aeq⋅x =beq ​lb ≤x ≤ub ​

这里向量都是列向量, 大写都是矩阵

c称为价值向量, b称为资源向量




1. matlab求解

matlab中线性规划求解一般都是最小值

如果要求最大值就要在优化目标上加个负号

注意求解之前要化成标准型

函数原型
这里的函数参数命名参考上面的数学原型(具体是列向量还是行向量也对照上面看)
[x, fval] = linprog(c, A, b, Aeq, beq, lb, ub)

  • c, b, lb, ub都是列向量





2. python求解

可以使用的库, plup和scipy

scipy代码线性规划的代码相较于plup稍微简洁一些

这里只浅介绍一下scipy

from scipy.optimize import linprog
import numpy as np


res = linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIOS)
# 目标最小值
print(res.fun)
# 最优解
print(rea.x)




3. 例题

a r g m a x z = 4 x 1 + 3 x 2 s . t . { 2 x 1 + x 2 ≤ 10 x 1 + x 2 ≤ 8 x 2 ≤ 7 x 1 , x 2 ≥ 0 argmax quad z = 4x_1+3x_2\ s.t. left{ begin{aligned} 2x_1 + x_2 le 10\ x_1+x_2le8\ x_2le7\ x_1, x_2ge0\ end{aligned} right . argmaxz=4x1​+3x2​s.t.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​2x1​+x2​≤10x1​+x2​≤8x2​≤7x1​,x2​≥0​

matlab求解
%% 记得求解之前要把题目化成标准型(看最上面给出的数学原形里的那个标准型), 本题已经是标准型
% 变量名字都可以随便取, 只要自己认得出来
% 价值向量, 因为要求最大值所以加个负号
c = [-4; -3];


A = [2, 1;
     1, 1;
     0, 1];

% 资源向量
b = [10; 8; 7]


% 返回值x_res, best_val也是随便取的名字
% linprog()括号里的参数 有空的中括号[] 是因为题目中没有等式条件
% 但是函数里面输入参数要按照顺序来, 所以就弄个[]占个位置
[x_res, best_val] = linprog(c, A, b, [], [], zeros(2, 1));

x_res

-best_val

附上答案

x_res =

2.0000
6.0000

ans(也就是 -best_val) =

26
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号