有两种方法可以指定遗传算法的选项,这取决于您是使用优化应用程序还是调用函数遗传算法
要么gamultiobj
在命令行:
如果您正在使用优化应用程序(optimtool
),选择从下拉列表中选择一项或输入文本字段的选项的值。
如果你打电话遗传算法
要么gamultiobj
在命令行,创建选项
使用函数optimoptions
, 如下:
options = optimoptions('ga','Param1', value1, 'Param2', value2,…);% or options = optimoptions('gamultiobj','Param1', value1, 'Param2', value2,…);
看到在命令行设置选项举些例子。
在本节中,每个选项以两种方式列出:
它的标签,因为它出现在优化应用程序
通过在其字段名选项
例如:
人口类型是优化应用程序中选项的标签。
PopulationType
对应的场是选项
。
绘图选项,在运行时,你从遗传算法的绘图数据。您可以通过点击在任何时间停止算法停止在绘图窗口按钮。
情节间隔(PlotInterval
)指定对plot函数的连续调用之间的代数。
方法中选择下列任何绘图函数绘制函数窗格两遗传算法
和gamultiobj
:
分数多样性('gaplotscorediversity'
)绘制每一代分数的柱状图。
停止(“gaplotstopping”
)地块停止标准水平。
家谱(“gaplotgenealogy”
)绘制个人谱系。从一代到下一代的代码行被用颜色编码如下:
红线表示突变的孩子。
蓝线表示交叉孩子。
黑线表示精英个体。
分数('gaplotscores'
)绘制每一代个体的分数。
距离(“gaplotdistance”
)绘制在每一代个体之间的平均距离。
选择(“gaplotselection”
)绘制父母的直方图。
最大约束(“gaplotmaxconstr”
)绘制了最大非线性约束违反在每一代。为遗传算法
,只适用于增广拉格朗日
(“auglag”
)非线性约束算法(NonlinearConstraintAlgorithm
)选项。因此,不适用于整数约束问题,因为它们使用点球
('罚款'
)非线性约束算法。
自定义函数让您使用自己的绘图函数。要指定plot函数(如果使用优化应用程序),
选择自定义函数。
输入@myfun
在文本框中,在那里myfun
是函数的名称。
看到情节功能的结构。
在下图功能可用于遗传算法
只要:
最好的健身('gaplotbestf'
)绘制了最好的得分值和平均分数与一代。
最好的个人('gaplotbestindiv'
)绘制每代适应度函数值最佳的个体的向量条目。
期望('gaplotexpectation'
)绘制的孩子对每一代的原始分数的预期数量。
范围('gaplotrange'
)绘制的最小值,最大值,和在每一代平均得分值。
在下图功能可用于gamultiobj
只要:
帕累托前沿('gaplotpareto'
)绘制帕累托前面针对第一两个目标函数。
帕累托平均距离('gaplotparetodistance'
)绘制出每个个体与其邻居之间距离的柱状图。
等级分布图(“gaplotrankhist”
)绘制个体等级的柱状图。排名1的个体位于帕累托边界。第2级的个人比至少一个第1级的个人低,但不低于任何其他职级的个人,等等。
平均帕累托分布(“gaplotspread”
)地块的平均价差为迭代次数的函数。
调用时显示情节遗传算法
要么gamultiobj
从命令行设置PlotFcn
选项为内置的plot函数名或plot函数的句柄。例如,要显示最佳适应度图,设置选项
如下:
选择= optimoptions(“遗传算法”,“PlotFcn”,“gaplotbestf”);
要显示多个绘图区,请使用内置绘图区函数名的单元格数组或函数句柄的单元格数组:
options = optimoptions('ga','PlotFcn', {@plotfun1, @plotfun2,…});
在哪里@ plotfun1
,@ plotfun2
,等等都是函数处理的情节功能。
如果指定多个plot函数,则所有plot都将在同一个窗口中显示为副图。右键单击任何子图以在单独的图形窗口中获得较大的版本。
曲线函数的第一行有以下形式:
函数状态= plotfun(选项、状态、标志)
函数的输入参数是
传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。
输出参数状态
是一个状态的结构为好。通过输入参数,如果你喜欢修改;看到改变国家结构。为了停止迭代,设置state.StopFlag
到非空字符向量,例如'Y'
。
ga。为国家结构遗传算法
,它是绘图、突变和输出函数的输入参数,包含以下字段:
一代
-目前的世代数。
开始时间
-时间当遗传算法开始,返回抽搐
。
StopFlag
-停止的原因,字符矢量。
LastImprovement
- 代处健身价值上的最新改进的发生。
LastImprovementTime
-最后改善发生的时间。
请接受我最美好的祝愿,
- 包含在每一代的最佳得分矢量。
如何
- - -'augLag'
非线性约束算法报告以下行为之一:“不可行点”
,“更新乘数”
,或“增加处罚”
;看到增广拉格朗日遗传算法。
FunEval
-函数计算的累积次数。
期望
-个人选择的期望。
选择
-为精英、交叉和突变选择的个体的指数。
人口
-当代人口。
分数
- 当前人口的成绩。
NonlinIneq
-当前点的非线性不等式约束,只有在指定非线性约束函数时才存在,不存在整数变量,旗
不是'打断'
和NonlinearConstraintAlgorithm
是“auglag”
。
NonlinEq
-当前点的非线性等式约束,只有在指定非线性约束函数时才存在,没有整数变量,旗
不是'打断'
和NonlinearConstraintAlgorithm
是“auglag”
。
EvalElites
- 逻辑值指示是否遗传算法
评价精英个体的适应度函数。最初,这个值是真正
。在第一代中,如果精英个体评估到他们之前的值(这表明适应度函数是确定的),那么这个值就变成假
默认情况下,用于后续迭代。当EvalElites
是假
,遗传算法
不重新评估精英个体的适应度函数。您可以通过改变输出覆盖自定义绘图功能或自定义输出功能这一行为state.EvalElites
。
HaveDuplicates
- 逻辑值指示是否遗传算法
增加了对初始种群重复的个体。遗传算法
使用小的相对宽容,以确定一个人是否是重复的或独特的。如果HaveDuplicates
是真正
,然后遗传算法
定位独特的个人和每一个独特的个体计算适应度函数只有一次。遗传算法
复制适应度和约束函数值以复制个体。遗传算法
在每一代重复测试,直到所有个体都是唯一的。考试开始了n * m *日志(m)
操作,米
人口规模和ñ
是据nvar
。要覆盖此测试中的自定义绘图功能或自定义输出功能,设置输出state.HaveDuplicates
来假
。
gamultiobj。为国家结构gamultiobj
,它是绘图、突变和输出函数的输入参数,包含以下字段:
人口
-当代人口
分数
- 当前人口的比分,一个人口
——- - - - - -nObjectives
矩阵,nObjectives
是目标的数量
一代
-现时的发电量
开始时间
-时间当遗传算法开始,返回抽搐
StopFlag
-停止的原因,字符矢量
FunEval
- 功能评估的累计数
选择
- 选择精英,交叉和变异的个体指数
秩
-人口中成员等级的向量
距离
- 人口的每个成员的距离向量到最近的邻成员
AverageDistance
- 标准差(非普通)距离
传播
- Vector中的项在每一代蔓延
mIneq
-非线性不等式约束的个数
微地震
-非线性等式约束的个数
购物中心
-非线性约束的总数,购物中心
=mIneq
+微地震
C
-当前点的非线性不等式约束,aPopulationSize
——- - - - - -mIneq
矩阵
CEQ
-当前点的非线性等式约束,aPopulationSize
——- - - - - -微地震
矩阵
isFeas
-可行性人口,一个逻辑向量与PopulationSize
分子
maxLinInfeas
-在人口的线性约束条件下,最大的不可行性
种群选项允许指定遗传算法使用的种群的参数。
人口类型(PopulationType
)指定适应度函数的输入类型。类型和他们的限制是:
双矢量
(“doubleVector”
) -如果种群中的个体具有类型,请使用此选项双
。将此选项用于混合整数编程。这是默认值。
位串
(“位”
) -使用此选项,如果在人群中的个人有组成部分是0
要么1
。
a中的个体位串
人口是类型的载体双
,而不是字符串或字符。
为创建函数(CreationFcn
),变异函数(MutationFcn
), 采用统一的
(“gacreationuniform”
和“mutationuniform”
) 要么习惯
。为交叉功能(CrossoverFcn
), 采用零落
('crossoverscattered'
),单点
(“crossoversinglepoint”
),两个点
('crossovertwopoint'
), 要么习惯
。你不能使用混合功能和遗传算法
忽略所有约束,包括边界、线性约束和非线性约束。
习惯
——对交叉功能和变异函数,使用习惯
。为创建函数,要么使用习惯
,或提供初始种群。你不能使用混合功能和遗传算法
忽略所有约束,包括边界、线性约束和非线性约束。
人口规模(PopulationSize
)指定有多少人有每一代。随着人口数量庞大,遗传算法更彻底地搜索解空间,从而减少了该算法返回局部最小值是不是全局最小的机会。然而,一个大的人口规模也导致算法运行更慢。
如果设置人口规模对于一个向量,遗传算法创建多个子种群,子种群的数量就是向量的长度。每个子总体的大小是向量的对应项。看到迁移选项。
创建函数(CreationFcn
)指定用于创建初始群体中的功能遗传算法
。不要指定整数的问题,因为一个创作功能遗传算法
覆盖您所做的任何选择。选择:
[]
使用有关问题的默认创建功能。
统一的
(“gacreationuniform”
)创建一个具有均匀分布的随机初始种群。当没有线性约束或有整数约束时,这是默认值。均匀分布在初始种群范围内(InitialPopulationRange
)。默认值为InitialPopulationRange
是[10]-10;
对于每个组件,或(-9999;10001)
当存在整数约束时。这些界限被移动和缩放以匹配任何现有的界限磅
和乌兰巴托
。
不要使用“gacreationuniform”
当你有线性约束。否则,你的人口可能无法满足线性约束。
可行的人口
(“gacreationlinearfeasible”
),当有线性约束和没有整数约束的缺省值,创建一个随机的初始群体,其满足所有边界和线性约束。如果存在线性约束,可行的人口
创建于限制区域的界限许多人,并创造良好的人口分散。可行的人口
忽略了初始范围(InitialPopulationRange
)。
“gacreationlinearfeasible”
调用linprog
以创建相对于边界和线性约束可行人口。
有关显示其行为的示例,请参见遗传算法中的自定义标绘函数和线性约束。
非线性可行的人口
(“gacreationnonlinearfeasible”
的默认创建函数'罚款'
非线性约束算法。有关详细信息,请参见约束参数。
习惯
允许您编写自己的创建函数,该函数必须生成您在其中指定的类型的数据人口类型。,如果你使用的是优化应用程序指定创建功能,
集创建函数来习惯
。
集函数名来@myfun
,在那里myfun
是函数的名称。
如果您正在使用遗传算法
,组
选项= optimoptions( 'GA', 'CreationFcn',@ myfun);
您的创建函数必须具有以下调用语法。
功能人口= myfun(GenomeLength,FitnessFcn,选项)
输入函数的自变量是:
Genomelength
- 自变量的数目为健身功能
FitnessFcn
——适应度函数
选项
——选项
函数返回人口
,为遗传算法的初始种群。
传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。
当你有界限或线性约束,确保创建函数创建满足这些约束条件的个体。否则,你的人口可能无法满足约束条件。
初始种群(InitialPopulationMatrix
)指定了遗传算法的初始群体。默认值是[]
, 在这种情况下遗传算法
使用默认的创建函数创造一个初始种群。方法中输入非空数组初始种群字段,数组必须不超过人口规模行,并准确变量数列。如果你有一个局部初始种群,意思是小于人口规模行,那么遗传算法调用创建函数产生剩余的个体。
初始分数(InitialScoreMatrix
)指定初始总体的初始得分。最初的分数也可以是部分的。不指定初始分数与整数问题,因为遗传算法
覆盖您所做的任何选择。
初始范围(InitialPopulationRange
)指定由生成的初始填充中的向量的范围gacreationuniform
创建功能。您可以设置初始范围是一个有两行和的矩阵变量数列,其中每一列的形式(磅;乌兰巴托)
,在那里磅
在下部结合并乌兰巴托
在上界在该坐标中的条目。如果您指定初始范围为了得到一个2×1的向量,每一项都被展开成一个长度为常数的行变量数。如果不指定初始范围,默认为[10]-10;
([1 e4 + 1; 1 e4 + 1)
对于整数约束的问题),修改为匹配任何现有的边界。
看到设置初始范围的一个例子。
健身缩放转换由适应度函数在适合于选择功能的范围内返回到值的原始分数的健身。您可以指定在健身缩放选项健身比例窗格。
缩放功能(FitnessScalingFcn
)指定执行缩放功能。选项有
秩
('fitscalingrank'
) - 默认的适应度变换功能,秩
,根据每个人的排名而不是分数来衡量原始分数。一个个体的等级是它在排序分数中的位置。有地位的人[R已缩放的得分成比例
。所以,最适合个人的比例分数成正比1,下一个最适合的比例分数成正比
等等。等级适合度尺度消除了原始分数的扩散效果。与排名得分相比,平方根使排名较低的个体在得分上更接近相等。有关更多信息,请参见健身比例。
成比例的
('fitscalingprop'
) - 比例缩放使得个体正比于它的原始适应得分换算值。
最佳
('fitscalingtop'
) -最上面的量表平等地衡量最上面的个人。选择最佳
显示一个附加字段,数量,它指定被分配正换算值的个体的数量。数量可以是一个从1到总体大小的整数,也可以是一个从0到1的分数,指定总体大小的一个分数。默认值是0.4
。的个人的每一个产生后代被分配相等的换算值,而其余的被指定值为0的定标值的格式为[01 / N 1 / N 0 0 1 / N 0 0 1 / N ...]。
要更改默认值数量在命令行,使用以下语法:
options = optimoptions('ga','FitnessScalingFcn', {@fitscalingtop,quantity})
在哪里数量
是的价值数量。
改变线性
(“fitscalingshiftlinear”
) - 移位线性缩放尺度原始分数,以使最适合的个体是对期望等于乘以平均得分的常数。您可以指定在恒马克斯存活率现场,当您选择其中显示改变线性
。默认值是2
。
的默认值马克斯存活率在命令行,可使用以下语法
选择= optimoptions(“遗传算法”,“FitnessScalingFcn”,…{@fitscalingshiftlinear,速度})
在哪里率
是的价值马克斯存活率。
习惯
让你写你自己的缩放功能。要使用优化的应用程序指定的缩放功能,
集缩放功能来习惯
。
集函数名来@myfun
,在那里myfun
是函数的名称。
如果您正在使用遗传算法
在命令行,set
选择= optimoptions(“遗传算法”,“FitnessScalingFcn”, @myfun);
你的缩放函数必须有以下调用语法:
功能期望= myfun(分数,nParents)
输入函数的自变量是:
分数
- 标量为群体的每个成员的载体,一个
nParents
- 从这一人群所需要的家长人数
函数返回期望
中,相同的长度的标量的列向量分数
,给群体的每个成员的换算值。的项的总和期望
必须等于nParents
。
传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。
看到健身比例欲获得更多信息。
选择选项指定遗传算法如何为下一代选择父代。方法中指定算法使用的函数选择功能(SelectionFcn
)的领域选择选项面板中。不要在整数问题中使用。
gamultiobj
只使用比赛
('selectiontournament'
)选择功能。
为遗传算法
选项有:
随机均匀
(“selectionstochunif”
) - 的遗传算法
默认选择功能,随机均匀
,绘制了一条直线,其中每个父元素对应于与所缩放的值成比例的长度直线的一段。算法沿着直线以相同的步长移动。在每个步骤中,算法从它所在的部分分配一个父节点。第一步是一个均匀随机数小于步长。
余
('selectionremainder'
) -余数选择从每个个体的比例值的整数部分确定性地分配父母,然后使用轮盘赌选择的剩余小数部分。例如,如果一个个体的缩放值是2.3,那么该个体将作为父元素被列出两次,因为整数部分是2。在按比例值的整数部分分配双亲之后,随机选择其余的双亲。在这一步中选择父元素的概率与它的比例值的小数部分成正比。
统一的
('selectionuniform'
) -统一选择选择父母的期望和父母的数量。统一选择对于调试和测试非常有用,但不是一个非常有效的搜索策略。
轮盘赌
('selectionroulette'
) - 轮盘选择通过模拟轮盘,其中,对应于单个车轮的截面的面积正比于个体的期望选择的父母。该算法使用随机数来选择的概率的一个部分等于其面积。
比赛
('selectiontournament'
) -比赛选择通过选择选择每个父母比赛规模随机选择,然后从中选出最好的个体作为父母。比赛规模必须至少为2的默认值比赛规模是4
。
的默认值比赛规模在命令行上,使用语法
选项= optimoptions( 'GA', 'SelectionFcn',... {@ selectiontournament,大小})
在哪里尺寸
是的价值比赛规模。
当约束参数>非线性约束算法是点球
,遗传算法
使用比赛
与大小2
。
习惯
使您能够编写自己的选择函数。要使用优化应用程序指定选择函数,
集选择功能来习惯
。
集函数名来@myfun
,在那里myfun
是函数的名称。
如果您正在使用遗传算法
在命令行,set
选项= optimoptions( 'GA', 'SelectionFcn',@ myfun);
你的选择函数必须有以下调用语法:
函数双亲= myfun(期望,nParents,选项)
遗传算法
提供输入参数期望
,nParents
和选项
。你的函数返回父母的指数。
输入函数的自变量是:
期望
nParents
-可供选择的家长数目。
选项
- 遗传算法选项
。
函数返回父母
长度的行向量nParents
包含您选择的父索引。
传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。
看到选择欲获得更多信息。
复制选项指定遗传算法是如何创建的下一代的孩子。
精英数(EliteCount
)指定保证存活到下一代的个体数量。集精英数小于或等于总体大小的正整数。默认值是装天花板(0.05 * PopulationSize)
对于连续的问题,并且0.05 *(默认PopulationSize)
为整数的问题。
交叉部分(CrossoverFraction
)指定跨界产生的下一代(精英儿童除外)的比例。集交叉部分之间的一个分数0
和1
,无论是通过在文本框中输入级分或移动滑块。默认值是0.8
。
看到设置交叉分数的一个例子。
突变选项指定遗传算法如何对种群中的个体进行小的随机变化,从而产生突变子。突变提供了遗传多样性,使遗传算法能够搜索更广阔的空间。可以在。中指定突变函数变异函数(MutationFcn
)的领域突变选项面板中。不要在整数问题中使用。您可以从以下功能中选择:
高斯
(“mutationgaussian”
) -无约束问题的默认突变函数,高斯
,将从均值为0的高斯分布中提取的随机数添加到父向量的每个条目上。这个分布的标准差是由参数决定的规模和收缩当你选择要显示的高斯
,而由初始范围设置在人口选项。
该规模参数决定了第一代的标准差。如果设置初始范围是一个2×1矢量v
,则初始标准差在父向量的所有坐标处均相同,由规模* (v (2) - v (1))
。
如果设置初始范围是一个矢量v
两行变量数列,初始标准偏差在坐标一世
的父向量规模*(V(I,2) - V(I,1))
。
该收缩参数控制标准偏差为收缩一代如何去了。如果设置初始范围是一个2×1向量,标准偏差在ķ一代,σķ,在父向量的所有坐标下都是相同的,由递归公式给出
如果设置初始范围以与两行的矢量和变量数列,标准偏差为坐标一世在亲代载体的ķ一代,σ我,k,由递推公式给出
如果设置收缩来1
,算法线性收缩各坐标的标准差,直到最后一代达到0。负值为收缩导致标准差增大。
两者的默认值规模和收缩是1。要改变的默认值在命令行上,使用语法
options = optimoptions('ga','MutationFcn',…{@mutationgaussian,规模,缩小})
在哪里规模
和缩小
的值规模和收缩,分别。
不要使用mutationgaussian
当你有界限或线性约束时。否则,您的种群将不一定满足约束条件。
统一的
(“mutationuniform”
) - 一致突变是一个两步骤的过程。首先,算法选择用于突变的个体,其中,每个条目具有的概率的向量的条目的一小部分率被突变。的默认值率是0.01
。在第二步骤中,该算法通过替换来自该条目的的范围内均匀地选择一个随机数的每个选定的条目。
的默认值率在命令行上,使用语法
选项= optimoptions( 'GA', 'MutationFcn',{@mutationuniform,速率})
在哪里率
是的价值率。
不要使用mutationuniform
当你有界限或线性约束时。否则,您的种群将不一定满足约束条件。
自适应可行
(“mutationadaptfeasible”
),当有约束时的默认突变函数,随机生成与最后一个成功或不成功生成相适应的方向。变异选择一个方向和步长,满足界限和线性约束。
习惯
使您能够编写自己的突变函数。要使用优化app指定突变函数,
集变异函数来习惯
。
集函数名来@myfun
,在那里myfun
是函数的名称。
如果您正在使用遗传算法
,组
选择= optimoptions(“遗传算法”,“MutationFcn”, @myfun);
你突变的功能必须有这样的调用语法:
功能mutationChildren = myfun(父母,选项,nvars,FitnessFcn,州,thisScore,thisPopulation)
函数的参数是
父母
- 通过选择功能选择的父母行向量
选项
——选项
据nvar
-变量数量
FitnessFcn
——适应度函数
状态
- 包含有关当前一代的信息结构。国家结构描述了状态
。
thisScore
- 当前人口的得分矢量
thisPopulation
-当前种群中的个体矩阵
函数返回mutationChildren
-THE突变后代-为其中行对应于孩子的矩阵。矩阵的列的数目是变量数。
传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。
当你有界限或线性约束时,确保你的突变函数创建的个体满足这些约束。否则,您的种群将不一定满足约束条件。
交叉选择指定遗传算法如何结合两个个体,或父母,为下一代形成一个交叉子。
交叉功能(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'
当你有线性约束。否则,您的种群将不一定满足约束条件。
单点
(“crossoversinglepoint”
)选择1和之间的随机整数n变量数然后
从第一个父元素中选择编号小于或等于n的向量项。
从第二个父节点选择编号大于n的向量项。
连接这些项目形成的孩子向量。
例如,如果P1
和P2
是我的父母
P1 = [A B C d E F G H] P2 = [1 2 3 4 5 6 7 8]
而交叉点为3,函数返回以下的孩子。
子= [A B C 4 5 6 7 8]
不要使用“crossoversinglepoint”
当你有线性约束。否则,您的种群将不一定满足约束条件。
两个点
('crossovertwopoint'
)选择两个随机整数米
和ñ
之间1
和变量数。功能选择
向量的个数小于等于米
从第一个父
向量项编号m + 1
来ñ
,包括来自第二父母的
矢量条目编号大于ñ
来自第一个父母。
然后,该算法串接这些基因,以形成一个单一的基因。例如,如果P1
和P2
是我的父母
P1 = [A B C d E F G H] P2 = [1 2 3 4 5 6 7 8]
和交叉点是3和6,函数返回以下的孩子。
child = [a b c 4 5 6 g h]
不要使用'crossovertwopoint'
当你有线性约束。否则,您的种群将不一定满足约束条件。
中间
(“crossoverintermediate”
),当存在线性约束时的默认交叉函数,通过对父类求加权平均值来产生子类。你可以用一个参数来指定权重,比,它可以是一个标量,也可以是一个长度的行向量变量数。默认值是所有1的向量。该函数从parent1
和parent2
使用下面的公式。
child = parent1 + rand *比*(parent2 - parent1)
如果所有的条目比在[0,1]范围内,生成的子数据集位于超立方体中,超立方体的定义是将父数据集放置在相反的顶点上。如果比是不是在这个范围内,孩子可能在于超立方体之外。如果比是标量,那么所有的孩子趴在父母之间的界线。
的默认值比在命令行上,使用语法
选项= optimoptions( 'GA', 'CrossoverFcn',... {@crossoverintermediate,比});
在哪里比
是的价值比。
启发式
(“crossoverheuristic”
)返回一个孩子,包含两个父母的谎言就行了,一个小的距离与方向从与糟糕的适应值父远越好适应值父之遥。您可以指定孩子有多远是从更好的家长通过参数比,当您选择时将出现启发式
。的默认值比是1.2。如果parent1
和parent2
是父母,和parent1
具有更好的适应度值,函数返回子对象
子= parent2 + R *(parent1 - parent2);
的默认值比在命令行上,使用语法
选择= optimoptions(“遗传算法”,“CrossoverFcn”,…{@crossoverheuristic,比});
在哪里比
是的价值比。
算术
(“crossoverarithmetic”
)创建的子元素是双亲的加权算术平均值。对于线性约束和界限,子结点总是可行的。
习惯
使您可以编写自己的交叉功能。要使用优化的应用程序指定交叉功能,
集交叉功能来习惯
。
集函数名来@myfun
,在那里myfun
是函数的名称。
如果您正在使用遗传算法
,组
选择= optimoptions(“遗传算法”,“CrossoverFcn”, @myfun);
交叉函数必须具有以下调用语法。
xoverKids = myfun(父母,选项,nvars, FitnessFcn,…)未使用,thisPopulation)
函数的参数是
父母
- 通过选择功能选择的父母行向量
选项
——选项
据nvar
-变量数量
FitnessFcn
——适应度函数
没用过
- 未使用占位符
thisPopulation
-表示当前人口的矩阵。矩阵的行数是人口规模列数是变量数。
函数返回xoverKids
——交叉分支——作为一个矩阵,其中行对应于子元素。矩阵的列的数目是变量数。
传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。
当你有边界或线性约束时,确保你的交叉函数创造出满足这些约束的个体。否则,您的种群将不一定满足约束条件。
亚群参考遗传算法的一种并行处理形式。遗传算法
目前不支持此表单。金宝app在亚种群中,每个工蜂都有许多个体。这些个体是一个亚种群。工人独立于其他工人进化亚种群,除非迁移导致一些个体在工人之间迁移。
因为遗传算法
目前不支持这种形式的并行处理,设置有没金宝app有好处PopulationSize
到的载体,或以设置MigrationDirection
,MigrationInterval
,或MigrationFraction
选项。
迁移选项指定个体如何在亚种群之间迁移。如果进行设置,则会发生迁移人口规模是长度大于1的向量。当迁移发生时,一个亚种群中最好的个体会取代另一个亚种群中最差的个体。从一个亚种群迁移到另一个亚种群的个体被复制。它们没有从源子种群中移除。
您可以控制迁移是如何发生的由以下三个字段移民选择面板:
方向(MigrationDirection
) -迁移可以在一个或两个方向发生。
如果设置方向来向前
(“前进”
),迁移就朝着最后亚群的地方。那就是ñ第一个亚种群迁移到(ñ1)个亚群。
如果设置方向来都
(“两个”
)时,ñth亚群迁移进入两个(ñ-1)th和(ñ1)个亚群。
迁移包裹在亚群的末端。也就是说,最后一个亚群迁移到第1,和第一可迁移到最后。
时间间隔(MigrationInterval
) -指定在迁移之间传递多少代。例如,如果你设置时间间隔来20.
在美国,每隔20代就有一次迁徙。
分数(MigrationFraction
) - 指定许多人亚群之间如何移动。分数指定的两个亚群的是移动的小的分数。例如,如果个人从50个人的一个亚群迁移到100个人的一个亚群和设置分数来0.1
中,个人数,该数是迁移0.1 * 50 = 5。
约束参数是指非线性约束求解器。有关算法的详细信息,请参见非线性约束求解算法。
的非线性约束算法之间的选择NonlinearConstraintAlgorithm
选项“auglag”
(增广拉格朗日)或'罚款'
(点球算法)。
初步处罚(InitialPenalty
) - 指定用于由非线性约束算法的惩罚参数的初始值。初步处罚必须大于或等于1
,并有一个默认10
。
惩罚因子(PenaltyFactor
) - 增加时,问题不就解决了所需的精度和约束不满意惩罚参数。惩罚因子必须大于1
,并有一个默认100
。
惩罚算法使用gacreationnonlinearfeasible
默认创建函数。这个创建函数使用fmincon
寻找可行的个体。gacreationnonlinearfeasible
开始fmincon
从边界内的各种初始点InitialPopulationRange
选项。(可选)gacreationnonlinearfeasible
可以运行fmincon
平行于初始点。
您可以指定调整参数gacreationnonlinearfeasible
使用下面的名称 - 值对。
的名字 | 值 |
---|---|
SolverOpts |
fmincon 选项,创建使用optimoptions 要么optimset 。 |
UseParallel |
当真正 、运行fmincon 在初始点上平行;默认是假 。 |
NumStartPts |
起始点的个数,一个正整数到总和(PopulationSize) 在的价值。 |
包括在一个单元阵列连同名称 - 值对@gacreationnonlinearfeasible
。
选项= optimoptions( 'GA', 'CreationFcn',{@gacreationnonlinearfeasible
,... 'UseParallel',真正的 'NumStartPts',20});
多目标选项定义了多目标遗传算法的参数特征。您可以指定以下参数:
ParetoFraction
- 设置个人的分数保持在第一Pareto前沿,而从更高的战线上求解器选择个人。该选项是0和1之间的标量。
在第一个帕累托前沿的个体比例可以超过ParetoFraction
。当有其他队伍太少个人的第6步出现这种情况迭代。
DistanceMeasureFcn
- 定义的句柄功能,个人的单位计算距离度量,在决策变量空间计算(基因型,也称为设计变量空间),或在功能空间(表型)。例如,默认的距离测量功能是“distancecrowding”
在功能空间,这是相同的{@ distancecrowding, '表型'}
。
“距离”衡量的是群体中每个个体的拥挤程度。选择以下:
“distancecrowding”
,或同等{@ distancecrowding, '表型'}
- 测量健身功能空间的距离。
{@ distancecrowding, '基因型'}
- 衡量决策变量空间的距离。
@distancefunction
- 使用下面的模板写一个自定义的距离函数。
函数距离= distancefunction(pop,score,options) %取消下面两行的注释,或者使用两个% y = score的组合;%表现型% y = pop;%基因型popSize =大小(y,1);个体数% numData =个体大小(y,2);维数或适应度函数距离= 0 (popSize,1);在这里分配输出%计算距离
gamultiobj
通过人口流行
,计算出的成绩为人口分数
,并在选项选项
。您的距离函数返回从群体的每个成员的距离的基准,例如在某种意义上最近邻。举个例子,编辑内置的文件distancecrowding.m
。
遗传算法
混合功能混合函数是在遗传算法终止后运行的另一个最小化函数。可以在。中指定混合函数混合功能(HybridFcn
)选项。不要在整数问题中使用。选择是
[]
-无混合函数。
fminsearch
(“fminsearch”
) -使用MATLAB®功能fminsearch
执行无约束极小化。
patternsearch
(“patternsearch”
) - 使用模式搜索到执行受限或无约束极小化。
fminunc
(“fminunc”
) -使用优化工具箱函数fminunc
执行无约束极小化。
fmincon
('fmincon'
) -使用优化工具箱函数fmincon
执行约束最小化。
确保您的混合功能接受你的问题的制约。除此以外,遗传算法
抛出一个错误。
您可以为混合函数设置单独的选项。使用optimset
为fminsearch
,或optimoptions
为fmincon
,patternsearch
,或fminunc
。例如:
hybridopts = optimoptions( 'fminunc', '显示', 'ITER', '算法', '准牛顿');
选项
如下:选项= optimoptions( 'GA',选项 'HybridFcn',{@ fminunc,hybridopts});
hybridopts
必须存在你之前设置选项
。
看到遗传算法中的混合方案的一个例子。看到当使用混合功能。
gamultiobj
混合功能混合函数是在多目标遗传算法终止后运行的另一个最小化函数。你可以指定混合函数fgoalattain
在混合功能(HybridFcn
)选项。
在用作多目标混合功能,解算器执行以下操作:
在计算解决方案的最大和每个目标函数的最小值。金宝搏官方网站对于目标Ĵ在解决方案ķ,让
计算总重量的各溶液ķ,
计算的权重为每个目标函数Ĵ在每一个解决方案ķ,
对于每一个解决方案ķ,用目标向量执行目标达成问题Fķ(Ĵ)和加权矢量p(Ĵ,ķ)。
有关更多信息,请参见Deb第9.6节[3]。
停止条件决定了算法终止的原因。您可以指定以下选项:
一代又一代(MaxGenerations
) -指定遗传算法执行的最大迭代次数。默认值是100个* numberOfVariables
。
时间限制(MAXTIME
) -指定遗传算法在停止前运行的最大时间(以秒为单位),由抽搐
和TOC
。这个限制在每次迭代之后执行,所以遗传算法
当迭代花费大量时间时,可能会超过限制。
健身极限(FitnessLimit
) - 该算法停止,如果最好的适应度值小于或等于的值健身极限。不适用于gamultiobj
。
摊位代(MaxStallGenerations
) -如果最优适应度函数值的平均相对变化超过,算法停止摊位代小于或等于功能公差。(如果失速测试(StallTest
)选项“geometricWeighted”
,则测试为几何加权平均相对变化。)对于非线性约束的问题,摊位代适用于子问题(见非线性约束求解算法)。
为gamultiobj
中,如果在相对变化的几何平均传播帕累托解决方案的上金宝搏官方网站摊位代小于功能公差,而最后的利差比最后一次的平均利差要小摊位代,则算法停止。几何平均系数为1/2。价差是帕累托前沿的运动的度量。看到gamultiobj算法。
失速时间限制(MaxStallTime
) - 该算法停止,如果在对一个时间间隔的最佳适合度值通过指定没有改善以秒失速时间限制,由抽搐
和TOC
。
功能公差(FunctionTolerance
) -如果最优适应度函数值的平均相对变化超过,算法停止摊位代小于或等于功能公差。(如果StallTest
选项“geometricWeighted”
,则测试为几何加权平均相对变化。)
为gamultiobj
中,如果在相对变化的几何平均传播帕累托解决方案的上金宝搏官方网站摊位代小于功能公差,而最后的利差比最后一次的平均利差要小摊位代,则算法停止。几何平均系数为1/2。价差是帕累托前沿的运动的度量。看到gamultiobj算法。
约束宽容(ConstraintTolerance
) - 的约束宽容不用作停止标准。它被用来确定关于非线性约束的可行性。同时,MAX(开方(EPS),ConstraintTolerance)
根据线性约束确定可行性。
看到代集最大数量的一个例子。
输出功能是函数遗传算法调用在每一代。与所有其他解算器,一个遗传算法
输出函数不仅可以读取算法的状态值,还可以修改这些值。
要使用优化的应用程序指定输出功能,
在命令行,set
选择= optimoptions(“遗传算法”,“OutputFcn”, @myfun);
对于多输出功能,输入功能把手的单元阵列:
选择= optimoptions(“遗传算法”,“OutputFcn”{@myfun1, @myfun2,…});
要查看可用于编写自己的输出函数的模板,请输入
编辑gaoutputfcntemplate
在MATLAB命令行。
对于一个示例,请参见自定义输出函数的遗传算法。
你的输出功能必须具备以下调用语法:
[选项,optchanged] = myfun(选项、状态标志)
MATLAB传递选项
,状态
和旗
数据到输出函数,然后输出函数返回状态
,选项
和optchanged
数据。
为了停止迭代,设置state.StopFlag
到非空字符向量,例如'Y'
。
输出功能具有以下输入参数:
选项
——选项
状态
- 包含有关当前一代的信息结构。国家结构描述了状态
。
旗
-算法的当前状态:
'在里面'
——初始化状态
'ITER'
- 迭代状态
'打断'
的子问题的迭代“auglag”
非线性约束算法。当旗
是'打断'
:
的值状态
场施加于子问题的迭代。
遗传算法
不接受的变化选项
,忽略了optchanged
。
该state.NonlinIneq
和state.NonlinEq
字段不可用。
“完成”
——最终状态
传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。
输出函数返回下列参数遗传算法
:
状态
- 包含有关当前一代的信息结构。国家结构描述了状态
。为了停止迭代,设置state.StopFlag
到非空字符向量,例如'Y'
。
选项
-由输出函数修改的选项。这个参数是可选的。
optchanged
-布尔标志,指示更改到选项
。改变选项
对于随后的迭代,集optchanged
来真正
。
不小心改变状态结构可导致不一致的或错误的结果。通常情况下,可以实现通过突变或交叉功能,而不是改变在绘图功能或输出功能状态结构相同或更好的状态修改。
遗传算法
输出函数可以改变状态
结构(见国家结构)。在这种结构改变的值时要小心,因为你可以通过不一致的数据回遗传算法
。
如果输出结构更改人口
场,则一定要更新分数
场,也可能是请接受我最美好的祝愿,
,NonlinIneq
,或NonlinEq
字段,以便它们包含一致的信息。
更新分数
改变后场人口
场,首先计算群体的适应度函数值,则计算为人口健身缩放。看到健身缩放选项。
水平显示('显示'
)指定在遗传算法运行时在命令行显示多少信息。可用的选项有
从
(“关”
) -不显示输出。
迭代
('ITER'
) -信息显示在每个迭代。
诊断
(“诊断”
) -信息显示在每个迭代。此外,诊断还列出了一些问题信息和已从默认设置更改的选项。
最后
('最后'
) - 原因是显示停止。
都迭代
和诊断
显示以下信息:
一代
代数量
f-count
-适应度函数评估的累积次数
最好的f (x)
- 最佳适应度函数值
平均数F(X)
- 平均适应度函数值
摊位代
-代数自上次改进后的适应度函数
当指定了非线性约束函数时,迭代
和诊断
不显示平均数F(X)
,但将附加地显示:
最大约束
-最大非线性约束违反
的默认值水平显示是
从
在优化app中
'最后'
在选择使用创建optimoptions
您可以选择以串行、并行或向量化的方式评估适应度和约束函数。选项中提供了这些选项用户函数评价部分的选项窗格中优化应用程序,或通过设置“UseVectorized”
和“UseParallel”
选择与optimoptions
。
当评估健身和约束功能(“UseVectorized”
)是在串行(假
),遗传算法
在遍历种群时,每次只对一个个体调用适应度函数。(在命令行,假设是这样“UseParallel”
是否为其默认值假
。)
当评估健身和约束功能(“UseVectorized”
)是矢量(真正
),遗传算法
一次对整个人群调用适应度函数,即,只需调用一次适应度函数。
如果有非线性约束,适应度函数和非线性约束都需要为了实现矢量化的算法来计算的矢量的方式。
看到矢量化的健身功能的一个例子。
当评估健身和约束功能(UseParallel
)是并行(真正
),遗传算法
使用您建立的并行环境(参见如何使用全局优化工具箱并行处理)。在命令行,setUseParallel
来假
计算顺序。
不能同时使用向量化计算和并行计算。如果设置“UseParallel”
来真正
和“UseVectorized”
来真正
,遗传算法
评估以矢量方式您的健身和约束功能,而不是平行的。
健身和约束函数的评估方式
UseVectorized =假 |
UseVectorized =真正 |
|
---|---|---|
UseParallel =假 |
串行 | 矢量化 |
UseParallel =真正 |
平行 | 矢量化 |