数学建模备赛Day2

一、线性规划问题

1、线性规划模型及概念

1.1 建立线性规划模型的一般步骤

  • step1 分析问题,找出决策变量(是问题中要确定的未知量,用于表明规划问题中用数量表示的方案、措施等,可由决策者决定和控制)
  • step2 根据问题所给条件,找出决策变量必须满足的一组线性等式或者不等式约束,即约束条件。
  • step3 根据问题的目标,构造关于决策变量的一个线性函数,即为目标函数。

1.2 线性规划模型的形式

1.3 灵敏度分析

灵敏度分析是指对系统因周围条件变化显示出来的敏感程度的分析。 

在线性规划问题中,都设定a_{ij},b_{i},c_{j}是常数,但在许多实际问题中,这些系数往往是估计值或者预测值,当这些参数中的一个或者几个发生变化时,现行最优方案会有什么变化?以及当这些参数的变化限制在什么范围内,原最优解仍是最优的?优化后分析,可以进行灵敏度分析。(具体参见运筹学教科书)

在实际应用中,可以采用数值方法。给定参变量一个步长,使其重复求解线性规划问题,以观察最优解的变化情况。

对于数学规划模型,一定要做灵敏度分析。

2、线性规划模型求解及应用

对一般的线性规划模型,常用的求解方法有图解法、单纯形法等。

MATLAB求解数学规划问题(包括线性规划、整数规划和非线性规划)采用两种模式:

基于求解器的求解方法和基于问题的求解方法。

2.1 线性规划的MATLAB求解

(1)MATLAB基于求解器的求解方法

MATLAB基于求解器的求解方法规定的线性规划的标准形式为

\min_{x} f^{T}x,

s.t. \left\{\begin{matrix} A \cdot x \leq b \\ Aeq \cdot x =beq \\ lb \leq x \leq ub \\ \end{matrix}\right.

式子中:f,x,b,beq,lb,ub为列向量,其中f为价值向量,b为资源向量;A,Aeq分别为不等式约束和等式约束对应的矩阵。

MATLAB中的调用格式为

[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)

x返回决策向量的取值,fval返回目标函数的最优值。

示例

%基于求解器求解的matlab程序
clc,clear
f=[-2,-3,5];
a=[-2,5,-1;1,3,1];b=[-10;12];
aeq=[1,1,1];beq=7;
lb=zeros(3,1);ub=[+inf,+inf,+inf];
[x,fval]=linprog(f,a,b,aeq,beq,lb,ub);

(2)MATLAB基于问题的求解方法

首先需要用变量和表达式构造优化问题,再用solve函数求解。

%基于问题求解的matlab程序
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;
[sol,fval,flag,out]=solve(prob),sol.x

2.2 可以转换为线性规划的问题

(1)带有绝对值的非线性规划问题,尽量先手工进行线性化,再用软件求解。

原理详情见《数学建模算法与应用第三版》(司守奎,孙玺菁)

示例

%基于问题求解的matlab程序
%%这是带有绝对值的非线性规划问题
clc,clear
c=[1:4]'; %注意是列向量
a=[1,-1,-1,1;1,-1,1,-1;1,-1,-2,3];b=[-2,-1,-1/2]';
prob=optimproblem('ObjectiveSense','min'); %默认目标函数最小化,即prob=optimproblem;
u=optimvar('u',4,'LowerBound',0);
v=optimvar('v',4,'LowerBound',0);
prob.Objective=sum(c'*(u+v));
prob.Constraints.con=a*(u-v)<=b;
[sol,fval,flag,out]=solve(prob);
x=sol.u-sol.v;
    
    

(2)min_{x_{i}} \left \{ max_{y_{i}}\left |\varepsilon _{i} \right |\right \}, \left |\varepsilon _{i} \right |=x_{i}-y_{i},这类问题只需要取v=max_{y_{i}}\left | \varepsilon _{i} \right |

问题就变换为

\min v,

s.t.\left\{\begin{matrix} x_{1}-y_{1}\leq v,x_{2}-y_{2}\leq v,\cdots ,x_{n}-y_{n}\leq v \\ y_{1}-x_{1}\leq v,y_{2}-x_{2}\leq v,\cdots ,y_{n}-x_{n}\leq v \\ \end{matrix}\right.

即通常的线性规划问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值