遗传算法
利用遗传算法求函数的最小值
语法
描述
例子
优化一个非光滑函数使用遗传算法
的ps_example.m
文件在运行此示例时包含。画出函数。
Yi = linspace(-4,4,300);[X,Y] = meshgrid(xi,yi);Z = ps_example([X(:),Y(:)]);Z =重塑(Z,大小(X));冲浪(X, Y, Z,“MeshStyle”,“没有”) colormap“喷气机”视图(-26年,43)包含(“x”(1)) ylabel (“x”(2))标题(' ps \ _example (x)的)
求这个函数的最小值遗传算法
.
rng默认的%用于再现性X = ga(@ps_example,2)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
x =1×2-4.6793 - -0.0860
最小化具有线性约束的非光滑函数
利用遗传算法来最小化ps_example
对区域的作用X (1) + X (2) >= 1
而且X (2) <= 5 + X (1)
.运行此示例时包含此函数。
首先,将两个不等式约束转换为矩阵形式A*x <= b
.换句话说,得到x
不等式左边的变量,使两个不等式都小于等于
-x(1) -x(2) <= -1
-x(1) + x(2) <= 5
A = [-1,-1;1,1];B = [-1;5];
用求解约束问题遗传算法
.
rng默认的%用于再现性Fun = @ps_example;x = ga(fun,2,A,b)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
x =1×20.9992 - 0.0000
约束满足在约束容差的默认值内,1 e - 3
.要看到这一点,计算一下A*x' - b
,它应该有负分量。
disp(A*x' - b)
0.0008 - -5.9992
最小化具有线性等式和不等式约束的非光滑函数
利用遗传算法来最小化ps_example
对区域的作用X (1) + X (2) >= 1
而且X (2) == 5 + X (1)
.运行此示例时包含此函数。
首先,将两个约束转换为矩阵形式A*x <= b
而且Aeq*x = beq
.换句话说,得到x
表达式左边的变量,并将不等式转化为小于或等于形式:
-x(1) -x(2) <= -1
-x(1) + x(2) == 5
A = [-1 -1];B = -1;Aeq = [-1 1];Beq = 5;
用求解约束问题遗传算法
.
rng默认的%用于再现性Fun = @ps_example;x = ga(fun,2,A,b,Aeq,beq)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
x =1×2-2.0005 - 2.9995
检查约束是否满足默认值ConstraintTolerance
,1 e - 3
.
disp(A*x' - b)
1.0000 e 03
disp(Aeq*x' - beq)
-1.5494 e-05
使用线性约束和边界进行优化
利用遗传算法来最小化ps_example
对区域的作用X (1) + X (2) >= 1
而且X (2) == 5 + X (1)
.的ps_example
函数在运行此示例时包含。另外,设置边界1 <= x(1) <= 6
而且-3 <= x(2) <= 8
.
首先,将两个线性约束转换为矩阵形式A*x <= b
而且Aeq*x = beq
.换句话说,得到x
表达式左边的变量,并将不等式转化为小于或等于形式:
-x(1) -x(2) <= -1
-x(1) + x(2) == 5
A = [-1 -1];B = -1;Aeq = [-1 1];Beq = 5;
设置范围磅
而且乌兰巴托
.
Lb = [1 -3];Ub = [6 8];
用求解约束问题遗传算法
.
rng默认的%用于再现性Fun = @ps_example;x = ga(fun,2,A,b,Aeq,beq,lb,ub)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
x =1×21.0000 - 6.0000
检查线性约束是否满足默认值ConstraintTolerance
,1 e - 3
.
disp(A*x' - b)
-6.0000
disp(Aeq*x' - beq)
-7.9765 e-08
利用非线性约束进行优化遗传算法
利用遗传算法来最小化ps_example
对区域的作用
而且
.的ps_example
函数在运行此示例时包含。
要做到这一点,请使用函数ellipsecons.m
在第一个输出中返回不等式约束,c
,和第二个输出中的等式约束,量表信
.的ellipsecons
函数在运行此示例时包含。检查ellipsecons
代码。
类型ellipsecons
函数[c,ceq] = ellipsecons(x) c = 2*x(1)^2 + x(2)^2 - 3;Ceq = (x(1)+1)^2 - (x(2)/2)^4;
的函数句柄ellipsecons
随着nonlcon
论点。
Nonlcon = @ellipsecons;Fun = @ps_example;rng默认的%用于再现性X = ga(fun,2,[],[],[],[],[],[],[],[],[],[],[],非lcon)
优化终止:适应度值的平均变化小于选项。FunctionTolerance而且constraint violation is less than options.ConstraintTolerance.
x =1×2-0.9766 - 0.0362
检查非线性约束是否满足x
.约束条件满足时c
≤0和量表信
= 0到的默认值ConstraintTolerance
,1 e - 3
.
[c,ceq] = nonlcon(x)
C = -1.0911
Ceq = 5.4645e-04
使用非默认选项最小化
利用遗传算法来最小化ps_example
对区域的作用X (1) + X (2) >= 1
而且X (2) == 5 + X (1)
使用小于默认值的约束容差。的ps_example
函数在运行此示例时包含。
首先,将两个约束转换为矩阵形式A*x <= b
而且Aeq*x = beq
.换句话说,得到x
表达式左边的变量,并将不等式转化为小于或等于形式:
-x(1) -x(2) <= -1
-x(1) + x(2) == 5
A = [-1 -1];B = -1;Aeq = [-1 1];Beq = 5;
为获得更精确的解,可设置约束公差为1 e-6
.为了监控解算器的进度,设置一个绘图函数。
选项= optimoptions(“遗传算法”,“ConstraintTolerance”1 e-6“PlotFcn”, @gaplotbestf);
解决最小化问题。
rng默认的%用于再现性Fun = @ps_example;x = ga(fun,2,A,b,Aeq,beq,[],[],[],选项)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
x =1×2-2.0000 - 3.0000
检查线性约束是否满足1 e-6
.
disp(A*x' - b)
9.9967 e-07
disp(Aeq*x' - beq)
-2.9701 e-08
最小化具有整数约束的非线性函数
利用遗传算法来最小化ps_example
函数受限于x (1)
整数形式。运行此示例时包含此函数。
Intcon = 1;rng默认的%用于再现性Fun = @ps_example;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = [];x = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon)
优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和constraint违例要小于options. constraintolerance。
x =1×2-5.0000 - -0.0834
获取解和函数值
利用遗传算法最小化整数约束的非线性问题。同时获得最小值和最小函数值的位置。目标函数,ps_example
,在运行此示例时包含。
Intcon = 1;rng默认的%用于再现性Fun = @ps_example;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = [];[x,fval] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon)
优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和constraint违例要小于options. constraintolerance。
x =1×2-5.0000 - -0.0834
Fval = -1.8344
将这个结果与没有约束的问题的解决方案进行比较。
[x,fval] = ga(fun,2)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
x =1×2-4.6906 - -0.0078
Fval = -1.9918
获取诊断信息
利用遗传算法来最小化ps_example
函数约束为x (1)
整数值。的ps_example
函数在运行此示例时包含。了解解算器停止的原因和如何停止的遗传算法
搜索一个最小值,得到exitflag
而且输出
结果。另外,随着求解器的进展,绘制最小观测目标函数值。
Intcon = 1;rng默认的%用于再现性Fun = @ps_example;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = [];选项= optimoptions(“遗传算法”,“PlotFcn”, @gaplotbestf);[x,fval,exitflag,output] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options)
优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和constraint违例要小于options. constraintolerance。
x =1×2-5.0000 - -0.0834
Fval = -1.8344
Exitflag = 1
输出=带字段的结构:问题类型:'integerconstraints' rngstate: [1x1 struct] generations: 86 funccount: 3311 message: '优化终止:惩罚适应度值的平均变化小于选项. functiontolerance…' maxconstraint: 0 hybridflag: []
获得最终人口和分数
利用遗传算法来最小化ps_example
函数约束为x (1)
整数值。的ps_example
函数在运行此示例时包含。获得所有输出,包括最终的总体和分数向量。
Intcon = 1;rng默认的%用于再现性Fun = @ps_example;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = [];[x,fval,exitflag,output,population,scores] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon);
优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和constraint违例要小于options. constraintolerance。
检查最终总体的前10个成员及其相应的分数。请注意,x (1)
为所有这些总体成员的整数值。整数遗传算法
算法只生成整数可行总体。
disp(人口(1:10)):
1.0e+03 * -0.0050 -0.0001 -0.0050 -0.0001 -1.6420 0.0027 -1.5070 0.0010 -0.4540 0.0104 -0.2530 -0.0011 -0.1210 -0.0003 -0.1040 0.1314 -0.0140 -0.0010 0.0160 -0.0002
disp(分数(1:10))
1.0e+06 * -0.0000 -0.0000 2.6798 2.2560 0.2016 0.0615 0.0135 0.0099 0.0001 0.0000
输入参数
有趣的
- - - - - -目标函数
函数处理|函数名
目标函数,指定为函数句柄或函数名。写出目标函数接受长度为行的向量据nvar
并返回一个标量值。
当“UseVectorized”
选择是真正的
,写有趣的
接受流行
——- - - - - -据nvar
矩阵,流行
是当前的种群大小。在这种情况下,有趣的
返回与的长度相同的向量流行
包含适应度函数值。确保有趣的
不假设任何特定的大小流行
,因为遗传算法
即使在向量化计算中也可以通过一个群体的单个成员。
例子:Fun = @(x)(x-[4,2]).^2
数据类型:字符
|function_handle
|字符串
据nvar
- - - - - -变量数量
正整数
一个
- - - - - -线性不等式约束
真正的矩阵
线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -据nvar
矩阵,米
是不等式的个数。
一个
编码米
线性不等式
A*x <= b
,
在哪里x
列向量是据nvar
变量x (:)
,b
列向量是米
元素。
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
给出这些约束条件:
A = [1,2;3,4;5,6];B = [10;20;30];
例子:要指定控制变量的和小于等于1,请给出约束条件A = ones(1,N)
而且B = 1
.
数据类型:双
b
- - - - - -线性不等式约束
真正的向量
线性不等式约束,指定为实向量。b
是一个米
元素的相关向量一个
矩阵。如果你通过了b
作为行向量,解算器内部转换b
对列向量b (:)
.
b
编码米
线性不等式
A*x <= b
,
在哪里x
列向量是N
变量x (:)
,一个
矩阵的大小米
——- - - - - -N
.
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
给出这些约束条件:
A = [1,2;3,4;5,6];B = [10;20;30];
例子:要指定控制变量的和小于等于1,请给出约束条件A = ones(1,N)
而且B = 1
.
数据类型:双
Aeq
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -据nvar
矩阵,我
是等式的个数。
Aeq
编码我
线性等式
Aeq*x = beq
,
在哪里x
列向量是N
变量x (:)
,说真的
列向量是我
元素。
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给出这些约束条件:
Aeq = [1,2,3;2,4,1];Beq = [10;20];
例子:要指定控制变量的和为1,请给出约束条件Aeq = ones(1,N)
而且Beq = 1
.
数据类型:双
说真的
- - - - - -线性等式约束
真正的向量
线性等式约束,指定为实向量。说真的
是一个我
元素的相关向量Aeq
矩阵。如果你通过了说真的
作为行向量,解算器内部转换说真的
对列向量说真的(:)
.
说真的
编码我
线性等式
Aeq*x = beq
,
在哪里x
列向量是N
变量x (:)
,Aeq
矩阵的大小微地震
——- - - - - -N
.
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给出这些约束条件:
Aeq = [1,2,3;2,4,1];Beq = [10;20];
例子:要指定控制变量的和为1,请给出约束条件Aeq = ones(1,N)
而且Beq = 1
.
数据类型:双
磅
- - - - - -下界
[]
(默认)|实向量或数组
下界,指定为实向量或双精度数组。磅
中元素的下界磅
≤x
≤乌兰巴托
.
在内部,遗传算法
转换数组磅
对向量磅(:)
.
例子:lb = [0;-Inf;4]
意味着X(1)≥0
,X(3)≥4
.
数据类型:双
乌兰巴托
- - - - - -上界
[]
(默认)|实向量或数组
上界,指定为实向量或双精度数组。乌兰巴托
中元素的上界磅
≤x
≤乌兰巴托
.
在内部,遗传算法
转换数组乌兰巴托
对向量乌兰巴托(:)
.
例子:ub = [Inf;4;10]
意味着X(2)≤4
,X(3)≤10
.
数据类型:双
nonlcon
- - - - - -非线性约束
函数处理|函数名
非线性约束,指定为函数句柄或函数名。nonlcon
函数接受向量或数组吗x
并返回两个数组,c (x)
而且量表(x)
.
c (x)
非线性不等式的约束数组是在x
.遗传算法
试图满足C (x) <= 0
对于所有
c
.量表(x)
非线性等式约束的数组是在x
.遗传算法
试图满足Ceq (x) = 0
对于所有
量表信
.
例如,
x = ga(@myfun,4,A,b,Aeq,beq,lb,ub,@mycon)
在哪里mycon
是一个MATLAB®函数如
函数[c,ceq] = mycon(x) c =…计算x上的非线性不等式ceq =…计算x处的非线性等式。
要了解如何使用向量化约束,请参见矢量化的约束.
请注意
遗传算法
不强制满足非线性约束时PopulationType
选项设置为“位”
或“自定义”
.
如果intcon
是不是空的,第二输出的nonlcon
(量表信
)必须为空项([]
).
有关如何遗传算法
使用nonlcon
,请参阅非线性约束求解算法.
数据类型:字符
|function_handle
|字符串
选项
- - - - - -优化选项
的输出optimoptions
|结构
的优化选项,指定为的输出optimoptions
或者一个结构。
optimoptions
中列出的选项斜体.看到optimoptions隐藏的选项.
值
{}
表示默认值。{} *
表示存在线性约束时的默认值,对于MutationFcn
当有边界时也是如此。我*指示整数约束的默认值,或指示整数约束的特殊考虑因素。
纳米指示该选项不应用于
gamultiobj
.
选项遗传算法
而且gamultiobj
选项 | 描述 | 值 |
---|---|---|
ConstraintTolerance |
确定非线性约束的可行性。同时, 对于选项结构,使用 |
正标量| |
|
创建初始总体的函数。指定为内置创建函数或函数句柄的名称。看到人口的选择. |
|
|
算法用来创建交叉子结点的函数。指定为内置交叉函数或函数句柄的名称。看到交叉选项. |
|
|
交叉函数所创造的下一代人口比例,不包括精英子女。 |
正标量| |
|
显示级别。 |
|
|
函数,用于计算个体的距离度量。指定为内置距离测量函数或函数句柄的名称。该值适用于决策变量或设计空间(基因型)或功能空间(表型)。默认的 对于选项结构,使用函数句柄,而不是名称。 |
|
|
纳米一个正整数,指定当前一代中有多少个体能保证存活到下一代。不用于 |
正整数| |
|
纳米如果适应度函数达到的值 |
标量| |
|
缩放适应度函数值的函数。指定为内置缩放函数或函数句柄的名称。选项不可用 |
|
FunctionTolerance |
如果最佳适应度函数值的平均相对变化超过,则算法停止 为 对于选项结构,使用 |
正标量| |
|
我*之后继续优化的函数 或者,指定混合函数及其选项的单元格数组。看到ga Hybrid命令功能. 为 当问题有整数约束时,不能使用混合函数。 看到何时使用混合函数. |
函数名或句柄| 或 1 × 2单元格数组| |
InitialPenalty |
纳米我*惩罚参数的初始值 |
正标量| |
|
初始种群用于遗传算法的种子。已达 对于选项结构,使用 |
矩阵| |
|
指定初始种群中个体范围的矩阵或向量。适用于 对于选项结构,使用 |
矩阵或向量| |
|
用于确定适应度的初始分数。已达 对于选项结构,使用 |
单目标|列向量,多目标|矩阵 |
|
算法停止前的最大迭代次数。 对于选项结构,使用 |
正整数| |
|
如果最佳适应度函数值的平均相对变化超过,则算法停止 为 对于选项结构,使用 |
正整数| |
|
纳米如果目标函数没有改进,算法将停止 对于选项结构,使用 |
积极的标量 |
|
算法运行后停止 对于选项结构,使用 |
正标量| |
MigrationDirection |
迁移方向。看到迁移选项. |
|
MigrationFraction |
从0到1的标量,指定每个子种群中迁移到不同子种群的个体的比例。看到迁移选项. |
标量| |
MigrationInterval |
正整数,表示个体在亚种群之间的迁移所发生的代数。看到迁移选项. |
正整数| |
|
产生变异子代的函数。指定为内置突变函数或函数句柄的名称。看到突变的选择. |
|
|
非线性约束算法。看到非线性约束求解算法.不可更改的选项 对于选项结构,使用 |
|
|
的函数 对于选项结构,使用 |
函数句柄或函数句柄|的单元格数组 |
|
从0到1的标量,指定当解算器从更高的前沿选择个体时,保留在第一个帕累托前沿的个体的比例,为 |
标量| |
PenaltyFactor |
纳米我*惩罚更新参数。 |
正标量| |
|
绘制由算法计算的数据的函数。指定为内置绘图函数、函数句柄或内置名称或函数句柄的单元格数组的名称。看到绘图选项. 对于选项结构,使用 |
|
PlotInterval |
正整数,指定连续调用绘图函数之间的代数。 |
正整数| |
|
人口规模。 |
正整数| |
|
总体的数据类型。必须 |
|
|
选择交叉和突变子代的父代的函数。指定为内置选择函数或函数句柄的名称。
|
|
StallTest |
纳米停止测试类型。 |
|
UseParallel |
并行计算适应度和非线性约束函数。看到向量化和并行选项(用户功能评估)而且如何在全局优化工具箱中使用并行处理. |
|
|
指定函数是否向量化。看到向量化和并行选项(用户功能评估)而且向量化适应度函数. 对于选项结构,使用 |
|
例子:optimoptions(“遗传算法”,“PlotFcn”,@gaplotbestf)
问题
- - - - - -问题描述
结构
问题描述,指定为包含这些字段的结构。
fitnessfcn |
健身功能 |
据nvar |
设计变量数量 |
Aineq |
|
Bineq |
|
Aeq |
|
说真的 |
|
磅 |
上的下界 |
乌兰巴托 |
上限值 |
nonlcon |
非线性约束函数 |
intcon |
整数变量的下标 |
rngstate |
字段重置随机数生成器的状态 |
解算器 |
|
选项 |
使用以下方法创建的选项 |
您必须指定字段fitnessfcn
,据nvar
,选项
.其余的是可选的遗传算法
.
数据类型:结构体
输出参数
x
——解决方案
真正的向量
解,作为实向量返回。x
最好的一点是这个吗遗传算法
在迭代过程中定位。
fval
-解处的目标函数值
实数
目标函数在解处的值,作为实数返回。一般来说,fval
=有趣的(x)
.
exitflag
- - -原因遗传算法
停止
整数
原因,遗传算法
停止,以整数形式返回。
出口标志 | 意义 |
---|---|
1 |
无非线性约束-适应度函数值的平均累积变化 |
有非线性约束-互补性措施的大小(见互补措施)小于 |
|
3. |
的适应度函数值没有变化 |
4 |
步长小于机床精度且约束违反的幅度小于 |
5 |
最低健康限度 |
0 |
最大代数 |
-1 |
由输出函数或绘图函数终止的优化。 |
-2 |
找不到可行点。 |
4 |
失速时限 |
5 |
时间限制 |
当有整数约束时,遗传算法
使用惩罚适合度值代替停止条件的适合度值。
输出
—优化过程信息
结构
关于优化过程的信息,作为包含以下字段的结构返回:
problemtype
-问题类型,其中之一:无约束的
“boundconstraints”
“linearconstraints”
“nonlinearconstr”
“integerconstraints”
rngstate
MATLAB随机数生成器的状态,在算法开始之前。中的值可以使用rngstate
再现…的输出遗传算法
.看到复制的结果.一代又一代
-计算的代数。funccount
-适应度函数的评价次数。消息
—算法终止的原因。maxconstraint
-最大约束违反(如有)。hybridflag
- hybrid函数退出标志。涉及HybridFcn
选项
.不适用于gamultiobj
.
人口
-最终人口
矩阵
最终的填充,返回为aPopulationSize
——- - - - - -据nvar
矩阵。一排排的人口
是个体。
更多关于
互补措施
在增广拉格朗日非线性约束求解器中,采用了互补措施向量的范数是哪些元素c我λ我,在那里c我非线性不等式约束违反,和λ我为对应的拉格朗日乘子。看到增广拉格朗日遗传算法.
提示
编写带有附加参数的自变量函数
遗传算法
,请参阅传递额外参数.对于使用填充类型的问题
双矢量
(默认),遗传算法
不接受输入类型为的函数复杂的
.要解决涉及复杂数据的问题,可以通过分离实部和虚部来编写函数,使它们接受实向量。
选择功能
应用程序
的优化活动编辑器任务提供了一个可视化界面遗传算法
.
参考文献
[1]戈德堡,大卫E。搜索、优化与机器学习中的遗传算法, Addison-Wesley, 1989。
A. R.康恩,N. I. M.古尔德,L.托因特博士。具有一般约束和简单边界的全局收敛增广拉格朗日优化算法数值分析杂志,第28卷第2期,第545-572页,1991年。
A. R.康恩,N. I. M.古尔德,L.托因特博士。具有一般不等式约束和简单边界的全局收敛增广拉格朗日势垒优化算法计算数学,第66卷,第217期,261-288页,1997年。
扩展功能
自动平行支撑金宝app
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要并行运行,请设置“UseParallel”
选项真正的
.
Options = optimoptions('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
版本历史
R2006a之前介绍R2019b:遗传算法
执行较少的适应度函数评估
当适应度函数是确定的时,遗传算法
不重新评估精英(当前最好的)个体的适应度函数。可以通过访问new状态。EvalElites
字段,并在自定义输出函数或自定义绘图函数中修改它。类似地,当初始种群有重复的成员时,遗传算法
只计算每个唯一成员一次。可以在自定义输出函数或自定义绘图函数中通过访问和修改new状态。HaveDuplicates
字段。详细信息请参见遗传算法自定义输出函数或自定义绘图函数.
新增的两个字段的详细信息,请参见国家结构.
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。