340 likes | 525 Views
一、线性规划的概 念. 二、线性规划的图解法. 三、用 MATLAB 优化工具箱解线性规划. 四、整数规划. 实验七 最优化方法. 实验 7.1 线性规划. 设计化生产甲产品 件 ,乙产品 件,满足条件. 且使 达到最大. 一、线性规划的概 念. 例 1 资源的最佳利用问题:某工厂有 A 、 B 、 C 、 D 四种机床,可生产甲、乙两种产品.一件产品需经各台机床加工的时间和利润情况如表所示,问如何安排生产才能使得到的利润最高?.
E N D
一、线性规划的概 念 二、线性规划的图解法 三、用MATLAB优化工具箱解线性规划 四、整数规划 实验七 最优化方法 实验7.1 线性规划
设计化生产甲产品 件 ,乙产品 件,满足条件 且使 达到最大 一、线性规划的概 念 例1资源的最佳利用问题:某工厂有A、B、C、D四种机床,可生产甲、乙两种产品.一件产品需经各台机床加工的时间和利润情况如表所示,问如何安排生产才能使得到的利润最高?
设由砖厂Ai运往工地Bj的运量为 (单位:万块),问题的数学模型为:求 的值,要求满足条件: 且使 具有最小值。 例2运输问题:设有两个砖厂A1、A2,生产砖产量分别为23万块与27万块,将砖供应B1、B2、B3三个工地,其需要量分别为17万块、18万块和15万块,自产地到工地的运价如表所示
以上两个例子,虽然有着不同的实际内容,但它们都具有三个共同的特征:以上两个例子,虽然有着不同的实际内容,但它们都具有三个共同的特征: ① 需要确定一组变量的值,这些变量通常称为决策变量,简称变量,它们通常是非负的. ② 对于决策变量,存在着可用一组线性等式或不等式来表达的限制条件,这些条件称为约束条件. ③ 有一个可以表示为决策变量的线性函数的目标要求,这一函数称为目标函数.按问题的不同要求,可要求目标函数达到最大值或最小值. 在线性约束条件下,要求一组决策变量的值,使线性目标函数达到最大值或最小值的问题,就叫做线性规划问题,常用符号LP(Linear Programming )表示。
线性规划的一般数学模型为:求决策变量 的一组值,满足约束条件 或 使目标函数 达到所要求的最小值maxz或最小值minz. 也称非负条件,有时对某些变量没有非负要求,cj 称为价值系数,满足约束条件的决策变量的一组值,称为线性规划的可行解,使目标函数达到所要求的最大值或最小值的可行解,成为线性规划的最优解,也就是线性规划的解,其线性规划的解的过程叫做解线性规划。
标准形式 矩阵形式
例1 约束条件 目标函数 二、线性规划的图解法 解:如图可行域:OABCD 当红线移动到B(4,2)时,z 达到最大值14 注:线性规划有唯一解、无穷解或无解这三种情况.对于决策变量两个以上的线性规划就不能用图解法,最常用、最有效的算法之一是单纯形方法。
模型1 命令 x=linprog(c,A,b) 模型2 命令 x=linprog(c,A,b,Aeq,beq) 三、用MATLAB优化工具箱解线性规划 注:若没有不等式Ax≤b存在,则令A=[ ],b=[ ]
模型3 命令 x=linprog(c,A,b,Aeq,beq,VLB,VUB) x=linprog(c,A,b,Aeq,beq,VLB,VUB,X0) [x,fval=linprog(…)返回最优解x及x处的目标函数值fval 注:1.若没有等式约束Aeqx=beq,则令Aeq=[ ], beq=[ ] 2.其中X0表示初始点
例1 且使 达到最大 A=[1 1;1 2;1 0;0 1]; b=[6,8,4,3]; c=-[2,3]; A1=[]; b1=[]; v1=[0,0]; x=linprog(c,A,b,A1,b1,v1) ↙ Optimization terminated. x = 4.0000 2.0000 [x,fval]=linprog(c,A,b,A1,b1,v1) ↙ Optimization terminated. x = 4.0000 2.0000 fval = -14.0000
且使 具有最小值。 例2 x = 0 8.0000 15.0000 17.0000 10.0000 0 z = 3.6500e+003 a=[1,1,1,0,0,0;0,0,0,1,1,1;1,0,0,1,0,0;0,1,0,0,1,0;0,0,1,0,0,1]; b=[23,27,17,18,15]; c=[50,60,70,60,110,160]; v1=zeros(1,6); [x,feval]=linprog(c,[],[],a,b,v1) ↙
例3解线性规划 目标函数 a=[-2,1;1,-1]; b=[4,2]; c=-[1,1]; v1=[0,0]; x=linprog(c,a,b,[ ],[ ],v1) ↙ Exiting: One or more of the residuals, duality gap, or total relative error has stalled: the dual appears to be infeasible (and the primal unbounded). (The primal residual < TolFun=1.00e-008.) x = 1.0e+009 * 1.4007 2.8007 表明此线性规划无最优解
四、整数规划 当线性规划中要求决策变量为整数解时,称为整数规划,MATLAB中没有解整数规划的命令,但可以先解线性规划,再在它的最优解附近试探。 例4某服务部门一周中每天需要不同数目的雇员:周一到周四每天至少50人,周五和周日每天至少80人,周六至少90人.现规定应聘者需连续工作5天,试确定聘用方案,即周一到周日每天聘用多少人,使在满足需要的条件下聘用总人数最少.如果周日的需求量由80增至90人,方案怎样改变. 解:先考虑只聘用全时雇员的方案,设周一到周日每天聘用的人数为x1,x2,…,x7,由于每人连续工作5天,所以周一工作的雇员应是周四到周一聘用的,按照需要至少50人,于是
Optimization terminated. x = 0.0000 10.0000 30.0000 10.0000 30.0000 10.0000 0.0000 fval = 90.0000 c=ones(1,7); a=ones(7); a1=triu(a,1);a3=triu(a,3);a5=tril(a,-5); A=-(a-a1+a3-a5); b=-[50 50 50 50 80 90 80]; v1=zeros(1,7); [x,fval]=linprog(c,A,b,[],[],v1)↙ 即周二、四、六各聘用10人,三、五各聘用30人,共聘用90人。
如果周日的需求量由80人增至90人,计算结果为如果周日的需求量由80人增至90人,计算结果为 x = 0.0000 3.3333 33.3333 10.0000 33.3333 10.0000 3.3333 fval = 93.3333 必须处理出现小数的问题,若将小数全部进位,聘用方案为(0,4,34,10,34,10,4),共96人,这不是最优的,实际上可以发现有只用94人的方案:(0,3,34,10,34,10,3)或(0,4,33,10,33,10,4).
实验任务 1.某厂用两台机床加工三种零件,情况如下表所示,问怎样安排两台机床一个生产周期的加工任务,才能使加工成本最低?
2.有四个煤产地A1,A2,A3,A4,今年产量(单位:万吨)分别为35,45,55,65;有6个销地B1~B6 ,今年销量分别为40,20,30,40,30,40,预计明年6个销地的销量各增加5万吨。计划部门为了使产销平衡,打算增加年产30万吨的采煤设备,把它分别拨给煤产地A1,A2,A3,A4使用,因此增加了生产成本(单位:万元)分别为20,30,15,25。问应将这套设备拨给哪个产地能使增加的总成本(生产成本和运输成本)最低?运价如下表:
一、非线性规划的概念 二、二次规划 三、无约束非线性规划 四、带约束非线性规划 实验7.2 非线性规划
一、非线性规划的概念 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题,一般来说,解非线性规划要比解线性规划问题困难得多,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。 我们先来讨论最简单的非线性规划——二次规划
二、二次规划 二次规划(Quadratic Programming ,记作QP)指目标函数是二次函数,约束条件为线性的,其一般形式为: 其中,x,A,b,Aeq,beq与线性规划相同;H为n 阶对称矩阵。
例1求解 解二次规划的命令: x=quadprog (H,c,A,b) x=quadprog (H,c,A,Aeq,beq) x=quadprog (H,c,A, Aeq,beq,VLB,VUB) x=quadprog (H,c,A, Aeq,beq,VLB,VUB,X0) [x,fval] =quadprog (H,c,A,b,…)
H=[1,-1;-1,2]; c=[-2,-6]; A=[-1,2;2,1];b=[2;3]; Aeq=[1,1];beq=[2];VLB=[0,0];VUB=[]; [x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)↙ Optimization terminated. x = 0.6667 1.3333 z = -8.2222
三、无约束非线性规划 无约束非线性规划的一般形式是 其中 f 可以是非线性的,这实际上就是多元函数极值问题 1.求单变量有界非线性函数在区间上的极小值 [x,fval]=fminbnd(fun,x1,x2,options) 它的返回值是极小点 x 和函数的极小值,这里fun是用M文件定义的函数或MATLAB中的单变量数学函数.
在[0,8]上的最大值与最小值. 例2求 解先编写文件“f.m”定义函数: function y=f(x) y=2*exp(-x)*sin(x); 在MATLAB命令窗口中输入: [xmin,ymin]=fminbnd('f',0,8) ↙ xmin = 3.9270 ymin = -0.0279
要求最大值,只需对 -f(x)求最小值 f1='-2*exp(-x).*sin(x)'; [xmax,ymax]=fminbnd(f1,0,8) ↙ xmax = 0.7854 ymax = -0.6448 故最大值为0.6448,最小值为-0.0279
2.求多变量函数的极小值 [x,fval]=fminunc(fun,x0,options,p1,p2,…) 它的返回值是向量x的值和函数的极小值。fun是一个M文件,x0是向量x的初始值,options是优化参数,p1,p2是可以传递给fun 的一些参数。
例3求最小值 解 编写M文件 function f=fun1(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); x0=[-1,1]; x=fminunc(‘fun1’,x0) ↙ x = 0.5000 -1.0000 y=fun1(x) ↙ y = 1.4644e-015
四、带约束非线性规划 带有约束条件的极值问题称为约束极值问题,也叫约束规划问题。 带约束非线性规划的一般形式为 标准型为
例4求 用MATLAB解非线性规划的一般步骤是 (1)建立M文件,定义目标函数 (2)若约束条件中有非线性约束:C(x)<=0或Ceqx=0,则建立M文件定义函数C(x)与Ceq(x) (3)建立主程序,非线性规划求解的函数是fmincon
解 先建立M文件fun1.m,定义目标函数 function f=fun1(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); 再建立M文件mycon.m,定义非线性约束 function [g,ceq]=mycon(x) g=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10]; ceq=0; 主程序为 x0=[-1,1];A=[];b=[]; Aeq=[1,1];beq=[0]; vlb=[];vub=[]; [x,fval]=fmincon('fun1',x0,A,b,Aeq,beq,vlb,vub,'mycon') ↙
x = -1.2247 1.2247 fval = 1.8951
实验任务 1.求极值 2.对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成无盖水槽,问如何剪法是水槽的容积最大? 3.解下列二次规划