第九章 最优化方法的Matlab实现 下载本文

1. 将线性规划化为典范形式,从而可以得到一个初始基本可行解x(0)(初始顶点),将它

作为迭代过程的出发点,其目标值为z(x(0))。

2. 寻找一个基本可行解x(1),使z(x(1))≤z(x(0))。方法是通过消去法将产生x(0)的典范形

式化为产生x(1)的典范形式。

3. 继续寻找较好的基本可行解x(2),x(3),…,使目标函数值不断改进,即z(x(1))≥z(x(2))

≥z(x(3)) ≥…。当某个基本可行解再也不能被其它基本可行解改进时,它就是所求的最优解。

Matlab优化工具箱中采用的是投影法,它是单纯形法的一种变种。 9.2.2.2 相关函数介绍

linprog函数

功能:求解线性规划问题。 数学模型:

其中f, x, b, beq, lb和ub为向量,A 和Aeq为矩阵。 语法:

x = linprog(f,A,b,Aeq,beq) x = linprog(f,A,b,Aeq,beq,lb,ub) x = linprog(f,A,b,Aeq,beq,lb,ub,x0) x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) [x,fval] = linprog(...) [x,fval,exitflag] = linprog(...) [x,fval,exitflag,output] = linprog(...)

[x,fval,exitflag,output,lambda] = linprog(...)

描述:

x = linprog(f,A,b)求解问题 min f'*x,约束条件为A*x <= b。

x = linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x = beq。

若没有不等式存在,则令A=[]、b=[]。

x = linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。若没有等式约束,令Aeq=[]、beq=[]。

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。该选项只适用于中型问题,缺省时大型算法将忽略初值。

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。

[x,fval] = linprog(...) 返回解x处的目标函数值fval。

[x,lambda,exitflag] = linprog(...)返回exitflag值,描述函数计算的退出条件。 [x,lambda,exitflag,output] = linprog(...) 返回包含优化信息的输出变量output。 [x,fval,exitflag,output,lambda] = linprog(...) 将解x处的拉格朗日乘子返回到lambda参数中。

变量:

lambda参数

lambda参数是解x处的拉格朗日乘子。它有以下一些属性: ? lambda.lower –lambda的下界。 ? lambda.upper –lambda的上界。 ? lambda.ineqlin –lambda的线性不等式。 ? lambda.eqlin –lambda的线性等式。 其它参数意义同前。

算法:

大型优化算法 大型优化算法采用的是LIPSOL法,该法在进行迭代计算之前首先要进行一系列的预处理。

中型优化算法 linprog函数使用的是投影法,就象quadprog函数的算法一样。linprog函数使用的是一种活动集方法,是线性规划中单纯形法的变种。它通过求解另一个线性规划问题来找到初始可行解。

诊断:

大型优化问题 算法的第一步涉及到一些约束条件的预处理问题。有些问题可能导致linprog函数退出,并显示不可行的信息。在本例中,exitflag参数将被设为负值以表示优化失败。

若Aeq参数中某行的所有元素都为零,但Beq参数中对应的元素不为零,则显示以下退出信息:

Exiting due to infeasibility: an all zero row in the constraint matrix does not have a zero in corresponding right hand size entry. 若x的某一个元素没在界内,则给出以下退出信息:

Exiting due to infeasibility: objective f'*x is unbounded below.

若Aeq参数的某一行中只有一个非零值,则x中的相关值称为奇异变量。这里,x中该成分的值可以用Aeq和Beq算得。若算得的值与另一个约束条件相矛盾,则给出以下退出信息:

Exiting due to infeasibility: Singleton variables in equality constraints are not feasible.

若奇异变量可以求解但其解超出上界或下界,则给出以下退出信息: Exiting due to infeasibility: singleton variables in the equality constraints are not within bounds.

9.2.2.3 应用实例 [ [例二] 生产决策问题

某厂生产甲乙两种产品,已知制成一吨产品甲需用资源A 3吨,资源B 4m;制成一吨产品乙需用资源A 2吨,资源B 6m,资源C 7个单位。若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200m和210个单位,试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?

令生产产品甲的数量为x1,生产产品乙的数量为x2。由题意可以建立下面的模型:

3

3

3

该模型中要求目标函数最大化,需要按照Matlab的要求进行转换,即目标函数为

首先输入下列系数:

f = [-7;-5]; A = [3 2 4 6 0 7]; b = [90; 200; 210]; lb = zeros(2,1); 然后调用linprog函数:

[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb) x = 14.0000 24.0000 fval = -218.0000 exitflag = 1 output =

iterations: 5 cgiterations: 0 algorithm: 'lipsol' lambda =

ineqlin: [3x1 double] eqlin: [0x1 double] upper: [2x1 double] lower: [2x1 double]

由上可知,生产甲种产品14吨、乙种产品24吨可使创建的总经济价值最高。最高经济价值为218万元。exitflag=1表示过程正常收敛于解x处。

磁盘中本问题的M文件为opt22_2.m。

[例三] 投资问题

某单位有一批资金用于四个工程项目的投资,用于各工程项目时所得到得净收益(投入资金