数学建模常用算法汇总及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_x\quad \vec c^T\vec x\\ s.t.\left\{ \begin{aligned} A\vec x \leq \vec{b} \\ Aeq\cdot \vec x = \vec {beq} \\ \vec {lb} \leq \vec x \leq \vec{ub} \end{aligned} \right . minxc Tx s.t.Ax b Aeqx =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求解

可以使用的库, plupscipy

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_2\le8\\ x_2\le7\\ x_1, x_2\ge0\\ \end{aligned} \right . argmaxz=4x1+3x2s.t.2x1+x210x1+x28x27x1,x20

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

你可能感兴趣的:(零基础数学建模,算法,python,matlab)