为以下选项设置遗传算法
通过使用optimoptions
.
选项= optimoptions(“遗传算法”,“Option1”,“value1”,“Option2”,“value2”);
中列出了一些选项斜体
.这些选项不会出现在清单中optimoptions
的回报。看看为什么”optimoptions
隐藏这些选项值,请参见optimoptions隐藏的选项.
确保将选项传递给求解器。否则,patternsearch
使用默认选项值。
[x,fval] = ga(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,选项)
PlotFcn
指定在每次迭代中调用的绘图函数遗传算法
或gamultiobj
.设置PlotFcn
选项为内置绘图函数名或绘图函数的句柄。单击,可以随时停止算法停止图窗口上的按钮。例如,显示最佳函数值,设置选项
如下:
options = optimoptions('ga','PlotFcn','gaplotbestf');
要显示多个图,使用内置图函数名的单元格数组或函数句柄的单元格数组:
options = optimoptions('patternsearch','PlotFcn', {@plotfun1, @plotfun2,…});
在哪里@plotfun1
,@plotfun2
,等等都是绘图函数的函数句柄。如果指定多个绘图函数,则所有绘图将作为子绘图显示在同一窗口中。右键单击任何子图,可在单独的图形窗口中获得更大的版本。
可用的绘图函数遗传算法
或gamultiobj
:
“gaplotscorediversity”
绘制每代得分的直方图。
“gaplotstopping”
绘制停止标准级别。
“gaplotgenealogy”
绘制个体的谱系图。从一代到下一代的线条用颜色编码如下:
红线表示突变儿童。
蓝线表示交叉子结点。
黑线代表精英。
“gaplotscores”
画出每一代个体的分数。
“gaplotdistance”
画出每一代个体之间的平均距离。
“gaplotselection”
绘制父节点的直方图。
“gaplotmaxconstr”
绘制每代非线性约束违反的最大值。为遗传算法
,仅当NonlinearConstraintAlgorithm
选择是“auglag”
(非整数问题的默认值)。因此,不可用于整数约束的问题,因为它们使用“惩罚”
非线性约束算法。
您还可以创建和使用自己的绘图函数。图功能结构描述自定义绘图函数的结构。将任何自定义函数作为函数句柄传递。
下列绘图函数可用于遗传算法
只有:
“gaplotbestf”
绘制最佳分数值和平均分数与世代的关系。
“gaplotbestindiv”
绘制每代适应度函数值最佳个体的向量项。
“gaplotexpectation”
绘制出每一代的预期子女数量与原始分数之间的关系。
“gaplotrange”
绘制每一代的最小值、最大值和平均值。
下列绘图函数可用于gamultiobj
只有:
“gaplotpareto”
绘制前两个目标函数的帕累托前沿。
“gaplotparetodistance”
绘制每个个体与其邻居之间距离的柱状图。
“gaplotrankhist”
绘制个体排名的直方图。等级1的个体在帕累托边界上。等级2的个体低于至少一个等级1的个体,但不低于来自其他等级的任何个体,等等。
“gaplotspread”
以迭代次数为函数绘制平均扩散图。
plot函数的第一行有这样的形式:
函数state = plotfun(选项,状态,标志)
函数的输入参数为
传递额外参数解释如何向函数提供附加参数。
输出参数状态
也是一个国家结构。传递输入参数,如果你喜欢可以修改;看到改变国家结构.要停止迭代,请设置状态。停止Flag
到非空字符向量,例如“y”
.
ga。国家结构遗传算法
,它是绘图、突变和输出函数的输入参数,包含以下字段:
一代
-当前代号。
开始时间
-遗传算法开始的时间,返回抽搐
.
StopFlag
-停止的原因,一个字符向量。
LastImprovement
-适应度值最后一次改善发生的年代。
LastImprovementTime
-最近一次改善发生的时间。
最好的
-包含每代最好分数的向量。
如何
- - -“augLag”
非线性约束算法报告以下动作之一:“不可行点”
,“更新乘数”
,或增加惩罚的
;看到增广拉格朗日遗传算法.
FunEval
—功能评估累计次数。
期望
-对个人选择的期望。
选择
-精英、交叉、突变选择个体的指标。
人口
-这一代的人口。
分数
-目前人口的几十个。
NonlinIneq
-当前点的非线性不等式约束,仅当指定非线性约束函数时才存在,没有整数变量,国旗
不是“中断”
,NonlinearConstraintAlgorithm
是“auglag”
.
NonlinEq
-当前点的非线性等式约束,仅在指定非线性约束函数时存在,没有整数变量,国旗
不是“中断”
,NonlinearConstraintAlgorithm
是“auglag”
.
EvalElites
—是否存在的逻辑值遗传算法
评价精英个体的适应度函数。最初,这个值是真正的
.在第一代中,如果精英个体的评价是他们之前的值(这表明适应度函数是确定的),那么这个值就变成假
默认情况下,用于后续迭代。当EvalElites
是假
,遗传算法
没有重新评估精英个体的适应度函数。通过更改输出,可以在自定义绘图函数或自定义输出函数中覆盖此行为状态。EvalElites
.
HaveDuplicates
—是否存在的逻辑值遗传算法
为初始种群添加重复的个体。遗传算法
使用较小的相对容差来确定个体是重复的还是唯一的。如果HaveDuplicates
是真正的
,然后遗传算法
定位独特的个体,并对每个独特的个体只评估一次适应度函数。遗传算法
将适应度和约束函数值复制到重复的个体。遗传算法
每代都重复测试,直到所有个体都是唯一的。测试按顺序进行n * m *日志(m)
操作,米
人口规模和n
是据nvar
.若要在自定义绘图函数或自定义输出函数中重写此测试,请设置输出状态。HaveDuplicates
来假
.
gamultiobj。国家结构gamultiobj
,它是绘图、突变和输出函数的输入参数,包含以下字段:
人口
-这一代的人口
分数
-目前人口的分数,a人口
——- - - - - -nObjectives
矩阵,nObjectives
目标的数量是多少
一代
-当前代号
开始时间
-遗传算法开始的时间,返回抽搐
StopFlag
-停止的原因,一个字符向量
FunEval
—功能评估累计次数
选择
-精英、交叉、突变选择个体的指标
排名
-总体中成员的等级向量
距离
-总体中每个成员到最近相邻成员的距离向量
AverageDistance
的标准偏差(不是平均值)距离
传播
-向量,其中的条目是每一代的传播
mIneq
-非线性不等式约束数
微地震
-非线性等式约束数
购物中心
-非线性约束的总数,购物中心
=mIneq
+微地震
C
-当前点的非线性不等式约束,aPopulationSize
——- - - - - -mIneq
矩阵
量表信
-当前点的非线性等式约束,aPopulationSize
——- - - - - -微地震
矩阵
isFeas
-可行性人口,逻辑向量与PopulationSize
元素
maxLinInfeas
-关于总体线性约束的最大不可行性
填充选项允许您指定遗传算法使用的填充参数。
PopulationType
指定适应度函数的输入类型。类型及其限制为:
“doubleVector”
-如果种群中的个体具有类型,则使用此选项双
.将此选项用于混合整数编程。这是默认值。
“位”
-如果种群中的个体具有以下成分,则使用此选项0
或1
.
谨慎
个体在位串
人口是类型的载体双
,而不是字符串或字符。
为CreationFcn
而且MutationFcn
,使用“gacreationuniform”
而且“mutationuniform”
或自定义函数的句柄。为CrossoverFcn
,使用“crossoverscattered”
,“crossoversinglepoint”
,“crossovertwopoint”
,或自定义函数的句柄。你不能使用HybridFcn
,遗传算法
忽略所有约束,包括边界、线性约束和非线性约束。
“自定义”
—自定义填充类型。在这种情况下,您还必须使用自定义CrossoverFcn
而且MutationFcn
.必须提供自定义创建函数或InitialPopulationMatrix
.你不能使用HybridFcn
,遗传算法
忽略所有约束,包括边界、线性约束和非线性约束。
PopulationSize
指定每一代有多少个体。在较大的种群规模下,遗传算法对解空间的搜索更加彻底,从而减少了算法返回局部最小值而不是全局最小值的几率。然而,较大的种群规模也会导致算法运行速度变慢。默认为'当numberOfVariables <= 5时为50,否则为200'
.
如果你设置PopulationSize
对于一个向量,遗传算法会创建多个子种群,子种群的数量就是向量的长度。每个子总体的大小是向量的对应项。注意,这个选项没有用。看到迁移选项.
CreationFcn
指定用于创建初始填充的函数遗传算法
.不指定创建函数与整数问题,因为遗传算法
凌驾于你做出的任何选择之上。选择:
[]
为您的问题类型使用默认的创建函数。
“gacreationuniform”
创建具有均匀分布的随机初始种群。当没有线性约束或有整数约束时,这是默认值。均匀分布在初始总体范围内(InitialPopulationRange
).的默认值InitialPopulationRange
是[10] -10;
对于每个组件,或(-9999; 10001)
当有整数约束时。这些边界被移动和缩放,以匹配任何现有的边界磅
而且乌兰巴托
.
谨慎
不要使用“gacreationuniform”
当你有线性约束时。否则,你的总体可能不满足线性约束。
“gacreationlinearfeasible”
是存在线性约束而没有整数约束时的默认值。这种选择创建了一个随机的初始种群,满足所有的边界和线性约束。如果存在线性约束,“gacreationlinearfeasible”
在约束区域的边界上创建许多个体,并创建一个分散良好的种群。“gacreationlinearfeasible”
忽略了InitialPopulationRange
.“gacreationlinearfeasible”
调用linprog
创建一个关于边界和线性约束的可行总体。
有关显示其行为的示例,请参见自定义Plot函数和ga中的线性约束.
“gacreationnonlinearfeasible”
的默认创建函数是“惩罚”
非线性约束算法。详细信息请参见约束参数.
函数句柄允许您编写自己的创建函数,该函数必须生成您在其中指定的类型的数据PopulationType
.例如,
选项= optimoptions(“遗传算法”,“CreationFcn”, @myfun);
您的创建函数必须具有以下调用语法。
函数Population = myfun(genome elength, FitnessFcn, options)
函数的输入参数是:
Genomelength
-适应度函数的自变量个数
FitnessFcn
-适应度函数
选项
——选项
函数返回人口
,为遗传算法的初始总体。
传递额外参数解释如何向函数提供附加参数。
谨慎
当您有边界或线性约束时,请确保您的创建函数创建的个体满足这些约束。否则,您的总体可能无法满足约束条件。
InitialPopulationMatrix
指定遗传算法的初始填充。默认值为[]
,在这种情况下遗传算法
使用默认值CreationFcn
创建初始种群。控件中输入非空数组InitialPopulationMatrix
,数组的值不能超过PopulationSize
行,完全正确据nvar
列,据nvar
是变量的个数,第二个输入要多少遗传算法
或gamultiobj
.如果你有部分初始人口,即小于PopulationSize
行,然后遗传算法调用CreationFcn
生成剩下的个体。
InitialScoreMatrix
指定初始填充的初始分数。最初的分数也可能是不完整的。不指定整数问题的初始分数,因为遗传算法
凌驾于你做出的任何选择之上。
InitialPopulationRange
属性生成的初始填充中向量的范围gacreationuniform
创建函数。你可以设置InitialPopulationRange
是一个有两行和的矩阵据nvar
列,其中的每一列都具有表单(磅;乌兰巴托)
,在那里磅
下限是和吗乌兰巴托
是该坐标中元素的上界。如果你指定InitialPopulationRange
为了成为一个2乘1的向量,每一项都被展开成一个固定长度的行据nvar
.如果没有指定InitialPopulationRange
,默认为[10] -10;
([1 e4 + 1; 1 e4 + 1)
对于整数约束的问题),修改为匹配任何现有的边界。“gacreationlinearfeasible”
忽略了InitialPopulationRange
.看到设置初始范围举个例子。
适应度缩放将适应度函数返回的原始适应度分数转换为适合选择函数的范围内的值。
FitnessScalingFcn
指定执行缩放的函数。选项有
“fitscalingrank”
-默认适应度缩放功能,“fitscalingrank”
它是根据每个学生的排名而不是分数来衡量原始分数的。个体的排名是它在排序分数中的位置。有地位的人r缩放分数是否成正比
.所以最适合的个体的缩放分数正比于1,其次最适合的个体的缩放分数正比于
等等。等级适应度缩放消除了原始分数扩散的影响。平方根使得排名靠后的个体得分与排名靠前的个体得分接近。有关更多信息,请参见健身比例.
“fitscalingprop”
-比例缩放使个体的缩放值与其原始适应度分数成比例。
“fitscalingtop”
-顶级缩放对顶级个人一视同仁。您可以使用一个附加参数修改顶部缩放:
选项= optimoptions(“遗传算法”,“FitnessScalingFcn”, {@fitscalingtop、数量})
数量
指定分配正比例值的个人数量。数量
可以是1到总体大小之间的整数,也可以是0到1之间的分数,指定总体大小的一个分数。默认值为0.4
.每个产生后代的个体都被分配了一个相等的比例值,而其余的个体则被分配为0。缩放值的形式为[01/n 1/n 0 01/n 0 01/n…]。
“fitscalingshiftlinear”
- Shift线性缩放缩放原始分数,使最适合的个体的期望等于一个常数称为率
乘以平均分。您可以修改率
参数:
选项= optimoptions(“遗传算法”,“FitnessScalingFcn”,...{@fitscalingshiftlinear,速度})
的默认值率
是2
.
函数句柄允许您编写自己的缩放函数。
选项= optimoptions(“遗传算法”,“FitnessScalingFcn”, @myfun);
你的缩放函数必须有以下调用语法:
函数期望= myfun(分数,nParents)
函数的输入参数是:
分数
-标量向量,一个代表总体的每个成员
nParents
-这个群体需要的父母数量
函数返回期望
,等长标量的列向量分数
,给出总体中每个成员的比例值。元素的和期望
必须等于nParents
.
传递额外参数解释如何向函数提供附加参数。
看到健身比例获取更多信息。
选择选项指定遗传算法如何为下一代选择父代。
的SelectionFcn
Option指定选择函数。不要用于整数问题。
gamultiobj
仅使用“selectiontournament”
选择功能。
为遗传算法
选项是:
“selectionstochunif”
- - -遗传算法
默认选择功能,“selectionstochunif”
,表示一条直线,其中每个父结点对应于长度与其缩放值成比例的直线的一段。算法沿着这条线以相同大小的步骤移动。在每一步中,算法从它所在的部分分配一个父节点。第一步是一个小于步长的均匀随机数。
“selectionremainder”
-剩余选择从每个个体的缩放值的整数部分确定地分配父母,然后对剩余的小数部分使用轮盘选择。例如,如果一个个体的缩放值为2.3,则该个体作为父节点被列出两次,因为整数部分为2。根据缩放值的整数部分分配父结点后,随机选择其余父结点。在这一步中选择父元素的概率与其比例值的小数部分成正比。
“selectionuniform”
-统一选择使用期望和父母数量来选择父母。统一选择对调试和测试很有用,但不是一种非常有效的搜索策略。
“selectionroulette”
-轮盘选择通过模拟轮盘来选择父母,轮盘对应个体的截面面积与个体的期望成正比。该算法使用一个随机数来选择一个概率等于其面积的部分。
“selectiontournament”
-比赛选择选择每个家长大小
玩家随机选择,然后从集合中选择最好的个体作为父母。大小
至少是2。的默认值大小
是4
.集大小
为不同的值,如下所示:
选项= optimoptions(“遗传算法”,“SelectionFcn”,...{@selectiontournament、大小})
当NonlinearConstraintAlgorithm
是点球
,遗传算法
使用“selectiontournament”
与大小2
.
函数句柄使您能够编写自己的选择函数。
选项= optimoptions(“遗传算法”,“SelectionFcn”, @myfun);
你的选择函数必须有以下调用语法:
函数父母= myfun(期望,nParents,选项)
遗传算法
提供输入参数。期望
,nParents
,选项
.函数返回父节点的下标。
函数的输入参数是:
期望
nParents
-可选择的父母数量。
选项
-遗传算法选项
.
函数返回父母
,长度的行向量nParents
包含所选父节点的索引。
传递额外参数解释如何向函数提供附加参数。
看到选择获取更多信息。
繁殖选项指定了遗传算法如何为下一代创造子代。
EliteCount
指定保证能存活到下一代的个体数量。集EliteCount
为小于或等于总体大小的正整数。默认值为装天花板(0.05 * PopulationSize)
对于连续的问题,和0.05 *(默认PopulationSize)
对于混合整数问题。
CrossoverFraction
指定通过交叉产生的除精英子女外的下一代的比例。集CrossoverFraction
之间的分数0
而且1
.默认值为0.8
.
看到交叉分数设置举个例子。
突变选项指定遗传算法如何在群体中的个体中进行小的随机变化,以创建突变子。突变提供了遗传多样性,使遗传算法能够搜索更广阔的空间。属性中指定突变函数MutationFcn
选择。不要用于整数问题。
MutationFcn
选项:
“mutationgaussian”
-无约束问题的默认突变函数,“mutationgaussian”
,将从均值为0的高斯分布中取的随机数加到父向量的每一项。该分布的标准偏差由参数决定规模
而且缩小
,而在InitialPopulationRange
选择。集规模
而且缩小
如下:
选项= optimoptions(“遗传算法”,“MutationFcn”,...{@mutationgaussian,缩放,收缩})
的规模
参数决定了第一代的标准差。如果你设置InitialPopulationRange
是一个2 × 1向量v
时,父向量在各坐标处的初始标准差相同,由规模
* (v (2) - v (1))
.
如果你设置InitialPopulationRange
成为一个矢量v
有两行据nvar
列,坐标处的初始标准差我
父向量的规模
*(v(i,2) - v(i,1))
.
的缩小
参数控制随着代的推移,标准偏差如何缩小。如果你设置InitialPopulationRange
为2 × 1向量,点的标准差k一代,σk,在父向量的所有坐标上都是相同的,由递归公式给出
如果你设置InitialPopulationRange
是一个有两行和的向量据nvar
列,坐标的标准差我父向量在k一代,σ我,k,由递归公式给出
如果你设置缩小
来1
时,算法线性缩小每个坐标的标准差,直到最后生成时达到0。的负值缩小
导致标准差增大。
两者的默认值规模
而且缩小
是1。
谨慎
不要使用mutationgaussian
当你有边界或线性约束时。否则,您的总体将不一定满足约束条件。相反,使用“mutationadaptfeasible”
或者一个满足线性约束的自定义变异函数。
“mutationuniform”
-均匀突变是一个两步过程。首先,该算法选择个体向量条目的一部分进行突变,其中每个条目都有一个概率率
变异。的默认值率
是0.01
.在第二步中,算法将每个选定的条目替换为从该条目的范围中统一选择的随机数。
的默认值率
,
选项= optimoptions(“遗传算法”,“MutationFcn”, {@mutationuniform, rate})
谨慎
不要使用mutationuniform
当你有边界或线性约束时。否则,您的总体将不一定满足约束条件。相反,使用“mutationadaptfeasible”
或者一个满足线性约束的自定义变异函数。
“mutationadaptfeasible”
,即存在约束时的默认突变函数,随机生成相对于上一次成功或不成功生成的自适应方向。突变选择满足边界和线性约束的方向和步长。
函数句柄使您能够编写自己的突变函数。
选项= optimoptions(“遗传算法”,“MutationFcn”, @myfun);
你的突变函数必须有这样的调用语法:
函数mutationChildren = myfun(父母,选项,nvars, FitnessFcn,状态,thisScore, thisPopulation)
函数的参数是
父母
-选择函数选择的父节点行向量
选项
——选项
据nvar
-变量的数量
FitnessFcn
-适应度函数
状态
-包含当前代信息的结构。国家结构字段的描述。状态
.
thisScore
-当前人群得分向量
thisPopulation
-当前种群中个体的矩阵
函数返回mutationChildren
-突变的后代-作为一个矩阵,其中行对应子代。矩阵的列数是据nvar
.
传递额外参数解释如何向函数提供附加参数。
谨慎
当您有边界或线性约束时,请确保突变函数创建的个体满足这些约束。否则,您的总体将不一定满足约束条件。
交叉选项指定遗传算法如何结合两个个体,或父母,为下一代形成交叉子。
CrossoverFcn
指定执行交叉的函数。不要用于整数问题。您可以从以下功能中选择:
“crossoverscattered”
,是无线性约束问题的默认交叉函数,它创建一个随机二进制向量,并从第一个父结点选择向量为1的基因,从第二个父结点选择向量为0的基因,并将这些基因组合成子结点。例如,如果p1
而且p2
父母是
P1 = [a b c d e f g h] p2 = [1 2 3 4 5 6 7 8]
二进制向量是[1 1 0 0 1 0 0 0],函数返回以下子函数:
Child1 = [a b 3 4 e 6 7 8]
谨慎
当你的问题有线性约束时,“crossoverscattered”
可以给出一个分布不均匀的种群。在这种情况下,使用不同的交叉函数,例如“crossoverintermediate”
.
“crossoversinglepoint”
在1和之间选择一个随机整数n据nvar
然后
从第一个父节点中选择编号小于或等于n的向量项。
从第二个父节点中选择编号大于n的向量项。
连接这些项以形成子向量。
例如,如果p1
而且p2
父母是
P1 = [a b c d e f g h] p2 = [1 2 3 4 5 6 7 8]
交点是3,函数返回下面的子结点。
Child = [a b c 4 5 6 7 8]
谨慎
当你的问题有线性约束时,“crossoversinglepoint”
可以给出一个分布不均匀的种群。在这种情况下,使用不同的交叉函数,例如“crossoverintermediate”
.
“crossovertwopoint”
选择两个随机整数米
而且n
之间的1
而且据nvar
.函数选择
数小于等于的向量项米
从第一个父母
向量项从m + 1
来n
,包括从第二个父母
编号大于的向量项n
来自第一个父母。
然后,该算法将这些基因串联起来,形成一个单一的基因。例如,如果p1
而且p2
父母是
P1 = [a b c d e f g h] p2 = [1 2 3 4 5 6 7 8]
交叉点是3和6,函数返回下面的子函数。
孩子= [a b c 4 5 6 g h]
谨慎
当你的问题有线性约束时,“crossovertwopoint”
可以给出一个分布不均匀的种群。在这种情况下,使用不同的交叉函数,例如“crossoverintermediate”
.
“crossoverintermediate”
,即存在线性约束时的默认交叉函数,通过取父节点的加权平均来创建子节点。你可以通过一个参数来指定权重,比
,可以是标量,也可以是长度的行向量据nvar
.的默认值比
是一个全是1的向量。设置比
参数如下。
选项= optimoptions(“遗传算法”,“CrossoverFcn”,...{@crossoverintermediate,比});
“crossoverintermediate”
从创建子元素parent1
而且parent2
用下面的公式。
Child = parent1 + rand *比* (parent2 - parent1)
的所有项比
在范围[0,1]中,生成的子节点位于通过将父节点置于相对顶点定义的超立方体内。如果比
不在这个范围内,子结点可能在超立方体之外。如果比
为标量,则所有子节点都位于父节点之间的这条线上。
“crossoverheuristic”
返回一个位于包含两个父节点的直线上的子节点,在远离适合度值较差的父节点的方向上,该子节点距离适合度值较好的父节点有一小段距离。您可以通过参数指定子节点与较好的父节点之间的距离比
.的默认值比
是1.2。设置比
参数如下。
选项= optimoptions(“遗传算法”,“CrossoverFcn”,...{@crossoverheuristic,比});
如果parent1
而且parent2
父母,和parent1
有更好的适应度值,函数返回子
Child = parent2 + ratio * (parent1 - parent2);
谨慎
当你的问题有线性约束时,“crossoverheuristic”
可以给出一个分布不均匀的种群。在这种情况下,使用不同的交叉函数,例如“crossoverintermediate”
.
“crossoverarithmetic”
创建两个父结点的加权算术平均值的子结点。对于线性约束和边界子函数总是可行的。
函数句柄允许您编写自己的交叉函数。
选项= optimoptions(“遗传算法”,“CrossoverFcn”, @myfun);
交叉函数必须具有以下调用语法。
xoverKids = myfun(父母,选项,nvars, FitnessFcn,...未使用,thisPopulation)
函数的参数是
父母
-选择函数选择的父节点行向量
选项
——选项
据nvar
-变量的数量
FitnessFcn
-适应度函数
未使用的
—未使用占位符
thisPopulation
-表示当前人口的矩阵。矩阵的行数是PopulationSize
列数是据nvar
.
函数返回xoverKids
-交叉子代-作为一个矩阵,其中行对应子代。矩阵的列数是据nvar
.
传递额外参数解释如何向函数提供附加参数。
谨慎
当你有边界或线性约束时,确保你的交叉函数创建的个体满足这些约束。否则,您的总体将不一定满足约束条件。
请注意
亚种群参考并行处理的一种形式为遗传算法。遗传算法
目前不支持此表单。金宝app在亚种群中,每个工蜂都有一些个体。这些个体是一个亚群体。工人独立于其他工人进化出子种群,除非迁移导致一些个体在工人之间迁移。
因为遗传算法
目前不支持这种形式的并行处理,对设置有金宝app没有好处PopulationSize
到一个向量,或设置MigrationDirection
,MigrationInterval
,或MigrationFraction
选项。
迁移选项指定个体如何在亚种群之间移动。如果您设置,则会发生迁移PopulationSize
是一个长度大于1的向量。当迁移发生时,一个亚群体中的最佳个体会取代另一个亚群体中的最差个体。从一个亚种群迁移到另一个亚种群的个体被复制。它们不会从源子种群中移除。
您可以通过以下三个选项控制迁移发生的方式:
MigrationDirection
-迁移可以单向进行,也可以双向进行。
如果你设置MigrationDirection
来“前进”
时,向最后一个亚种群迁移。也就是n亚种群迁移到(n+ 1)分组人口。
如果你设置MigrationDirection
来“两个”
,nth亚种群迁移到(n-1)th和(n+ 1)分组人口。
迁徙包裹在亚种群的末端。也就是说,最后一个子种群迁移到第一个子种群,而第一个子种群可能迁移到最后一个子种群。
MigrationInterval
-指定两次迁移之间通过了多少代。例如,如果你设置MigrationInterval
来20.
在美国,移民每20代发生一次。
MigrationFraction
-指定有多少个体在亚种群之间移动。MigrationFraction
指定两个子种群中较小的移动的百分比。例如,如果个体从50个个体的亚群体迁移到100个个体的亚群体,你设置MigrationFraction
来0.1
时,迁移个体数为0.1*50=5。
约束参数是指非线性约束求解器。具体算法请参见非线性约束求解算法.
在非线性约束算法之间进行选择NonlinearConstraintAlgorithm
选项“auglag”
(增广拉格朗日)或者“惩罚”
(点球算法)。
InitialPenalty
—惩罚参数的初始值,用于非线性约束算法。InitialPenalty
必须大于等于1
,默认值为10
.
PenaltyFactor
-当问题没有解决到所需的精度和约束条件不满足时,增加惩罚参数。PenaltyFactor
必须大于1
,默认值为One hundred.
.
惩罚算法使用“gacreationnonlinearfeasible”
默认为创建功能。这个创建函数使用fmincon
找到可行的个体。“gacreationnonlinearfeasible”
开始fmincon
从各种初始点的范围内从InitialPopulationRange
选择。可选地,“gacreationnonlinearfeasible”
可以运行fmincon
在初始点上平行。
的调优参数“gacreationnonlinearfeasible”
使用以下名称-值对。
的名字 | 价值 |
---|---|
SolverOpts |
fmincon 选项,使用optimoptions 或optimset . |
UseParallel |
当真正的 、运行fmincon 平行于初始点;默认是假 . |
NumStartPts |
起始点数,为正整数最多总和(PopulationSize) 在的价值。 |
在单元格数组中包含名称-值对以及@gacreationnonlinearfeasible
.
options = optimoptions('ga','CreationFcn',{@gacreationnonlinearfeasible
,……“UseParallel”,的确,“NumStartPts”,20});
多目标选项定义的参数特征gamultiobj
算法。可以指定以下参数:
ParetoFraction
-设置保持在第一个帕累托前沿的个体比例,同时求解器从更高的前沿选择个体。该选项是0到1之间的标量。
请注意
第一个帕累托前沿的个体比例可以超过ParetoFraction
.这种情况发生在步骤6中其他等级的个体太少的情况下迭代.
DistanceMeasureFcn
-定义一个函数句柄,用于计算个体的距离测量,在决策变量空间(基因型,也称为设计变量空间)或函数空间(表型)中计算。例如,默认的距离测量函数为“distancecrowding”
在函数空间中,也就是{@distancecrowding,“表现型”}
.
“距离”衡量的是群体中每个个体的拥挤程度。在以下选项中选择:
“distancecrowding”
,或等价的{@distancecrowding,“表现型”}
-在适应度函数空间中测量距离。
{@distancecrowding,基因型的}
-在决策变量空间中测量距离。
@distancefunction
-使用以下模板编写自定义距离函数。
取消以下两行之一的注释,或使用两者的组合% y = score;%表型% y =流行;%基因型popSize = size(y,1);numData = size(y,2);维度数或适应度函数距离= 0 (popSize,1);%分配输出%这里计算距离
gamultiobj
传入人口流行
中总体的计算得分分数
的选项选项
.你的距离函数返回从总体的每个成员到一个参考的距离,比如在某种意义上最近的邻居。例如,编辑内置文件distancecrowding.m
.
遗传算法
混合函数混合函数是在遗传算法结束后运行的另一个最小化函数。方法中指定混合函数HybridFcn
选择。不要用于整数问题。选项是
[]
—无混合功能。
“fminsearch”
-使用MATLAB®函数fminsearch
执行无约束最小化。
“patternsearch”
-使用模式搜索来执行有约束或无约束最小化。
“fminunc”
-使用优化工具箱™功能fminunc
执行无约束最小化。
“fmincon”
—使用“优化工具箱”功能fmincon
执行约束最小化。
请注意
确保混合函数接受问题约束。否则,遗传算法
抛出错误。
您可以为混合功能设置单独的选项。使用optimset
为fminsearch
,或optimoptions
为fmincon
,patternsearch
,或fminunc
.例如:
hybridopts = optimoptions('fminunc','Display','iter','Algorithm','准牛顿');
选项
如下:options = optimoptions('ga',options,'HybridFcn',{@fminunc,hybridopts});
hybridopts
必须在设置之前存在选项
.
看到遗传算法中的混合方案举个例子。看到何时使用混合函数.
gamultiobj
混合函数混合函数是在多目标遗传算法结束后运行的另一个最小化函数。您可以指定混合函数“fgoalattain”
在HybridFcn
选择。
在作为多目标混合函数使用时,求解器执行以下操作:
计算每个目标函数在解处的最大值和最小值。金宝搏官方网站对客观j在解决方案k,让
计算每个解的总权重k,
计算每个目标函数的权重j在每个溶液中k,
对于每个解k,用目标向量进行目标实现问题Fk(j)和权向量p(j,k).
有关更多信息,请参见Deb的9.6节[3].
停止条件决定了导致算法终止的原因。您可以指定以下选项:
MaxGenerations
—遗传算法的最大迭代次数。默认为100 * numberOfVariables
.
MaxTime
-遗传算法在停止前运行的最大时间(秒)抽搐
而且toc
.这个限制是在每次迭代之后强制执行的,所以遗传算法
当迭代花费大量时间时,可能会超出限制。
FitnessLimit
—当最佳适应度值小于或等于的值时,算法停止FitnessLimit
.不适用于gamultiobj
.
MaxStallGenerations
-如果最佳适应度函数值的平均相对变化超过,则算法停止MaxStallGenerations
小于或等于FunctionTolerance
.(如果StallTest
选择是“geometricWeighted”
,那么测试是针对a的几何加权平均相对变化。)对于带有非线性约束的问题,MaxStallGenerations
应用于子问题(参见非线性约束求解算法).
为gamultiobj
,则为相对变化的几何平均值传播帕累托解金宝搏官方网站MaxStallGenerations
小于FunctionTolerance
,最后的价差小于前一个的平均价差MaxStallGenerations
,则算法停止。几何平均系数是1 / 2。扩散是帕累托锋运动的度量。看到gamultiobj算法.
MaxStallTime
—在指定的时间间隔内(以秒为单位),如果最佳适应度值没有改善,算法将停止MaxStallTime
,以抽搐
而且toc
.
FunctionTolerance
-如果最佳适应度函数值的平均相对变化超过,则算法停止MaxStallGenerations
小于或等于FunctionTolerance
.(如果StallTest
选择是“geometricWeighted”
,那么测试是针对a的几何加权平均相对变化。)
为gamultiobj
,则为相对变化的几何平均值传播帕累托解金宝搏官方网站MaxStallGenerations
小于FunctionTolerance
,最后的价差小于前一个的平均价差MaxStallGenerations
,则算法停止。几何平均系数是1 / 2。扩散是帕累托锋运动的度量。看到gamultiobj算法.
ConstraintTolerance
- - -ConstraintTolerance
不用作停止判据。它被用来确定关于非线性约束的可行性。同时,max (sqrt (eps), ConstraintTolerance)
确定线性约束的可行性。
看到设置最大代数和失速代数举个例子。
输出函数是遗传算法每代调用的函数。与其他求解器不同,a遗传算法
输出函数不仅可以读取算法的状态值,还可以修改这些值。输出函数还可以根据您设置的条件暂停求解器。
选项= optimoptions(“遗传算法”,“OutputFcn”, @myfun);
对于多个输出函数,输入函数句柄的单元格数组:
选项= optimoptions(“遗传算法”,“OutputFcn”, {@myfun1 @myfun2,...});
若要查看可用于编写自己的输出函数的模板,请输入
编辑gaoutputfcntemplate
在MATLAB命令行。
有关示例,请参见遗传算法自定义输出函数.
你的输出函数必须有以下调用语法:
[state,options,optchanged] = myfun(options,state,flag)
MATLAB通过选项
,状态
,国旗
数据到输出函数,输出函数返回状态
,选项
,optchanged
数据。
请注意
要停止迭代,请设置状态。停止Flag
到非空字符向量,例如“y”
.
输出函数有以下输入参数:
选项
——选项
状态
-包含当前代信息的结构。国家结构字段的描述。状态
.
国旗
—算法当前状态:
“init”
—初始化状态
“通路”
-迭代状态
“中断”
的非线性约束问题子问题的迭代“auglag”
非线性约束算法。当国旗
是“中断”
:
的价值状态
字段应用于子问题迭代。
遗传算法
不接受更改选项
,并忽略optchanged
.
的状态。NonlinIneq
而且状态。NonlinEq
字段不可用。
“完成”
-最终状态
传递额外参数解释如何向函数提供附加参数。
输出函数返回以下参数遗传算法
:
状态
-包含当前代信息的结构。国家结构字段的描述。状态
.要停止迭代,请设置状态。停止Flag
到非空字符向量,例如“y”
.
选项
—输出函数修改的选项。这个参数是可选的。
optchanged
—布尔标志,表示更改为选项
.改变选项
对于后续迭代,设置optchanged
来真正的
.
谨慎
不小心改变状态结构会导致不一致或错误的结果。通常,您可以通过使用突变或交叉函数来实现相同或更好的状态修改,而不是改变图函数或输出函数中的状态结构。
遗传算法
输出函数可以更改状态
结构(见国家结构).在更改此结构中的值时要小心,因为您可以将不一致的数据传递回遗传算法
.
提示
如果输出结构更改人口
字段,然后一定要更新分数
场,可能还有最好的
,NonlinIneq
,或NonlinEq
字段,以便它们包含一致的信息。
要更新分数
字段。人口
场,首先计算种群的适应度函数值,然后计算种群的适应度缩放。看到健身缩放选项.
“显示”
指定在运行遗传算法时在命令行上显示多少信息。可用的选项有
“最后一次”
(默认值)—显示停止原因。
“关闭”
或等价的“没有”
—无显示。
“通路”
—每次迭代都会显示相关信息。
“诊断”
—每次迭代都会显示相关信息。此外,诊断还列出了一些问题信息和已从默认值更改的选项。
这两个“通路”
而且“诊断”
显示如下信息:
一代
-代数
f-count
-适应度函数评价累计次数
最好的f (x)
-最佳适应度函数值
意思是f (x)
-平均适应度函数值
摊位代
-自适应度函数最后一次改进以来的代数
当给定一个非线性约束函数时,“通路”
而且“诊断”
请勿显示意思是f (x)
,但会额外显示:
马克斯约束
-最大非线性约束违反
您可以选择以串行、并行或向量化的方式计算适应度和约束函数。设置“UseVectorized”
而且“UseParallel”
选择与optimoptions
.
当“UseVectorized”
是假
(默认),遗传算法
每次在一个个体上调用适应度函数,因为它在种群中循环。(这个假设“UseParallel”
的默认值假
.)
当“UseVectorized”
是真正的
,遗传算法
在一次对适应度函数的调用中,一次对整个种群调用适应度函数。
如果存在非线性约束,适应度函数和非线性约束都需要向量化,以便算法以向量化的方式计算。
看到向量化适应度函数举个例子。
当UseParallel
是真正的
,遗传算法
使用您建立的并行环境(请参阅如何在全局优化工具箱中使用并行处理).集UseParallel
来假
(默认)串行计算。
请注意
你不能同时使用向量化计算和并行计算。如果你设置“UseParallel”
来真正的
而且“UseVectorized”
来真正的
,遗传算法
以向量化的方式(而不是并行地)评估适应度和约束函数。
如何评估适应度和约束函数
UseVectorized =假 |
UseVectorized =真正的 |
|
---|---|---|
UseParallel =假 |
串行 | 矢量化 |
UseParallel =真正的 |
平行 | 矢量化 |