文章 "种群优化算法:树苗播种和成长(SSG)算法"

 

新文章 种群优化算法:树苗播种和成长(SSG)算法已发布:

树苗播种和成长(SSG)算法的灵感来自星球上最具韧性的生物之一,在各种条件下都表现出杰出的生存能力。

该算法是少数几个没有作者明确讲述的算法之一(仅提供一般规定和思路)。 由作者提出的算法操作符,算法也没有现成的程序指令实现。 没有关于子树和父树、及其交互的明确说明。 对于操作符的执行顺序没有要求,任何用户都可以更改其顺序,从而能获得更好的幼苗。

从广义上讲,SSG 并非是一种优化算法,它是一组通用规则,旨在补充其它算法,从而提高优化品质。 换言之,SSG 是任何种群进化算法的附加组件,如此我就有了想象的空间,并有机会尝试优化算法的特定实现。 我在编写以前的算法时应用了自己的一些想法和经验,并使用它们与 SSG 配合工作。 实验结果如下,供读者判断。

为了开始理解算法,我们需要将这棵树想象为优化代理者。 一棵树是优化问题的解,其中每个枝杈都是问题的优化参数。 图例 1 提供了子树和父树的抽象和艺术描绘图。 树干是一组要优化的参数。 每个枝杈都是一个单独的优化参数,其中枝杈的长度受相应参数的允许值范围的限制。 枝杈的方向无关紧要,仅在图中显示来高亮显示它们的差异。

树

作者:Andrey Dik

 

寻找局部极值的最佳算法是什么?

粗略地说,我们需要生成一个参数列表,这些参数最好能落入局部极值(顶点)。

以刺猬为例,显示其针尖的坐标。

 

请告诉我,是否有任何优化算法具有以下特点:

当参数数量较多时,只选择部分参数;

仅使用遗传算法 或可被遗传算法替代的算法对所选参数进行优化;

为当前迭代选择有效参数的算法并不重要,允许改变优化的范围和步骤

 
fxsaber #:

寻找局部极值的最佳算法是什么?

粗略地说,我们需要生成一个参数列表,这些参数最好能落入局部极值(顶点)。

以刺猬为例,显示其针尖的坐标。

对于任何全局搜索任务,表格顶端的任何算法都能发挥最佳效果。如果您知道函数是平滑或离散的,您可以单独选择最合适的算法,或者根据问题中优化参数的数量选择最合适的算法。

通常情况下,不要将问题设置为必须找到局部极值,因为在大多数实际问题中,局部极值的数量是未知的(如果不是这样,使用分析方法会更容易),而全局极值的数量是已知的--一个(如果有几个全局极值的值相同,就相当于它是一个)。这就是为什么问题的设置通常会使函数尽可能具有单调性,误差最小化就是一个例子。

在一般情况下,我不知道有什么算法可以解决搜索局部的问题,而且很少有针对特定问题编写特定算法的权宜之计。在这种情况下,我会考虑如何表示 FF 来解决问题。可能会有不同的方法,比如使用 AO 作为聚类的附加功能。解决问题的另一种方法是将 FF 分成假设的 "层",从全局最小值到全局最大值(必须事先找到),然后按顺序检查每一层,也就是说,您需要为 AO 制作一个批处理任务管理器。

总之,我要让你失望了--目前还没有解决搜索局部极值问题的通用算法。修改 FF 比制作特殊算法更容易。

 
Aliaksandr Hryshyn 遗传算法 或可由遗传学替代的算法对所选参数进行优化;

3. 为当前迭代选择有效参数的算法无关紧要,允许改变优化的范围和步骤

1.好吧,AO 并不关心向其提交多少参数和什么参数进行优化,因此您可以向 AO 提交所有参数,也可以不提交所有参数。

2.2. 您可以单独、联合、顺序和组合应用任何算法。我尽量使文章中的算法统一。

3.原则上,所介绍的任何算法都可以在优化过程中直接调整。您只需修正初始化,使累积种群不被重置。例如,可以根据已过的时间减少(或增加)优化参数的步长。

 
Andrey Dik #:

总之,我会让你失望的--没有任何算法可以解决一般形式的搜索局部极值问题。修改 FF 比制作特殊算法更容易。

谢谢。当涉及大量内核时,我通过强制中断优化来间接找到局部极值。粗略地说,Tester 中有 20 个代理,我在经过 2000 次优化后中断优化。

 
fxsaber #:

谢谢。当涉及大量内核时,我通过强制中断优化来间接找到本地问题。粗略地说,测试器中有 20 个代理,我在通过 2000 次后中断优化。

这绝对是反科学的! )))))不过很聪明。

我在想,有一些算法的 "团块化 "程度很高,当种群倾向于按地域划分为不同群体时,例如 IWO、COA、ABC、BFO,这些算法的种群可以通过测量代理之间的欧氏距离来分析代理团块(AO 中的逻辑搜索单元称为代理),即搜索代理之间距离最小的代理群体。

您还可以尝试在 COA、HS 或 MA 等回滚(当一个代理从同一位置向不同方向反复尝试搜索时)算法中设置一个尝试计数器,通过多次迭代对群体状态进行切分,尝试次数最多的代理将成为局部极值。MA 和 BFO 本身就有这样一个计数器。

也就是说,我说过没有精确的方法来搜索局部极值(搜索全局极值在这方面可以被认为是 "精确的"),但你可以像我上面描述的那样进行近似搜索。要获得精确的解决方案,您需要知道 FF 的差异信息。


ZЫ. 向所有对此感兴趣的人提出一个有趣的问题:局部极值和全局极值(不考虑它们在 FF 值上的差异)之间有什么区别?

ZZY 在回答了第一个问题之后,许多问题就会自行消失。

 
Andrey Dik #:

大约可以如上所述进行搜索。

不幸的是,我在这方面无能为力,所以我对近似但现成的解决方案很感兴趣。

ZЫ.对于所有对这个问题感兴趣的人来说,有一个有趣的问题:局部极值和全局极值(不考虑它们在 FF 值上的差异)之间有什么区别?

如果我们将优化结果视为一组通行证,那么在对输入计算的通行证空间进行聚类后,局部通行证的蛛丝马迹就会显现出来。在每个聚类中,我们都能实现 "狭义 "优化。

 
fxsaber #:

寻找局部极值的最佳算法是什么?

粗略地说,我们需要生成一个参数列表,这些参数最好能落入局部极值(顶点)。

以刺猬为例,显示其针尖的坐标。

那么你需要找到刺猬的所有针尖? 还是一根,任何一根,但正好是一根?
 
mytarmailS #:
那么,你需要找到刺猬身上所有的针吗? 还是只找一根,随便一根,但要找对针?

几根触角

 
fxsaber #:

不幸的是,我完全无能为力,所以我对近似但现成的解决方案很感兴趣。

如果我们将优化的结果视为一组传递,那么在对输入的计数传递空间进行聚类后,局部传递的提示就会显现出来。在每个聚类中,我们都可以实现 "狭义 "优化。

通过欧氏距离聚类(也可以是柯霍宁聚类),可以看到局部参数附近的优化参数组。