您的位置:首页 > 其它

遗传算法与直接搜索工具箱学习笔记 三-----目标函数的约束

2016-12-25 14:23 1321 查看
在上一次的笔记中,我们编写了一个目标函数,大家可以看到这个目标函数的定义域(你不会不知道定义域吧,就是自变量的取值范围)没有任何的限制,在实际问题中,对自变量往往有很多的限制,比如,大于多少,小于多少等等,套用正规的江湖术语,称这些限制为“约束”。这一部分,就重点说一下“约束”的问题。约束被分成下面的4种类型:

1.边界约束。对自变量最大值与最小值的限制:X>=l 并且X<=u

2.线性不等式约束。Ax<=b,其中A为mXn的矩阵,x为nX1的矩阵,b为3X1的矩阵。描述了n个变量受到的m种不等式的限制。

3.线性等式约束。基本同2.

4.非线性约束。

还是具体看下面的例子吧,例子比较生动而且容易理解,呵呵。

一、边界约束

边界约束主要就是包含对一个变量上界与下界的限制,在优化函数中,你如果知道它的边界,将这些边界的约束包含在问题的描述中,那么你将会又快又精确的得到你需要的结果。

针对于一个矢量x,边界约束必须与矢量x的维数相同。比如,x=[x1,x2,x3,x4],其中X1等为标量,那么边界约束的长度也必须是4,比如下界的约束为L=[1,2,3,4],上界为U=[5,6,7,8],那么等同于下面的式子:

1<=x1<=5

2<=x2<=6

3<=x3<=7

4<=x4<=8

如果约束是

x3 ≥ 8

x2 ≤ 3

那么该如何表示呢?在Matlab中使用Inf代表正无穷,相应的-Inf表示负无穷。上下界的表示可以写为:L=[-Inf,-Inf,8,-Inf],上界U=[Inf,3,Inf,Inf].

二、线性不等式的约束

有下面的不等式

x1 + x3 ≤ 4,
2x2 – x3 ≥ –2,
x1 – x2 + x3 – x4 ≥ 9.

这里有4个标量组成的一个矢量x,写成Ax<=b形式的话,A就是一个3X4的矩阵,b为3X1的矩阵

A=[1 0 1 0; b=[4;

0 -2 1 0; 2;

-1 1 -1 1 ] -9]

x=[x1,x2,x3,x4]

Ax<=b

注意红色字体的数字与原来式子中的数字符号相反。

三、线性等式约束

基本同上面的线性不等式约束,唯一不同的是把A变成了Aeq,b变成了beq。在这里就不赘述了。

四、非线性约束

非线性不等式约束的形式如c(x)<=0,非线性等式约束的形式如ceq(x)=0;对于非线性约束的表示一般使用函数的方式,就像c(x)<=0与ceq(x)=0那样。

下面的一点比较重要,非线性约束的函数必须返回两个组成部分,一个是不等式约束,另一个是等式约束,尽管它们可能不是同时能够存在,如果其中的一个不存在,那么就返回[ ]。

假设有下列的不等式约束



把这个约束写成函数的M文件形式如下:

function [c,ceq]=ellipseparabola(x)
% Inside the ellipse bounded by (-3<x<3),(-2<y<2)
% Above the line y=x^2-1
c(1) = (x(1)^2)/9 + (x(2)^2)/4 - 1;%不等式约束1
c(2) = x(1)^2 - x(2) - 1;%不等式约束2
ceq = [];%等式约束,为空
end

ellipseparabola 返回了一个[ ]作为非线性等式约束的结果。同时两个不等式约束都是 ≤ 0的形式。

如果你提供了c与ceq的梯度信息,也许算法会运行的更快,给你更多可信的结果。下面就是包含了梯度信息的约束函数的写法例子。

function [c,ceq,gradc,gradceq]=ellipseparabola(x)
% Inside the ellipse bounded by (-3<x<3),(-2<y<2)
% Above the line y=x^2-1
c(1) = x(1)^2/9 + x(2)^2/4 - 1;
c(2) = x(1)^2 - x(2) - 1;
ceq = [];

if nargout > 2
gradc = [2*x(1)/9, 2*x(1);…
x(2)/2, -1];
gradceq = [];
end

附注:本文为转载文章

原文出处:http://blog.csdn.net/niuyongjie/article/details/4863979

原作者:niuyongjie
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐