用遗传算法求函数的最小值
遗传算法
这个ps_example.m
文件随软件一起发布。绘制函数。
席=林空间(-623);yi=linspace(-4,4300);[X,Y]=meshgrid(xi,yi);Z=ps_示例([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)
优化终止:适应度值的平均变化小于选项。
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);
用遗传算法
.
rng默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A, b)
优化终止:适应度值的平均变化小于选项。
x =1×20.9990 - -0.0000
约束满足于约束公差的默认值内,1E-3
.要看到这一点,请计算* x - b
,应具有负分量。
显示(A*x'-b)
0.0010 - -5.9990
用遗传算法最小化ps_example
区域职能X (1) + X (2) >= 1
和X (2) == 5 + X (1)
.
首先,将这两个约束转换为矩阵形式A * x < =
和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默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A、b、Aeq beq)
优化终止:适应度值的平均变化小于选项。
x =1×2-2.0000 2.9990
检查约束是否满足于默认值ConstraintTolerance
,1E-3
.
显示(A*x'-b)
1.0000 e 03
disp (Aeq * x”——beq)
-9.9989 e-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 = 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默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托)
优化终止:适应度值的平均变化小于选项。
x =1×21.0000 5.9991
检查线性约束是否满足默认值的范围ConstraintTolerance
,1E-3
.
显示(A*x'-b)
-5.9991
disp (Aeq * x”——beq)
-9.0713 e-04
遗传算法
用遗传算法最小化ps_example
区域职能
和
.
为此,首先编写一个函数ellipsecons.m
在第一个输出中返回不等式约束,C
,和第二个输出中的等式约束,ceq
.保存文件ellipsecons.m
到您的MATLAB®路径中的一个文件夹。
类型椭圆秒
c = 2*x(1)^2 + x(2)^2 - 3;= (x(1)+1)^2 - (x(2)/2)^4;
包含一个函数句柄椭圆秒
随着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和ceq
= 0到默认值ConstraintTolerance
,1E-3
.
[c,ceq]=非LCON(x)
c = -1.0911
ceq=5.4645e-04
用遗传算法最小化ps_example
区域职能X (1) + X (2) >= 1
和X (2) == 5 + X (1)
使用小于默认值的约束容限。
首先,将这两个约束转换为矩阵形式A * x < =
和aeq * x = beq
.换句话说,得到x
表达式左侧的变量,并将不等式转换为小于或等于形式:
-x(1)-x(2)<= -1
-x(1)+x(2)==5
a = [-1 -1];b = -1;AEQ = [-1 1];BEQ = 5;
要获得更准确的解决方案,请设置约束公差1E-6
。若要监视解算器进度,请设置绘图功能。
选择= optimoptions (“嘎”,“约束宽容”1 e-6“PlotFcn”, @gaplotbestf);
解决最小化问题。
rng默认的%的再现性有趣= @ps_example;x = ga(乐趣2 A、b Aeq,说真的 ,[],[],[], 选项)
优化终止:适应度值的平均变化小于选项。
x =1×2-2.0000 3.0000.
检查线性约束是否满足以下条件:1E-6
.
显示(A*x'-b)
9.9999 e-07
disp (Aeq * x”——beq)
-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. constraintolerance。
x =1×2-5.0000 - -0.0000
用于遗传算法,以最小化整数约束的非线性问题。获取最小值和最小函数值的位置。
IntCon=1;rng默认的%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];[x, fval] = ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, IntCon)
优化终止:惩罚适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。
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)
整数值。理解解算器停止的原因和如何停止遗传算法
查找最小值,获取出口滞后
和输出
结果。此外,随着解算器的进行,绘制观察到的最小目标函数值。
IntCon=1;rng默认的%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];选择= optimoptions (“嘎”,“PlotFcn”, @gaplotbestf);[,FVAL,EXITFLAG,输出] = GA(有趣,2,A,B,AEQ,BEQ,LB,UB,NONLCON,INTCON,选项)
优化终止:惩罚适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。
x =1×2-5.0000 - -0.0000
fval = -1.9178
exitflag = 1
输出=带字段的结构:问题类型:'integerconstraints' rngstate: [1x1 struct] generations: 96 funccount: 3691 message: 'Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance…“maxconstraint: 0
用遗传算法最小化ps_example
功能受限x(1)
整数值。获得所有的输出,包括最终的总体和分数向量。
IntCon=1;rng默认的%的再现性有趣= @ps_example;一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];[x, fval exitflag、输出人口,分数)= ga(乐趣2 A、b Aeq,说真的,磅,乌兰巴托,nonlcon, IntCon);
优化终止:惩罚适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。
检查最后人群的前10名成员及其相应分数。请注意,x(1)
为所有这些总体成员的整数值。整数遗传算法
算法只生成整数可行的种群。
disp(人口(1:10)):
-5.0000 -0.0000 -5.0000 -5.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 - 0.00000
disp(分数(1:10))
-1.9178 -1.9178 -1.9165 1.0008 64.0124 25.0011 -1.5126 2.5072 -1.5126 -1.9178
有趣的
—目标函数目标函数,指定为函数句柄或函数名称。编写目标函数以接受长度为的行向量据nvar
并返回标量值。
当“UseVectorized”
选择是真正的
,写有趣的
接受A.流行
——- - - - - -据nvar
矩阵,流行
是目前的人口大小。在这种情况下,有趣的
返回与相同长度的向量流行
包含适应度函数值。确保有趣的
不承担任何特定的尺寸流行
,因为遗传算法
即使在向量化计算中,也可以传递种群中的单个成员。
例子:有趣= @ (x) (x - (4,2)) ^ 2
数据类型:字符
|功能手柄
|字符串
据nvar
—变量数A.
—线性不等式约束线性不等式约束,指定为实矩阵。A.
是一个M
——- - - - - -据nvar
矩阵,M
是不等式的个数。
A.
编码M
线性不等式
A * x < =
,
在哪里x
列向量是据nvar
变量x (:)
,B
列向量是M
元素。
例如,指定
x1.+ 2x2.≤10.
3.x1.+ 4x2.≤20
5.x1.+ 6x2.≤30日
给这些约束:
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定控制变量的和为1或更小,请给出约束条件一个= 1 (1,N)
和b=1
.
数据类型:双
B
—线性不等式约束线性不等式约束,指定为实向量。B
是一个M
元素向量相关的A.
矩阵,如果你通过的话B
作为行向量,求解器内部转换B
到列向量b (:)
.
B
编码M
线性不等式
A * x < =
,
在哪里x
列向量是N
变量x (:)
,A.
矩阵的大小是多少M
——- - - - - -N
.
例如,指定
x1.+ 2x2.≤10.
3.x1.+ 4x2.≤20
5.x1.+ 6x2.≤30日
给这些约束:
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定控制变量的和为1或更小,请给出约束条件一个= 1 (1,N)
和b=1
.
数据类型:双
Aeq
—线性等式约束线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -据nvar
矩阵,我
是等式的个数。
Aeq
编码我
线性等式
aeq * x = beq
,
在哪里x
列向量是N
变量x (:)
,说真的
列向量是我
元素。
例如,指定
x1.+ 2x2.+ 3x3.= 10
2.x1.+ 4x2.+x3.= 20,
给这些约束:
Aeq=[1,2,3;2,4,1];beq=[10;20];
例子:要指定控制变量的和为1,请给出约束条件AEQ = ONE(1,N)
和beq=1
.
数据类型:双
说真的
—线性等式约束线性等式约束,指定为实向量。说真的
是一个我
元素向量相关的Aeq
矩阵,如果你通过的话说真的
作为行向量,求解器内部转换说真的
到列向量说真的(:)
.
说真的
编码我
线性等式
aeq * x = beq
,
在哪里x
列向量是N
变量x (:)
,Aeq
矩阵的大小是多少微地震
——- - - - - -N
.
例如,指定
x1.+ 2x2.+ 3x3.= 10
2.x1.+ 4x2.+x3.= 20,
给这些约束:
Aeq=[1,2,3;2,4,1];beq=[10;20];
例子:要指定控制变量的和为1,请给出约束条件AEQ = ONE(1,N)
和beq=1
.
数据类型:双
磅
—下界[]
(默认)|真正的矢量或阵列下界,指定为实向量或双精度数组。磅
表示在元素方面的下界磅
≤x
≤乌兰巴托
.
在内部,遗传算法
转换数组磅
的向量磅(:)
.
例子:磅=[0;无穷;4)
意味着x(1)≥0
,x(3)≥4
.
数据类型:双
乌兰巴托
—上界[]
(默认)|真正的矢量或阵列上限,指定为真正的矢量或双打数组。乌兰巴托
表示上限元素明智磅
≤x
≤乌兰巴托
.
在内部,遗传算法
转换数组乌兰巴托
的向量ub(:)
.
例子:乌兰巴托= (Inf; 4; 10)
意味着x(2)≤4
,x(3)≤ 10
.
数据类型:双
nonlcon
—非线性约束非线性约束,指定为函数句柄或函数名。nonlcon
是一个接受向量或数组的函数x
返回两个数组,c (x)
和ceq(x)
.
c (x)
是非线性不等式约束的数组x
.遗传算法
试图满足
c (x) < = 0
的所有条目C
.
ceq(x)
是一组非线性等式约束x
.遗传算法
试图满足
量表(x) = 0
的所有条目ceq
.
例如,
x = ga (@myfun 4 A、b Aeq,说真的,磅,乌兰巴托,@mycon)
在哪里mycon
是一个MATLAB®功能如
功能[c,ceq] = mycon(x)c = ...%计算x的非线性不等式。CEQ = ...%计算X的非线性等于。
要学习如何使用向量化约束,请参见矢量化限制.
遗传算法
不强制非线性约束被满足时PopulationType
选项设置为'bitstring'
或“自定义”
.
如果IntCon
是不是空的,第二个输出nonlcon
(ceq
)必须是空的条目([]
)。
了解如何遗传算法
使用nonlcon
看见非线性约束求解算法.
数据类型:字符
|功能手柄
|字符串
选项
—优化选项最佳选择
|结构优化选项,指定为输出最佳选择
或者一个结构。
创建选项
通过使用最佳选择
(推荐)或从优化应用中导出选项。具体操作请参见导入和导出您的工作(优化工具箱)。
最佳选择
隐藏中列出的选项斜体.看到Options隐藏的选项.
值{}
表示默认值。
{} *
表示存在线性约束时的默认值,以及突变
还有当有界限的时候。
我*表明遗传算法
处理不同的约束的选项;这种表示法不适用于gamultiobj
.
纳米表示该选项不适用于gamultiobj
.
选择遗传算法
, 整数遗传算法
,gamultiobj
选项 | 描述 | 价值观 |
---|---|---|
ConstraintTolerance |
确定非线性约束的可行性。此外, 对于期权结构,请使用 |
积极的标量| |
|
我*创建初始填充的函数。指定为内置创建函数或函数句柄的名称。请参阅人口选择. |
|
|
我*算法用于创建交叉子子的功能。指定为内置交叉函数或函数句柄的名称。看到交叉选项. |
|
|
跨界功能产生的下一代人口比例,不包括精英子女。 |
积极的标量| |
|
显示级别。 |
|
|
计算个人距离的函数。指定为内置距离测量函数或函数句柄的名称。该值适用于决策变量或设计空间(基因型)或功能空间(表型)。默认的 对于选项结构,使用函数句柄,而不是名称。 |
|
|
纳米正整数,指定当前一代中保证生存到下一代的个体数。在中不使用 |
正整数| |
|
纳米若适应度函数为 |
标量| |
|
度量适应度函数值的函数。指定为内置缩放函数或函数句柄的名称。选项不可用 |
|
FunctionTolerance |
当最优适应度函数的平均相对变化值超过时,算法停止 为 对于期权结构,请使用 |
积极的标量| |
|
我*函数,之后继续优化 或者,指定混合函数及其选项的单元格数组。请参阅GA混合功能. 为 看到何时使用混合功能. |
函数名或句柄| 或 1 × 2单元阵列| |
InitialPenalty |
纳米我*惩罚参数初值 |
积极的标量| |
|
用于遗传算法种子的初始种群。有多达 对于期权结构,请使用 |
矩阵| |
|
矩阵或载体指定初始群体中的个体范围。适用于 对于期权结构,请使用 |
矩阵或者向量| |
|
我*用来确定适合度的初始分数。有 对于期权结构,请使用 |
列向量为单目标|,列矩阵为多目标| |
|
算法停止前的最大迭代次数。 对于期权结构,请使用 |
正整数| |
|
当最优适应度函数的平均相对变化值超过时,算法停止 为 对于期权结构,请使用 |
正整数| |
|
纳米如果目标函数没有改进,则算法停止 对于期权结构,请使用 |
正标量 |
|
运行after后算法停止 对于期权结构,请使用 |
积极的标量| |
迁移转向 |
迁移方向。请参阅迁移选项 |
|
迁移汇编 |
从0到1的标量,指定每个子种群中迁移到不同子种群的个体的比例。看到迁移选项 |
标量| |
迁徙Interval. |
正整数指定亚步骤之间的个人迁移之间的几代数量。看到迁移选项. |
正整数| |
|
我*产生突变子的功能。指定为内置突变函数或函数句柄的名称。看到突变的选择. |
|
|
非线性约束算法。看到非线性约束求解算法.选择不变的 对于期权结构,请使用 |
|
|
函数 对于期权结构,请使用 |
函数句柄或函数句柄|的单元格数组 |
|
从0到1的标量,指定当求解器从更高的前沿选择个体时,保持在第一个Pareto前沿的个体比例 |
标量| |
PenaltyFactor |
纳米我*点球更新参数。 |
积极的标量| |
|
绘制由算法计算的数据的函数。指定为内置绘图函数、函数句柄或内置名称或函数句柄的单元格数组的名称。看到绘图选项. 对于期权结构,请使用 |
|
绘图间隔 |
指定连续调用绘图函数之间的代数的正整数。 |
正整数| |
|
人口规模。 |
正整数| |
|
总体的数据类型。必须 |
|
|
我*选择交叉和突变的孩子的父母的功能。指定为内置选择函数或函数句柄的名称。
|
|
StallTest |
纳米停止测试类型。 |
|
UseParallel |
并行计算适应度和非线性约束函数。看到向量化和并行选项(用户函数评估)和如何在全局优化工具箱中使用并行处理. |
|
|
指定函数是否向量化。看到向量化和并行选项(用户函数评估)和向量化适应度函数. 对于期权结构,请使用 |
|
例子:optimoptions(“遗传算法”,“PlotFcn”,@gaplotbestf)
IntCon
—整型变量整型变量,指定为从其中取值的正整数向量1.
来据nvar
.每个价值IntCon
代表一个x
整数值组件。
什么时候IntCon
是不是空的,Aeq
和说真的
必须为空项([]
),及nonlcon
必须返回空ceq
。有关整数规划的更多信息,请参阅混合整数遗传算法优化.
例子:将偶数项指定为x
是整数值,IntCon
来据nvar 2:2:
数据类型:双
x
-解决方案解,返回实向量。x
这是最好的一点吗遗传算法
位于迭代期间。
fval
-目标函数在解处的值解决方案的目标函数值,作为实数返回。一般来说,fval
=有趣的(x)
.
出口滞后
- - -原因遗传算法
停止原因,遗传算法
已停止,作为整数返回。
退出旗帜 | 意义 |
---|---|
1. |
没有非线性约束-适应度函数值的平均累积变化 |
具有非线性约束-互补性度量的大小(见互补措施)少于 |
|
3. |
健身功能的价值没有改变 |
4. |
步长小于机器精度,约束违背小于 |
5. |
最低的健身限制 |
0 |
最大世代数 |
-1 |
由输出函数或绘图函数终止的优化。 |
-2 |
没有找到可行点。 |
-4 |
失速时间限制 |
-5 |
时间限制 |
当有整数约束时,遗传算法
使用惩罚适应度值代替停止标准的适应度值。
输出
—优化过程信息关于优化过程的信息,作为带有以下字段的结构返回:
problemtype
-问题类型,其中之一:
无约束的
“boundconstraints”
'linearconstraints'
'nonlinearconstr'
“integerconstraints”
rngstate
- MATLAB随机数生成器的状态,就在算法开始之前。中的值可以使用rngstate
复制…的输出遗传算法
.看到复制的结果.
一代又一代
-计算的代数。
funccount
—适应度函数的计算次数。
消息
-算法终止的原因。
maxconstraint
—最大约束违背(如果有)。
人口
- 最终人口最终的人口,返回为PopulationSize
——- - - - - -据nvar
矩阵。的行人口
是个体。
在增强拉格朗日非线性约束求解器中,互补测度元素所在的向量的范数是多少C我λ我,在那里C我是非线性不等式约束违法行为,λ我是相应的拉格朗日乘数。请参阅增广拉格朗日遗传算法.
编写一个函数,在可被调用的独立变量上附加参数遗传算法
看见传递额外的参数(优化工具箱)。
对于使用填充类型的问题双矢量
(默认),遗传算法
不接受输入类型类型的函数复杂的
.为了解决涉及复杂数据的问题,通过分离实部和虚部,编写函数使其接受实向量。
遗传算法
执行更少的适应度函数评估R2019b中的行为发生了变化
当适应度函数为确定性时,遗传算法
不会重新评估精英(当前最佳)个人的适应度函数。您可以通过访问新的状态。EvalElites
字段,并在自定义输出函数或自定义绘图函数中修改它。类似地,当初始总体有重复成员时,遗传算法
只计算每个唯一成员一次。通过访问和修改new,可以在自定义输出函数或自定义绘图函数中控制此行为状态。HaveDuplicates
字段。有关详细信息,请参见遗传算法的自定义输出函数或自定义绘制函数.
新增两个字段的详细信息请参见国家结构.
[1] Goldberg, David E.,搜索、优化和机器学习中的遗传算法艾迪生·韦斯利,1989年。
A. R. Conn, n.i.m. Gould,和Ph. L. Toint。“具有一般约束和简单边界的全局收敛增广拉格朗日优化算法”,数值分析学报, 1991年第28卷第2期545-572页。
A. R. Conn, n.i.m. Gould,和Ph. L. Toint。“具有一般不等式约束和简单界的全局收敛增广拉格朗日势垒优化算法”,数学的计算, 1997年第66卷,第217号,261-288页。
要并行运行,请设置“UseParallel”
选项真正的
.
选择= optimoptions ('
solvername.
”、“UseParallel’,真的)
有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。