利用遗传算法求函数的最小值
GA
的ps_example.m
文件附带软件。绘制功能。
ξ= linspace (2300);易= linspace (4300);(X, Y) = meshgrid (xi, yi);Z = ps_example ([X (:), Y (:)));Z =重塑(Z,大小(X));冲浪(X, Y, Z,“MeshStyle”,“没有”)colormap“喷气机”视图(-26,43)xlabel('×(1)')ylabel (“x”(2))标题('PS \ _example(X)')
求这个函数的最小值GA
。
rng默认%的再现性x = ga (@ps_example, 2)
终止优化:适应度值的平均变化小于选择。
x =1×2-4.6793 -0.0860
使用遗传算法来最小化ps_example
区域函数X(1)+ X(2)> = 1
和x(2) <= 5 + x(1)
。
首先,将两个不等式约束转换为矩阵形式A * x < =
。换句话说,得到x
变量在不等式的左边,使两个不等式都小于或等于:
x(1) -x(2) <= -1
-x(1)+ X(2)<= 5
一个= [1,1;1,1];b = (1、5);
解决使用约束问题GA
。
rng默认%的再现性有趣= @ps_example;X = GA(乐趣,2,A,B)
终止优化:适应度值的平均变化小于选择。
x =1×20.9990 -0.0000
约束是满足的约束公差的默认值之内,1 e - 3
。计算一下A * X” - B
,它应该有负分量。
disp (A * x - b)
0.0010 -5.9990
使用遗传算法来最小化ps_example
区域函数X(1)+ X(2)> = 1
和x(2) == 5 + x(1)
。
首先,将这两个约束转换为矩阵形式A * x < =
和Aeq * x =说真的
。换句话说,得到x
将变量放在表达式的左侧,使不等式变为小于等于形式:
x(1) -x(2) <= -1
x(1) + x(2) == 5
A = [-1 -1];b = 1;Aeq = [-1];说真的= 5;
解决使用约束问题GA
。
rng默认%的再现性有趣= @ps_example;x = ga(乐趣2 A、b、Aeq beq)
终止优化:适应度值的平均变化小于选择。
x =1×2-2.0000 - 2.9990
检查约束是否满足默认值ConstraintTolerance
,1 e - 3
。
disp (A * x - b)
1.0000 e 03
DISP(AEQ * X” - 贝克)
-9.9989e-04
使用遗传算法来最小化ps_example
区域函数X(1)+ X(2)> = 1
和x(2) == 5 + x(1)
。此外,设定界限1 <= x(1) <= 6
和-3 <= X(2)<= 8
。
首先,将这两个线性约束转换为矩阵形式A * x < =
和Aeq * x =说真的
。换句话说,得到x
将变量放在表达式的左侧,使不等式变为小于等于形式:
x(1) -x(2) <= -1
x(1) + x(2) == 5
A = [-1 -1];b = 1;Aeq = [-1];说真的= 5;
设置范围磅
和乌兰巴托
。
磅= [1-3];UB = [6〜8];
解决使用约束问题GA
。
rng默认%的再现性有趣= @ps_example;x = ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托)
终止优化:适应度值的平均变化小于选择。
x =1×21.0000 - 5.9991
检查线性约束是否满足默认值ConstraintTolerance
,1 e - 3
。
disp (A * x - b)
-5.9991
DISP(AEQ * X” - 贝克)
-9.0713 e-04
GA
使用遗传算法来最小化ps_example
区域函数
和
。
为此,首先编写一个函数ellipsecons.m
它返回第一输出的不等式约束,c
,第二个输出中的等式约束,量表信
。保存文件ellipsecons.m
您MATLAB®路径上的文件夹中。
类型ellipsecons
功能并[c,CEQ] = ellipsecons(X)C = 2 *×(1)^ 2 + X(2)^ 2 - 3;CEQ =(X(1)1)^ 2 - (X(2)/ 2)^ 4;
包含一个函数句柄ellipsecons
作为nonlcon
论点。
nonlcon = @ellipsecons;有趣= @ps_example;rng默认%的再现性X = GA(乐趣,2,[],[],[],[],[],[],nonlcon)
优化终止:在健身值平均变化小于options.FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×2-0.9766 0.0362
检查非线性约束是在满足x
。满足约束条件时c
≤0和量表信
的默认值内ConstraintTolerance
,1 e - 3
。
测查[c] = nonlcon (x)
c = -1.0911
测查= 5.4645 e-04
使用遗传算法来最小化ps_example
区域函数X(1)+ X(2)> = 1
和x(2) == 5 + x(1)
使用约束公差比默认小。
首先,将这两个约束转换为矩阵形式A * x < =
和Aeq * x =说真的
。换句话说,得到x
将变量放在表达式的左侧,使不等式变为小于等于形式:
x(1) -x(2) <= -1
x(1) + x(2) == 5
A = [-1 -1];b = 1;Aeq = [-1];说真的= 5;
为了获得更精确的解,设置一个约束公差1 e-6
。并对求解过程进行监控,设置绘图功能。
选项= optimoptions(“遗传算法”,“ConstraintTolerance”,1E-6,“PlotFcn”,@gaplotbestf);
解决最小化问题。
rng默认%的再现性有趣= @ps_example;X = GA(乐趣,2,A,B,AEQ,BEQ,[],[],[],选项)
终止优化:适应度值的平均变化小于选择。
x =1×2-2.0000 - 3.0000
检查线性约束是否满足要求1 e-6
。
disp (A * x - b)
9.9999 e-07
DISP(AEQ * X” - 贝克)
-9.8695 e-07
使用遗传算法来最小化ps_example
受约束的函数x (1)
是一个整数。
IntCon = 1;rng默认%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];x = ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, IntCon)
优化终止:在点球适应值平均变化小于options.FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×2-5.0000 - -0.0000
利用遗传算法最小化一个整数约束的非线性问题。得到最小值和最小函数值的位置。
IntCon = 1;rng默认%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];[X,FVAL] = GA(乐趣,2,A,B,AEQ,BEQ,LB,UB,nonlcon,INTCON)
优化终止:在点球适应值平均变化小于options.FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×2-5.0000 - -0.0000
FVAL = -1.9178
这一结果进行比较的问题,没有约束的解决方案。
[x, fval] = ga(有趣,2)
终止优化:超过最大代数。
x =1×2-4.7121 - 0.0051
FVAL = -1.9949
使用遗传算法来最小化ps_example
功能限制有x (1)
整数值。了解解算器停止的原因以及如何停止GA
求最小值,得到exitflag
和产量
结果。另外,在求解过程中绘制观察到的最小目标函数值。
IntCon = 1;rng默认%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];选项= optimoptions(“遗传算法”,“PlotFcn”,@gaplotbestf);[x, fval exitflag、输出]= ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, IntCon,选项)
优化终止:在点球适应值平均变化小于options.FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×2-5.0000 - -0.0000
FVAL = -1.9178
exitflag = 1
输出=结构体字段:problemtype: 'integerconstraints' rngstate:[1x1的结构]世代:96 funccount:3691的消息: '优化终止:在点球适应值小于options.FunctionTolerance平均变化...' maxconstraint:0
使用遗传算法来最小化ps_example
功能限制有x (1)
整数值。获取所有输出,包括最终的总体和分数向量。
IntCon = 1;rng默认%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];[X,FVAL,exitflag,输出,人口,分数] = GA(乐趣,2,A,B,AEQ,BEQ,LB,UB,nonlcon,INTCON);
优化终止:在点球适应值平均变化小于options.FunctionTolerance和约束违反小于options.ConstraintTolerance。
检查最终群体的前10名成员及其相应的分数。注意x (1)
为所有这些总体成员的整数值。整数GA
算法只生成整数可行总体。
disp(人口(1:10)):
-5.0000 -0.0000 -5.0000 -0.0000 -5.0000 0.0014 -6.0000 0.0008 -13.0000 -0.0124 -10.0000 0.0011 -4.0000 -0.0010 0 0.0072 -4.0000 0.0010 -5.0000 -0.0000
disp(分数(1:10))
-1.9178 -1.9165 - 1.0008 64.0124 25.0011 -1.5126 2.5072 -1.5126 -1.9178
有趣的
- - - - - -目标函数目标函数,指定为函数句柄或函数名。写一个目标函数来接受一个长度为的行向量nvars
并返回一个标量值。
当“UseVectorized”
选择是真正的
,写有趣的
接受流行
——- - - - - -nvars
矩阵,流行
是当前的人口规模。在这种情况下,有趣的
返回长度相同的向量流行
包含适应度函数值。确保有趣的
不承担任何特定的大小流行
,因为GA
即使在向量化计算中,也可以传递总体中的单个成员。
例子:有趣= @ (x) (x - (4,2)) ^ 2
数据类型:字符
|function_handle
|字符串
nvars
- - - - - -数量的变量一个
- - - - - -线性不等式约束线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -nvars
矩阵,米
是不平等的数量。
一个
编码米
线性不等式
A * x < =
,
哪里x
的列向量nvars
变量X(:)
,b
是与列矢量米
元素。
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30,
给这些制约因素:
= [1,2,3,4,5,6);b = (10、20、30);
例子:若要指定控制变量的和为1或更小,请给出约束条件A =酮(1,N)
和b = 1
。
数据类型:双
b
- - - - - -线性不等式约束线性不等式约束,指定为实向量。b
是一个米
-与。相关的元素向量一个
矩阵。如果你通过b
作为一个行向量,解算器在内部转换b
到列向量B(:)
。
b
编码米
线性不等式
A * x < =
,
哪里x
的列向量N
变量X(:)
,一个
是一个矩阵的大小米
——- - - - - -N
。
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30,
给这些制约因素:
= [1,2,3,4,5,6);b = (10、20、30);
例子:若要指定控制变量的和为1或更小,请给出约束条件A =酮(1,N)
和b = 1
。
数据类型:双
Aeq
- - - - - -线性等式约束线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -nvars
矩阵,我
是等式的个数。
Aeq
编码我
线性等式
Aeq * x =说真的
,
哪里x
的列向量N
变量X(:)
,BEQ
是与列矢量我
元素。
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给这些制约因素:
Aeq = [1、2、3、2、4、1];说真的= (10、20);
例子:要指定控制变量之和为1,给予约束Aeq = 1 (1, N)
和说真的= 1
。
数据类型:双
BEQ
- - - - - -线性等式约束线性等式约束,指定为实数向量。BEQ
是一个我
-与。相关的元素向量Aeq
矩阵。如果你通过BEQ
作为一个行向量,解算器在内部转换BEQ
到列向量说真的(:)
。
BEQ
编码我
线性等式
Aeq * x =说真的
,
哪里x
的列向量N
变量X(:)
,Aeq
是一个矩阵的大小微地震
——- - - - - -N
。
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给这些制约因素:
Aeq = [1、2、3、2、4、1];说真的= (10、20);
例子:要指定控制变量之和为1,给予约束Aeq = 1 (1, N)
和说真的= 1
。
数据类型:双
磅
- - - - - -下界[]
(默认)|实向量或数组下界,指定为实向量或双精度数组。磅
表示下界元素磅
≤x
≤乌兰巴托
。
在内部,GA
将一个数组磅
到向量磅(:)
。
例子:磅=[0;无穷;4)
意味着X(1)≥0
,X(3)≥4
。
数据类型:双
乌兰巴托
- - - - - -上界[]
(默认)|实向量或数组上界,指定为实向量或双精度数组。乌兰巴托
以明智的方式表示上界元素磅
≤x
≤乌兰巴托
。
在内部,GA
将一个数组乌兰巴托
到向量乌兰巴托(:)
。
例子:UB = [Inf文件; 4; 10]
意味着x (2)≤4
,x (3)≤10
。
数据类型:双
nonlcon
- - - - - -非线性约束非线性约束,指定为功能手柄或函数的名称。nonlcon
函数是否接受向量或数组x
并返回两个数组,c (x)
和量表(x)
。
c (x)
非线性不等式约束的数组在x
。GA
试图满足
c (x) < = 0
对于所有c
。
量表(x)
非线性等式约束的数组在吗x
。GA
试图满足
量表(x) = 0
对于所有量表信
。
例如,
X = GA(@ myfun,4,A,B,AEQ,BEQ,LB,UB,@ mycon)
哪里mycon
MATLAB是一种®等功能
函数[c,ceq] = mycon(x) c =…在x点计算非线性不等式,ceq =…计算x处的非线性等式。
要了解如何使用向量化约束,请参阅矢量化的约束。
GA
不强制非线性约束得到满足时,PopulationType
选项设置为“位”
或“自定义”
。
如果INTCON
不为空,第二输出nonlcon
(量表信
)必须为空项([]
)。
有关如何信息GA
使用nonlcon
,请参阅非线性约束求解算法。
数据类型:字符
|function_handle
|字符串
选项
- - - - - -优化选项optimoptions
|结构优化选项,指定为输出optimoptions
或结构。
创建选项
通过使用optimoptions
(推荐)或从优化应用程序导出选项。详情请参阅导入和导出您的工作(优化工具箱)。
optimoptions
隐藏其中列出的选项斜体。看到选项optimoptions隐藏。
在价值观{}
表示默认值。
{} *
表示存在线性约束时的默认值,以及forMutationFcn
当有边界的时候。
我*表明GA
以不同的方式处理整数约束的选项;这个符号不适用gamultiobj
。
NM表示该选项不适用于gamultiobj
。
选项GA
、整数GA
,gamultiobj
选项 | 描述 | 值 |
---|---|---|
ConstraintTolerance |
确定了考虑非线性约束的可行性。同时, 对于选项结构,请使用 |
正标| |
|
我*创建初始填充的函数。指定为内置创建函数的名称或函数句柄。看到人口的选择。 |
|
|
我*函数,该算法用于创建交叉子节点。指定为内置交叉函数或函数句柄的名称。看到交叉选项。 |
|
|
跨界函数产生的下一代人口(不包括精英儿童)的比例。 |
正标| |
|
显示水平。 |
|
|
该功能可以计算个人的距离测量。指定为内置距离测量功能的名称或功能句柄。该值适用于判定变量或设计空间(基因型)或函数空间(表型)。默认 对于期权的结构,使用功能句柄,不是一个名字。 |
|
|
NM正整数,指定当前代中有多少个体能够存活到下一代。不习惯在 |
正整数| |
|
NM如果适应度函数的值为 |
标量| |
|
缩放适应度函数值的函数。指定为内置缩放函数或函数句柄的名称。选项不可用 |
|
FunctionTolerance |
当最优适应度函数值的平均相对变化超过时,算法停止 为 对于选项结构,请使用 |
正标| |
|
我*在此之后继续优化功能 或者,指定混合函数及其选项的单元格数组。看到ga混合函数。 为 看到何时使用混合函数。 |
函数名称或手柄| 或 1×2单元阵列| |
InitialPenalty |
NM我*惩罚参数的初始值 |
正标| |
|
用于种子遗传算法的初始种群。有 对于选项结构,请使用 |
矩阵| |
|
指定初始种群中个体范围的矩阵或向量。适用于 对于选项结构,请使用 |
矩阵或向量| |
|
我*初始分数来确定健身。有 对于选项结构,请使用 |
多目标|的单目标|矩阵的列向量 |
|
算法停止前的最大迭代次数。 对于选项结构,请使用 |
正整数| |
|
当最优适应度函数值的平均相对变化超过时,算法停止 为 对于选项结构,请使用 |
正整数| |
|
NM如果目标函数没有改进,则算法停止 对于选项结构,请使用 |
积极的标量 |
|
算法在运行之后停止 对于选项结构,请使用 |
正标| |
MigrationDirection |
的方向迁移。看到迁移选项 |
|
MigrationFraction |
从0到1的标量,指定每个子种群中迁移到不同子种群的个体的比例。看到迁移选项 |
标量| |
MigrationInterval |
正整数,指定个体在亚种群之间迁移时发生的代数。看到迁移选项。 |
正整数| |
|
我*产生突变子的功能。指定为内置的变异函数或函数句柄的名称。看到突变的选择。 |
|
|
非线性约束算法。看到非线性约束求解算法。选项为不变 对于选项结构,请使用 |
|
|
的函数 对于选项结构,请使用 |
功能手柄或函数处理的单元阵列| |
|
为从0到1的标量,指定保持在第一个Pareto前沿的个体的比例,同时求解者从更高的前沿选择个体 |
标量| |
PenaltyFactor |
NM我*点球更新参数。 |
正标| |
|
绘制由算法计算出的数据的函数。将其指定为内置plot函数、函数句柄或内置名称或函数句柄的单元数组的名称。看到绘图选项。 对于选项结构,请使用 |
|
PlotInterval |
指定对plot函数的连续调用之间的代数。 |
正整数| |
|
人口规模。 |
正整数| |
|
数据类型的人群。一定是 |
|
|
我*选择交叉和变异子女的父母的函数。指定为内置选择函数或函数句柄的名称。
|
|
StallTest |
NM停止测试类型。 |
|
UseParallel |
计算健身和并行非线性约束功能。看到向量化和并行选项(用户功能评估)和如何在全局优化工具箱中使用并行处理。 |
|
|
指定是否函数量化。看到向量化和并行选项(用户功能评估)和向量化适应度函数。 对于选项结构,请使用 |
|
例子:optimoptions( 'GA', 'PlotFcn',@ gaplotbestf)
INTCON
- - - - - -整型变量整型变量,指定为从采取的值的正整数的向量1
来nvars
。每个值在INTCON
代表x
部件被整数值。
当INTCON
非空的,Aeq
和BEQ
必须为空项([]
),nonlcon
必须返回空的量表信
。有关整数编程的更多信息,请参见混合整数遗传算法优化。
例子:以指定其中的偶数项x
是整数值,设定INTCON
来据nvar 2:2:
数据类型:双
问题
- - - - - -问题描述问题描述,指定为包含这些字段的结构。
fitnessfcn |
健身功能 |
nvars |
设计变量数 |
Aineq |
|
Bineq |
|
Aeq |
|
贝克 |
|
磅 |
上下界 |
乌兰巴托 |
上界上 |
nonlcon |
非线性约束函数 |
rngstate |
可选字段重置随机数生成器的状态 |
求解 |
|
选项 |
选择使用 |
创建问题
通过从优化应用程序导出一个问题,如中所述导入和导出您的工作(优化工具箱)。
数据类型:结构体
x
——解决方案解,作为实向量返回。x
最好的一点是GA
位于其迭代期间。
FVAL
-目标函数值在解决方案目标函数值在解,作为实数返回。一般来说,FVAL
=有趣的(x)
。
exitflag
- - -原因GA
停止原因GA
停止,作为整数返回。
出口标志 | 意义 |
---|---|
1 |
没有非线性约束- 在在适应度函数的值平均累积变动 |
具有非线性约束- 互补性措施的重要性(见互补措施) 小于 |
|
3. |
适应度函数的值没有变化 |
4 |
比机器精度步骤更小,并且约束违反的量值小于 |
5 |
最低的健身限制 |
0 |
最大代数 |
1 |
由输出函数或绘图函数终止的优化。 |
-2 |
没有可行点发现。 |
-4 |
拖延时间限制 |
5 |
时间限制 |
当有整数约束GA
使用罚适应度值而不是适应度值来停止条件。
产量
-关于优化过程的信息关于优化过程的信息,返回与这些领域的结构:
problemtype
- 问题类型,之一:
“无约束”
“boundconstraints”
“linearconstraints”
“nonlinearconstr”
“integerconstraints”
rngstate
- 国家MATLAB的随机数生成器,该算法开始之前。您可以使用值rngstate
的输出GA
。看到复制的结果。
一代又一代
-计算代数。
funccount
- 适应度函数的评价次数。
消息
-算法终止的原因。
maxconstraint
-最大约束冲突,如果有的话。
人口
——最后的人口最终群体,返回为族群大小
——- - - - - -nvars
矩阵。的行人口
是个体。
在增广拉格朗日非线性约束求解器中互补措施是向量,其元素为常态c我λ我,在那里c我是否违反非线性不等式约束,且λ我是对应的拉格朗日乘子。看到增广拉格朗日遗传算法。
将附加参数的函数写入可以调用的独立变量中GA
,请参阅传递额外的参数(优化工具箱)。
对于使用人口类型问题双矢量
(默认),GA
不接受输入类型为的函数复杂
。为了解决涉及复杂数据的问题,写你的功能,使他们接受现实载体,通过分离实部和虚部。
GA
执行更少的适应度函数评估行为在R2019b中改变
当适应度函数是确定的,GA
不重新评估精英(当前最佳)个体的适应度函数。您可以通过访问new来控制这种行为state.EvalElites
外地和一个自定义输出功能或自定义绘图功能修改它。同样,当初始群体具有相同的成员,GA
仅对每个唯一成员求一次值。您可以在自定义输出函数或自定义绘图函数中通过访问和修改new来控制此行为state.HaveDuplicates
领域。有关详细信息,请参阅自定义输出函数的遗传算法或自定义绘制函数。
有关这两个新领域的详细信息,请参阅状态结构。
大卫·戈德堡,遗传算法在搜索,优化和机器学习,addison - wesley, 1989。
[2] A. R.康涅狄格州,N. I.M。古尔德,和pH值。L. Toint。“全局收敛的增广拉格朗日算法优化与通用约束和界约束”,数值分析28卷,第2号,545-572,1991页。
[3] A. R. Conn, N. i.m.古尔德,和Ph. L. Toint。“一种全局收敛增广拉格朗日势垒算法,用于一般不等式约束和简单边界的优化”,数学的计算,第66卷,第217号,第261-288页,1997年。
并行运行,设置'UseParallel'
选项真正的
。
选项= optimoptions(”
solvername
”、“UseParallel’,真的)
有关更多信息,请参见如何在全局优化工具箱中使用并行处理。
你点击了一个链接,对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入该命令来运行它。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以选择从下面的列表中的网站:
选择最佳的网站性能的中国网站(在中国或英文)。其他MathWorks的国家网站都没有从您的位置访问进行了优化。