一、线性规划问题
1、线性规划模型及概念
1.1 建立线性规划模型的一般步骤
- step1 分析问题,找出决策变量(是问题中要确定的未知量,用于表明规划问题中用数量表示的方案、措施等,可由决策者决定和控制)
- step2 根据问题所给条件,找出决策变量必须满足的一组线性等式或者不等式约束,即约束条件。
- step3 根据问题的目标,构造关于决策变量的一个线性函数,即为目标函数。
1.2 线性规划模型的形式
1.3 灵敏度分析
灵敏度分析是指对系统因周围条件变化显示出来的敏感程度的分析。
在线性规划问题中,都设定是常数,但在许多实际问题中,这些系数往往是估计值或者预测值,当这些参数中的一个或者几个发生变化时,现行最优方案会有什么变化?以及当这些参数的变化限制在什么范围内,原最优解仍是最优的?优化后分析,可以进行灵敏度分析。(具体参见运筹学教科书)
在实际应用中,可以采用数值方法。给定参变量一个步长,使其重复求解线性规划问题,以观察最优解的变化情况。
对于数学规划模型,一定要做灵敏度分析。
2、线性规划模型求解及应用
对一般的线性规划模型,常用的求解方法有图解法、单纯形法等。
MATLAB求解数学规划问题(包括线性规划、整数规划和非线性规划)采用两种模式:
基于求解器的求解方法和基于问题的求解方法。
2.1 线性规划的MATLAB求解
(1)MATLAB基于求解器的求解方法
MATLAB基于求解器的求解方法规定的线性规划的标准形式为
式子中:为列向量,其中
为价值向量,
为资源向量;
分别为不等式约束和等式约束对应的矩阵。
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),这类问题只需要取
问题就变换为
即通常的线性规划问题。
1678

被折叠的 条评论
为什么被折叠?



