首页 理论教育 实用数学方法:约束非线性规划

实用数学方法:约束非线性规划

时间:2023-11-17 理论教育 版权反馈
【摘要】:例3 求解下列有约束的非线性规划问题解 先构造函数MATLAB程序如下:2. 求解二次规划问题若某非线性规划的约束条件全是线性的,而目标函数为自变量x的二次函数,我们就称这种规划为二次规划。例4 求解下列有约束的非线性规划问题解 在例3中我们已用Lagrange函数方法求解,此方法只对等式约束有效。

实用数学方法:约束非线性规划

求解有约束的非线性规划问题主要有两类方法:一类是利用约束问题本身的性质,直接求解;另一类是将有约束的问题转化为无约束的规划问题,再通过无约束规划问题求解。

1. 求解只有等式约束的非线性规划问题

对于只有等式约束的非线性规划问题:

可以利用高等数学中的Lagrange乘数法。其基本思想就是通过引入Lagrange因子,将含有n个变量和k个约束条件的有约束优化问题转化为含有n+k个变量的无约束优化问题,也就是令L(x,λ)=f(x)+λTh(x),再求解L(x,λ)的极值即可。

例3 求解下列有约束的非线性规划问题

解 先构造函数

MATLAB程序如下:

2. 求解二次规划问题

若某非线性规划的约束条件全是线性的,而目标函数为自变量x的二次函数,我们就称这种规划为二次规划。二次规划一般形式可表述为如下:

其中:H是对称矩阵;f, b, beq, lb, ub是列向量;A, Aeq是矩阵。

MATLAB中求解二次规划的命令:

[x, fval]=quadprog(H, f, A, b, Aeq, beq, lb, ub, x0, options)

其中:返回值x是决策向量x的值;返回值fval是目标函数在x处的值。

例4 求解下列有约束的非线性规划问题

解 在例3中我们已用Lagrange函数方法求解,此方法只对等式约束有效。此题满足二次规划的形式,现在我们用quadprog函数求解。

MATLAB程序如下:

求得x1=4.0, x2=2.0, min f(x)=-36.00。

(注意,此题的目标函数比例3的目标函数少一个常数60)(www.xing528.com)

3. 求解一般非线性规划问题

quadprog函数虽然解决了非线性规划的约束条件既有等式又有不等式的问题,但其只针对二次规划成立,对于一般的有约束的非线性规划问题不能用。为此引入罚函数,用增加惩罚项的方法来求解。其基本思想是利用问题中的约束函数做出适当的罚函数,由此构造出带参数的增广目标函数,把一般问题转化为无约束非线性规划问题。增广目标函数由两部分构成,一部分为原问题的目标函数,另一部分为由约束条件构造的罚函数。

对于非线性规划问题:

令M足够大,则增广目标函数为

从而原问题转化为求上式的最小值,也就是无约束非线性规划问题。

对于一般的有约束的非线性规划问题,除非它的最优解恰好是无约束问题的最优解,一般用罚函数法求得的最优解都在可行域的外部,因此罚函数法也称外罚函数法。

例5 求下列非线性规划问题:

解 首先,写出增广目标函数,编写M函数test如下:

function g=test(x);

M=50000;

f=x(1)*x(2)*(x)3;

g=f-M*min(x(1), 0)-M*min(x(2), 0)- M*min(x(3), 0) -M*min(x(1)+2*x(2)+3*x(3), 0)

+M*max(x(1)+2*x(2)+3*x(3)-72, 0);

其次,求增广目标函数的最小值:

[x, y]=fminunc('test', rand(2, 1))

计算结果为x1=20,x2=11,x3=15,minf(x)=3 300。由于这是非线性规划问题,很难求得问题的全局最优解,所以只能求得一个局部最优解,并且每次运行的结果是不一样的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈