遗传算法
使用遗传算法找到最小的函数
语法
描述
例子
优化一个非光滑函数使用遗传算法
的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)包含(“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) + (2) > = 1
和(2)< = 5 + x (1)
。
首先,将两个不等式约束转换为矩阵形式A * x < =
。换句话说,得到x
左边变量的不平等,使不平等都小于或等于:
- x - x (1) (2) < = 1
x - x (1) + (2) < = 5
一个= [1,1;1,1];b = (1、5);
解决约束问题遗传算法
。
rng默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A, b)
优化终止:平均不到options.FunctionTolerance健身价值的变化。
x =1×20.9990 - -0.0000
默认值内的约束满足约束的宽容,1 e - 3
。看到这,计算* x - b
应负的组件。
disp (A * x - b)
0.0010 - -5.9990
减少一个非光滑函数与线性等式和不等式约束
使用遗传算法来最小化ps_example
函数在该地区x (1) + (2) > = 1
和(2)= = 5 + x (1)
。
首先,将两个约束条件转换为矩阵形式A * x < =
和Aeq * x =说真的
。换句话说,得到x
左边变量的表达式,并使不平等为小于或等于形式:
- x - x (1) (2) < = 1
x - x (1) + (2) = = 5
一个= [1];b = 1;Aeq = [1];说真的= 5;
解决约束问题遗传算法
。
rng默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A、b、Aeq beq)
优化终止:平均不到options.FunctionTolerance健身价值的变化。
x =1×2-2.0000 - 2.9990
检查约束是满意的默认值ConstraintTolerance
,1 e - 3
。
disp (A * x - b)
1.0000 e 03
disp (Aeq * x”——beq)
-1.0000 e 03
与线性约束优化
使用遗传算法来最小化ps_example
函数在该地区x (1) + (2) > = 1
和(2)= = 5 + x (1)
。此外,设置范围1 < = x (1) < = 6
和3 < = x (2) < = 8
。
首先,将两个线性约束转换为矩阵形式A * x < =
和Aeq * x =说真的
。换句话说,得到x
左边变量的表达式,并使不平等为小于或等于形式:
- x - x (1) (2) < = 1
x - x (1) + (2) = = 5
一个= [1];b = 1;Aeq = [1];说真的= 5;
设置范围磅
和乌兰巴托
。
1磅= [3];乌兰巴托= 8 [6];
解决约束问题遗传算法
。
rng默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托)
优化终止:平均不到options.FunctionTolerance健身价值的变化。
x =1×21.0000 - 5.9991
检查是否满足线性约束的默认值ConstraintTolerance
,1 e - 3
。
disp (A * x - b)
-5.9991
disp (Aeq * x”——beq)
-9.5926 e-04
具有非线性约束的优化使用遗传算法
使用遗传算法来最小化ps_example
函数在该地区
和
。
这样做,首先编写一个函数ellipsecons.m
返回第一个输出的不等式约束,c
和第二输出等式约束,量表信
。保存文件ellipsecons.m
一个文件夹在您的MATLAB®路径。
类型ellipsecons
功能测查[c] = ellipsecons c (x) = 2 * x (1) ^ 2 + (2) ^ 2 - 3;测查= (x (1) + 1) ^ 2 - (x (2) / 2) ^ 4;
包括一个函数处理ellipsecons
随着nonlcon
论点。
nonlcon = @ellipsecons;有趣= @ps_example;rng默认的%的再现性x = ga(乐趣2 []、[][],[],[],[],nonlcon)
优化终止:健身价值低于平均变化的选择。FunctionTolerance和constraint violation is less than options.ConstraintTolerance.
x =1×2-0.9766 - 0.0362
检查非线性约束得到满足x
。时满足的约束c
≤0和量表信
= 0的默认值ConstraintTolerance
,1 e - 3
。
测查[c] = nonlcon (x)
c = -1.0911
测查= 5.4645 e-04
减少非默认选项
使用遗传算法来最小化ps_example
函数在该地区x (1) + (2) > = 1
和(2)= = 5 + x (1)
使用约束小于默认的公差。
首先,将两个约束条件转换为矩阵形式A * x < =
和Aeq * x =说真的
。换句话说,得到x
左边变量的表达式,并使不平等为小于或等于形式:
- x - x (1) (2) < = 1
x - x (1) + (2) = = 5
一个= [1];b = 1;Aeq = [1];说真的= 5;
获得更准确的解决方案,设定一个约束的宽容1 e-6
。并监督解决进度,设置一个情节功能。
选择= optimoptions (“遗传算法”,“ConstraintTolerance”1 e-6“PlotFcn”,@gaplotbestf);
解决最小化问题。
rng默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A、b Aeq,说真的,[],[],[],选项)
优化终止:平均不到options.FunctionTolerance健身价值的变化。
x =1×2-2.0000 - 3.0000
检查是否满足线性约束来1 e-6
。
disp (A * x - b)
9.9563 e-07
disp (Aeq * x”——beq)
-9.9593 e-07
与整数约束最小化一个非线性函数
使用遗传算法来最小化ps_example
函数的约束x (1)
是一个整数。
intcon = 1;rng默认的%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];x = ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, intcon)
优化终止:点球健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×2-5.0000 - -0.0834
获得解决方案和功能价值
使用遗传算法来最小化一个integer-constrained非线性问题。获得最低的位置和最小函数值。
intcon = 1;rng默认的%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];[x, fval] = ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, intcon)
优化终止:点球健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×2-5.0000 - -0.0834
fval = -1.8344
比较该结果与无约束问题的解决方案。
[x, fval] = ga(有趣,2)
优化终止:平均不到options.FunctionTolerance健身价值的变化。
x =1×2-4.6906 - -0.0078
fval = -1.9918
获取诊断信息
使用遗传算法来最小化ps_example
函数限制,x (1)
整数值。理解解算器停止的原因和方式遗传算法
寻找一个最低,获得exitflag
和输出
结果。情节也观察到的最小目标函数值作为解决进展。
intcon = 1;rng默认的%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];选择= optimoptions (“遗传算法”,“PlotFcn”,@gaplotbestf);[x, fval exitflag、输出]= ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, intcon,选项)
优化终止:点球健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×2-5.0000 - -0.0834
fval = -1.8344
exitflag = 1
输出=结构体字段:problemtype:“integerconstraints”rngstate: [1 x1 struct]代:86 funccount: 3311信息:优化终止:点球健身价值低于平均变化options.FunctionTolerance……“maxconstraint: 0 hybridflag: []
获得最终的人口和分数
使用遗传算法来最小化ps_example
函数限制,x (1)
整数值。获得所有的输出,包括最后的人口和向量的分数。
intcon = 1;rng默认的%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];[x, fval exitflag、输出人口,分数)= ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, intcon);
优化终止:点球健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
检查前10的成员最终人口和相应的分数。请注意,x (1)
所有这些人口成员是整数值。整数遗传算法
算法生成只有integer-feasible人群。
disp(人口(1:10)):
1.0 e + 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.0 e + 06 * -0.0000 -0.0000 2.6798 2.2560 0.2016 0.0615 0.0135 0.0099 0.0001 0.0000
输入参数
有趣的
- - - - - -目标函数
函数处理|函数名
目标函数,指定为一个函数处理或函数名。写目标函数接受一个行向量的长度据nvar
并返回一个标量值。
当“UseVectorized”
选择是真正的
,写有趣的
接受流行
——- - - - - -据nvar
矩阵,流行
是当前人口规模。在这种情况下,有趣的
返回一个向量长度一样流行
包含适应度函数值。确保有趣的
不承担任何特定的大小流行
,因为遗传算法
可以通过一个单一的人口即使在矢量化计算。
例子:有趣= @ (x) (x - (4,2)) ^ 2
数据类型:字符
|function_handle
|字符串
据nvar
- - - - - -数量的变量
正整数
一个
- - - - - -线性不等式约束
真正的矩阵
线性不等式约束,指定为一个真正的矩阵。一个
是一个米
——- - - - - -据nvar
矩阵,米
是不平等的数量。
一个
编码米
线性不等式
A * x < =
,
在哪里x
的列向量据nvar
变量x (:)
,b
是一个列向量米
元素。
例如,指定
x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30日
给这些约束:
= [1,2,3,4,5,6);b = (10、20、30);
例子:指定的控制变量和1或更少,给约束一个= 1 (1,N)
和b = 1
。
数据类型:双
b
- - - - - -线性不等式约束
真正的向量
线性不等式约束,指定为一个真正的向量。b
是一个米
元向量相关一个
矩阵。如果你通过b
作为一个行向量,解决内部转换b
的列向量b (:)
。
b
编码米
线性不等式
A * x < =
,
在哪里x
的列向量N
变量x (:)
,一个
是一个矩阵的大小米
——- - - - - -N
。
例如,指定
x1+ 2x2≤10
3x1+ 4x2≤20
5x1+ 6x2≤30日
给这些约束:
= [1,2,3,4,5,6);b = (10、20、30);
例子:指定的控制变量和1或更少,给约束一个= 1 (1,N)
和b = 1
。
数据类型:双
Aeq
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为一个真正的矩阵。Aeq
是一个我
——- - - - - -据nvar
矩阵,我
是平等的数量。
Aeq
编码我
线性等式
Aeq * x =说真的
,
在哪里x
的列向量N
变量x (:)
,说真的
是一个列向量我
元素。
例如,指定
x1+ 2x2+ 3x3= 10
2x1+ 4x2+x3= 20,
给这些约束:
Aeq = [1、2、3、2、4、1];说真的= (10、20);
例子:指定控制变量之和为1,给予约束Aeq = 1 (1, N)
和说真的= 1
。
数据类型:双
说真的
- - - - - -线性等式约束
真正的向量
线性等式约束,指定为一个真正的向量。说真的
是一个我
元向量相关Aeq
矩阵。如果你通过说真的
作为一个行向量,解决内部转换说真的
的列向量说真的(:)
。
说真的
编码我
线性等式
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
。
数据类型:双
磅
- - - - - -下界
[]
(默认)|真正的向量或数组
下界,指定为一个真正的向量或数组的双打。磅
代表了下界element-wise磅
≤x
≤乌兰巴托
。
在内部,遗传算法
将一个数组磅
的向量磅(:)
。
例子:磅=[0;无穷;4)
意味着x (1)≥0
,x (3)≥4
。
数据类型:双
乌兰巴托
- - - - - -上界
[]
(默认)|真正的向量或数组
上界,指定为一个真正的向量或数组的双打。乌兰巴托
代表了上界element-wise磅
≤x
≤乌兰巴托
。
在内部,遗传算法
将一个数组乌兰巴托
的向量乌兰巴托(:)
。
例子:乌兰巴托= (Inf; 4; 10)
意味着x (2)≤4
,x (3)≤10
。
数据类型:双
nonlcon
- - - - - -非线性约束
函数处理|函数名
非线性约束条件,指定为一个函数处理或函数名。nonlcon
是一个函数,它接受一个向量或数组x
并返回两个数组,c (x)
和量表(x)
。
c (x)
非线性不等式约束的数组x
。遗传算法
试图满足c (x) < = 0
所有条目的
c
。量表(x)
是非线性等式约束的数组x
。遗传算法
试图满足量表(x) = 0
所有条目的
量表信
。
例如,
x = ga (@myfun 4 A、b Aeq,说真的,磅,乌兰巴托,@mycon)
在哪里mycon
MATLAB是一种®等功能
功能测查[c] = mycon c (x) =…%计算非线性不等式测查x =…在x %计算非线性等式。
学习如何使用矢量化的限制,明白了矢量化的约束。
请注意
遗传算法
不执行非线性约束时感到满意吗PopulationType
选项设置为“位”
或“自定义”
。
如果intcon
非空,第二输出nonlcon
(量表信
)必须是一个空条目([]
)。
的信息遗传算法
使用nonlcon
,请参阅非线性约束求解算法。
数据类型:字符
|function_handle
|字符串
选项
- - - - - -优化选项
的输出optimoptions
|结构
优化选项,指定的输出optimoptions
或结构。
optimoptions
隐藏选项中列出斜体。看到选项optimoptions隐藏。
值
{}
表示默认值。{}*
代表默认当有线性约束和MutationFcn
当有界限。我*表示默认为整数约束,或表示整数约束的特殊考虑。
纳米不适用于表明选项
gamultiobj
。
选项遗传算法
和gamultiobj
选项 | 描述 | 值 |
---|---|---|
ConstraintTolerance |
决定了可行性对非线性约束。同时, 选择结构,使用 |
积极的标量| |
|
函数创建初始种群。指定的名称创建一个内置的函数或函数处理。看到人口的选择。 |
|
|
函数,该算法使用创建交叉的孩子。指定内置转换函数的名称或一个函数处理。看到交叉选项。 |
|
|
分数在下一代的人口,不包括精英孩子,交叉函数创建。 |
积极的标量| |
|
显示水平。 |
|
|
函数计算的距离测量的个体。指定一个内置的距离测量函数的名称或一个函数处理。适用于决策变量的值或设计空间(基因型)或功能空间(表现型)。默认的 选择结构,使用一个函数处理,而不是一个名字。 |
|
|
纳米正整数指定有多少个人在当前一代保证下一代生存。不习惯在 |
正整数| |
|
纳米如果适应度函数达到的价值 |
标量| |
|
函数尺度适应度函数的值。指定一个内置的扩展函数的名称或一个函数处理。选项不可用 |
|
FunctionTolerance |
该算法停止如果最好的适应度函数值的平均相对变化 为 选择结构,使用 |
积极的标量| |
|
我*函数,继续优化 另外,一个细胞数组指定混合函数和它的选项。看到ga混合函数。 为 当问题整数约束,你不能使用混合函数。 看到当使用混合功能。 |
函数名或处理| 或 1×2单元阵列| |
InitialPenalty |
纳米我*惩罚参数的初始值 |
积极的标量| |
|
用于种子遗传算法初始种群。有 选择结构,使用 |
矩阵| |
|
矩阵或向量指定初始种群个体的范围。适用于 选择结构,使用 |
矩阵或向量| |
|
初始值用于确定健康。有 选择结构,使用 |
列向量为单目标多目标| |矩阵 |
|
最大数量的迭代算法停止之前。 选择结构,使用 |
正整数| |
|
该算法停止如果最好的适应度函数值的平均相对变化 为 选择结构,使用 |
正整数| |
|
纳米该算法停止如果没有改进的目标函数 选择结构,使用 |
积极的标量 |
|
该算法停止运行后 选择结构,使用 |
积极的标量| |
MigrationDirection |
的方向迁移。看到迁移选项。 |
|
MigrationFraction |
标量的分数从0到1指定个人在每个分组人口迁移到另一个程序。看到迁移选项。 |
标量| |
MigrationInterval |
正整数指定数量的代亚种群之间的个人之间发生迁移。看到迁移选项。 |
正整数| |
|
函数产生突变的孩子。指定一个内置的变异函数的名称或一个函数处理。看到突变的选择。 |
|
|
非线性约束算法。看到非线性约束求解算法。选择不变的 选择结构,使用 |
|
|
的函数 选择结构,使用 |
函数处理或单元数组的函数处理| |
|
标量的分数从0到1指定个人继续第一帕累托面前,解算器从更高的领域,选择个人 |
标量| |
PenaltyFactor |
纳米我*点球更新参数。 |
积极的标量| |
|
功能块的数据计算的算法。指定一个内置的阴谋函数的名称,一个函数处理,或内置的单元阵列名称或函数处理。看到绘图选项。 选择结构,使用 |
|
PlotInterval |
连续正整数指定数量的后代之间的调用图的功能。 |
正整数| |
|
人口的规模。 |
正整数| |
|
数据类型的人口。必须 |
|
|
函数,选择交叉和变异的孩子的父母。指定一个内置的选择函数的名称或一个函数处理。
|
|
StallTest |
纳米停止测试类型。 |
|
UseParallel |
并行计算健身和非线性约束函数。看到Vectorize和并行选项(用户函数评价)和如何使用并行处理在全球优化工具箱。 |
|
|
指定是否矢量化功能。看到Vectorize和并行选项(用户函数评价)和Vectorize健身功能。 选择结构,使用 |
|
例子: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 |
时间限制 |
当有整数约束,遗传算法
使用惩罚健身价值而不是停止健身价值的标准。
输出
——优化过程的信息
结构
优化过程的信息,作为结构返回这些字段:
人口
——最后的人口
矩阵
最终的人口,作为一个返回PopulationSize
——- - - - - -据nvar
矩阵。的行人口
是个体。
更多关于
互补措施
增广拉格朗日函数非线性约束求解的互补措施的标准向量元素是谁的c我λ我,在那里c我非线性不等式约束违反,λ我是对应的拉格朗日乘子。看到增广拉格朗日遗传算法。
提示
写一个函数与其他参数的独立变量可以被称为
遗传算法
,请参阅传递额外的参数。使用人口类型的问题
双矢量
(默认),遗传算法
不接受函数的输入类型复杂的
。解决问题涉及复杂的数据,编写函数,使他们接受真正的向量,通过分离的实部和虚部。
选择功能
应用程序
的优化住编辑任务提供了一个可视化界面遗传算法
。
兼容性的考虑
遗传算法
执行更少的适应度函数评价
行为改变R2019b
当适应度函数确定的,遗传算法
不重新精英(当前最好的)个体的适应度函数。您可以通过访问控制这种行为state.EvalElites
字段和修改它在一个自定义输出函数情节或自定义函数。同样,当初始种群重复的成员,遗传算法
评估每一个独特的成员只有一次。你可以控制这种行为在一个自定义输出函数或自定义图函数通过访问和修改state.HaveDuplicates
字段。有关详细信息,请参见自定义输出函数的遗传算法或自定义绘制函数。
关于这两个新字段的详细信息,请参见国家结构。
引用
[1]Goldberg大卫·E。遗传算法在搜索、优化和机器学习,addison - wesley, 1989。
[2]a . r .康涅狄格州n i m·古尔德和博士l . Toint。”一个全局收敛的增广拉格朗日优化算法与一般的约束和简单的界限”,暹罗在数值分析》杂志上第二,体积28日,545 - 572页,1991年。
[3]a . r .康涅狄格州n i m·古尔德和博士l . Toint。”一个全局收敛的增广拉格朗日障碍优化算法与一般不等式约束和简单的界限”,数学的计算,体积66,217号,261 - 288页,1997年。
扩展功能
自动并行支持金宝app
加速代码通过自动运行并行计算使用并行计算工具箱™。
并行运行,设置“UseParallel”
选项真正的
。
选择= optimoptions ('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见如何使用并行处理在全球优化工具箱。
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。