《零基础数学建模》——线性规划

​ 前言

本文大部分是对于数学建模清风老师的课程学习总结归纳而来,我的理解可能有错误,大家发现错误可以在评论区批评指正,课程地址:《数学建模清风》


一、模型定义

1. 规划模型概述

1.1. 什么是规划问题?
  数学规划是运筹学的一个分支,其用来研究:在给定的条件下(约束条件),如何按照某一衡量指标(目标函数)来寻求计划、管理工作中的最优方案。即求目标函数在一定约束条件下的极值问题。
1.2. 数学规划的一般形式
m i n ( m a x ) z = f ( x ) , s . t . g i ( x ) ≤ 0 , ( i = 1 , 2 ⋯   , m ) min(max)z=f(x),s.t.g_i(x)\leq 0,(i=1,2\cdots,m) min(max)z=f(x),s.t.gi(x)0,(i=1,2,m)
  其中 x x x代表决策变量(一般有多个自变量), f ( x ) f(x) f(x)代表目标函数 s . t . s.t. s.t.(即subject to)代表约束条件,上面的 g i ( x ) ≤ 0 , ( i = 1 , 2 ⋯   , m ) g_i(x)\leq 0,(i=1,2\cdots,m) gi(x)0,(i=1,2,m)是不等式约束,一个规划模型中还可能存在等式约束和整数约束。

1.3. 数学规划的分类

  • 线性规划(Linear Programming)
      如果 ⽬标函数 和和约束条件 均是决策变量的 线性表达式 , 那么 此时的 数学规划问题就属于线性规划 。1947年,美国数学家丹⻬格 (G.B.Dantzing)提出了求解线性规划的单纯形法 ,奠定了这⻔学科的基础 。
  • 非线性规划(Nonlinear Programming)
      当⽬标函数和或者约束条件中有⼀个是决策变量 x x x 的非线性表达式 , 那么此时的数学规划问题就属于非线性规划 。
      解决非线性规划要比线性规划困难得多 , ⽬前没有通⽤算法,⼤多数算法都是在选定决策变量的初始值后 ,通过一定的搜索⽅法寻求最优的决策变量 。
  • 整数规划(Integer Programming)
      整数规划是⼀类要求变量取整数值的 数学规划(在线性规划模型中,有决策变量限定为整数)。
      ⽬前, 所流⾏的求解整数规划的算法往往只适⽤于线性整数规划, 所以之后在整数规划的学习文章中均针对线性整数规划。
  • 0-1规划(0-1 Programming)
      整数规划的特例 ,整数变量的取值只能为0和1。

二、线性规划问题的求解

1. M a t l a b Matlab Matlab中线性规划的标准型

   m i n ( c T x ) min(c^Tx) min(cTx),其中 c = ( c 1 , c 2 , ⋯   , c n ) ′ , x = ( x 1 , x 2 , ⋯   , x n ) ′ c=(c_1,c_2,\cdots,c_n)',x=(x_1,x_2,\cdots,x_n)' c=(c1,c2,,cn),x=(x1,x2,,xn),n是决策变量的个数。
s . t . { A x ≤ b ( 不等式约束 ) A e q ⋅ x = b e q (等式约束) l b ≤ x ≤ u b (上下界约束,也可以当成不等式约束) s.t.\left\{ \begin{array}{c} Ax\leq b(不等式约束)\\ Aeq·x=beq(等式约束)\\ lb\leq x\leq ub(上下界约束,也可以当成不等式约束) \end{array} \right. s.t. Axb(不等式约束)Aeqx=beq(等式约束)lbxub(上下界约束,也可以当成不等式约束)
PS:可能只对部分决策变量有约束。

2. 转换标准型举例

3. M a t l a b Matlab Matlab求解线性规划的函数

[ x , f v a l ] = l i n p r o g ( c , A , b , A e q , b e q , l b , u b , x 0 ) [x,fval]=linprog(c,A,b,Aeq,beq,lb,ub,x_0) [x,fval]=linprog(c,A,b,Aeq,beq,lb,ub,x0)

  1. x 0 x_0 x0表示给定 M a t l a b Matlab Matlab迭代求解的初始值 (⼀般不⽤给)。
  2. c , A , b , A e q , b e q , l b , u b c,A,b,Aeq,beq,lb,ub c,A,b,Aeq,beq,lb,ub的意义和标准型中的意义⼀致。
  3. 若不存在不等式约束 , 可⽤" [] "替代 A A A b b b
  4. 若不存在等式约束, 可⽤" [] "替代 A e q Aeq Aeq b e q beq beq
  5. 若某个 x i x_i xi无下界或上界,则设置 l b ( i ) = − i n f , u b ( i ) = + i n f lb(i)=-inf,ub(i)=+inf lb(i)=inf,ub(i)=+inf
  6. 返回的 x x x表示最小值处的 x x x取值, f v a l fval fval表示表示最优解处取得的最小值。
  7. 不是所有的线性规划问题都有唯一解,可能无解或有无穷多的解。
  8. 如果求的是最大值,别忘记在最后给fval加一个负号。

2中例题的matlab求解代码
在这里插入图片描述

三、线性规划的典型例题

%% 生产决策问题
format long g   %可以将Matlab的计算结果显示为一般的长数字格式(默认会保留四位小数,或使用科学计数法)
% (1) 系数向量
c = zeros(9,1); % 初始化目标函数的系数向量全为0
c(1) = 1.25 -0.25 -300/6000*5;  % x1前面的系数是c1
c(2) = 1.25 -0.25 -321/10000*7;
c(3) = -250 / 4000 * 6;
c(4)  = -783/7000*4;
c(5) = -200/4000 * 7;
c(6) = -300/6000*10;
c(7) = -321 / 10000 * 9;
c(8) = 2-0.35-250/4000*8;
c(9) = 2.8-0.5-321/10000*12-783/7000*11;
c = -c;  % 我们求的是最大值,所以这里需要改变符号
% (2) 不等式约束
A = zeros(5,9);
A(1,1) = 5;  A(1,6) = 10;
A(2,2) = 7;  A(2,7) = 9; A(2,9) = 12;
A(3,3) = 6;  A(3,8) = 8;
A(4,4) = 4;  A(4,9) = 11;
A(5,5) = 7;  
b = [6000 10000 4000 7000 4000]';
% (3) 等式约束
Aeq = [1 1 -1 -1 -1 0 0 0 0;
            0 0 0 0 0 1 1 -1 0];
beq = [0 0]';
%(4)上下界
lb = zeros(9,1);

% 进行求解
[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval
% fval =
%           1146.56650246305

PS:这题本质上应该是一个整数规划,我们的件数不应该出现小数,我们在后面的文章再来求解。

四、模型总结

  ⽬标函数 和 约束条件 均是决策变量的 线性表达式 , 那么 此时的 数学规划问题就属于线性规划 。
  线性规划问题的求解过程如下:

  1. 对题目进行分析,抽离出 目标函数 以及 约束条件
  2. 然后将目标函数与约束条件化成matlab标准型。
  3. matlab线性规划函数默认取最小值,所以当出现max时,需要将目标函数化成min,然后对最终得fval求负
  4. 对于不等式约束条件同理化成小于等于形式,当极值点时,可以适当进行放缩。
  5. x 0 x_0 x0,即预设值在线性规划中可有可无,一般选择忽视掉,若题中给出明确的预设值则进行设置(加在matlab求解函数的最后一位)。
  6. 若没有不等式、等式或上下界约束条件,则在求解函数中用“[]"占位。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值