利用遗传算法求解全局最小值与局部最小值

寻找全局最小值

有时,优化的目标是找到一个函数的全局最小值或最大值,即函数值在搜索空间中任何其他点上都更小或更大的点。然而,优化算法有时会返回一个局部最小值,即函数值小于附近点,但可能大于搜索空间中遥远点的值。遗传算法有时可以通过正确的设置来克服这一缺陷。

以下面的函数为例

f x ) 经验值 x One hundred. ) 2 ) x One hundred. 经验值 1 ) + x One hundred. ) x 102 ) x > One hundred.

下图显示了该函数的绘图。

生成图形的代码

这个函数有两个局部极小值,一个在x= 0,其中函数值为-1,另一个为x= 101,其中函数值为1 - 1 /e.由于后一个值较小,全局最小值出现在x= 101

在示例上运行遗传算法

要在这个例子上运行遗传算法,

  1. 将以下代码复制并粘贴到MATLAB中的一个新文件中®编辑器。

    函数y = two_min (x)如果y = -exp(-(X /100).^2);其他的Y = -exp(-1) + (x-100)*(x-102);结束
  2. 将文件保存为two_min.m在MATLAB路径的一个文件夹中。

  3. 在优化应用中,

    • 适应度函数@two_min

    • 数量的变量1

    • 点击开始

遗传算法返回一个非常接近局部最小值的点x= 0

下面的自定义图显示了为什么算法会找到局部最小值而不是全局最小值。该图显示了每一代个体的范围和种群的平均值。

创建图形的代码

注意所有的个体都在-70到70之间。种群从不探索全球最小值附近的点x= 101

使用命令行函数运行此问题:

选择= optimoptions (“遗传算法”“PlotFcn”, @gaplot1drange);x = ga (@two_min, 1 ,[],[],[],[],[],[],[], 选项)

一种使遗传算法探索更大范围点的方法,也就是增加种群的多样性,就是增加最初的范围.的最初的范围不需要包括点吗x= 101,但它必须足够大,以便算法生成附近的个体x= 101.集最初的范围(-10; 90)如图所示。

然后单击开始.遗传算法返回一个非常接近101的点。

这一次,自定义图显示了更广泛的个人范围。从早期开始就有个体在101附近,种群均值开始收敛到101。

使用命令行函数运行此问题:

选择= optimoptions (“遗传算法”“PlotFcn”@gaplot1drange,...“InitialPopulationRange”, (-10; 90));x = ga (@two_min, 1 ,[],[],[],[],[],[],[], 选项)

相关的话题