230 likes | 482 Views
线性规划. 一、问题 求线性规划与非线性规划问题。. 二、实验目的 1 、学会由实际问题建立(非)线性规划模型; 2 、掌握用 Matlab 软件求解线性规划问题。. 三、预备知识 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支 ------ 数学规划。. 线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。线性规划( Linear Programming ,简记为 LP )是数学规划的一个重要分支。. s.t. (约束条件). ( 2 ).
E N D
一、问题 求线性规划与非线性规划问题。 • 二、实验目的 1、学会由实际问题建立(非)线性规划模型; 2、掌握用Matlab软件求解线性规划问题。
三、预备知识 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支------数学规划。 线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。线性规划(Linear Programming,简记为LP)是数学规划的一个重要分支。
s.t.(约束条件) (2) • 例1:(生产计划问题)某机床厂生产甲、乙两种机床,每种机床的利润分别为4000元和3000元。生产甲机床需用A、B机器加工,加工时间分别为每台2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各1小时。若每天可用于加工的机器小时数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各几台,才能使总利润最大? 解:上述问题可抽象成数学模型:设该厂生产x1台甲机床和x2台乙机床时总利润最大,则x1,x2应满足: (目标函数)max z=4000x1+3000x2 (1)
s.t. • 这里变量x1,x2称为决策变量,式(1)称为问题的目标函数,式(2)中的几个不等式是问题的约束条件,记为s.t.(即 subject to)。上述即为一规划问题数学模型的三个要素。由于上面的目标函数及约束条件均为线性函数,故称为线性规划问题。 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。为了避免这种形式多样性带来的不便,Matlab中规定线性规划的标准形式为: 其中c 和x为n维列向量,b为m维列向量,A为 m*n 矩阵。
s.t. • 例如线性规划: s.t. 的Matlab标准型为:
线性规划模型的解法 • 一般线性规划问题的标准型为: min s.t.
Matlab 7.0解决的线性规划问题的标准形式为: min s.t. 为向量, 为矩阵。 其中 其他形式的线性规划问题都可经过适当变化为此标准形式。
在Matlab 7.0中,解线性规划问题的函数为linprog,其使用格式如下: 函数 linprog 格式 x=linprog(c,A,b) %求min c’*x s.t Ax<=b最优解; x=linprog(c,A,b,Aeq,beq) %若没有不等式约束,则A=[],b=[]; x=linprog(c,A,b,Aeq,beq,lb,ub) %若没有等式约束,则Aeq=[],beq=[]; x=linprog(c,A,b,Aeq,beq,lb,ub,x0) %设置初始值x0; [x,fval]=linprog() %返回目标函数最优值。
非线性规划 • 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划比解线性规划问题困难得多。非线性规划目前还没有适用于各种问题的一般算法,各个方法都有自己特定的适用范围。
其中, 称为模型的决策变量, 称为目标函数, 和 称为不等式 称为约束条件, 称为等式约束, • 非线性规划问题(简记为NP),可概括为一般形式: min s.t. 约束。
由于线性规划的目标函数为线性函数,可行域为凸集,因而求出的最优解就是整个可行域上的全局最优解。非线性规划则不然,有时求出的某个解虽是一部分可行域上的极值点,但不一定是整个可行域上的全局最优解。由于线性规划的目标函数为线性函数,可行域为凸集,因而求出的最优解就是整个可行域上的全局最优解。非线性规划则不然,有时求出的某个解虽是一部分可行域上的极值点,但不一定是整个可行域上的全局最优解。 对于非线性规划模型,可以采用迭代方法求它的最优解。
非线性规划的Matlab解法 • Matlab中非线性规划的数学模型可以写成如下形式: min s.t. 其中, 是标量函数, 是相应维数的矩阵和向量, 是非线性向量函数。
函数 fmincon • 格式 x=fmincon(fun,x0,A,B,Aeq,Beq,LB,UB,nonlcon,options) 其中fun是用M文件定义的函数f(x);x0是x的初始值;A,B,Aeq,Beq定义了线性约束A*X<=B,Aeq*X=Beq。如果没有等式约束,则A=[],B=[],Aeq=[],Beq=[];LB和UB是变量x的上界和下界。如果上界和下界没有约束,则LB=[],UB=[],如果x无下界,则LB=-inf,如果x无上界,则UB=inf;nonlcon是用M文件定义的非线性向量函数C(x),Ceq(x);options定义了优化参数,可以使用Matlab默认的参数设置。
例:求解下列非线性规划问题: 解:(1)编写M文件fun1.m function f=fun1(x) f=x(1)^2+x(2)^2+8;
M文件fun2.m function [g,h]=fun2(x) g=-x(1)^2+x(2); h=-x(1)-x(2)^2+2 (2) 在Matlab命令窗口输入: options=optimset; [x,y]=fmincon(‘fun1’,rand(2,1),[],[],[],[],zeros(2,1),[],… ’fun2’,options) 就可以求得当 x1=x2=1,y=10.
s.t. 其中, 为矩阵, 为向量。 二次规划的Matlab解法 • 若某非线性规划的目标函数为自变量x的二次函数,约束条件又全是线性的,就称这种规划为二次规划。二次规划也是非线性规划的一个重要特殊情形。 二次规划问题(quadratic programming )的标准形式为:
解二次规划的Matlab命令为: 函数: quadprog 格式: x=quadprog(H,c,A,b) x=quadprog(H,c,A,b,Aeq,beq) x=quadprog(H,c,A,b,Aeq,beq,lb,ub) x=quadprog(H,c,A,b,Aeq,beq,lb,ub,x0) x=quadprog(H,c,A,b,Aeq,beq,lb,ub,x0,options) %上述字符A,b,Aeq,beq,lb,ub,x0,options与线性规划的意义相同。
min • 例:求解下列二次规划问题: 解:写成标准形式:
在Matlab窗口输入: H=[4,-1;-1,2]; c=[-4;-3]; A=[1,1;-1,3]; b=[4;3]; aeq=[]; beq=[]; vlb=[0;0]; vub=[]; [x,z]=quadprog(H,c,A,b,aeq,beq,vlb,vub) 运行结果: x=1.5000 1.5000 z=-6
练习1 (运输问题):设有三个工厂A,B,C同时需要某种原料,需要量分别是17万吨,18万吨和15万吨。现有两厂X,Y分别有该原料23万吨,27万吨。每万吨运费如下表所示(单位:元) 问应如何调运才能使总运费最少?