我已经习惯了遗传算法(GA)中的每个参数都可以表示为二进制字符串的方法,该二进制字符串可以在指定的时间间隔内编码为实数值。
我目前正在编写差分进化(DE)代码,而且我还没有读过像GA中那样被控制的参数区间,所以我对这个程序有点困惑。这是我的问题:
1)是否有任何控制DE参数间隔的内容?我意识到任何人都可以为他们的目的修改DE,但我很好奇它是如何传统使用的。
2)我看到你如何指定初始随机化群体的间隔,但有没有限制突变和交叉操作的间隔?
3)如果参数没有任何界限,那么突变和交叉操作是否可以自由探索所有空间?
感谢您的时间。
答案 0 :(得分:3)
差分进化滤波器通过将两个总体成员之间的加权差矢量与第三个成员相加来生成新的参数矢量。如果得到的矢量产生比预定的总体成员更低的目标函数值,则新生成的矢量替换与其进行比较的矢量;否则,保留旧矢量。信息here。
1)是否有任何控制DE参数间隔的内容?我意识到任何人都可以为他们的目的修改DE,但我很好奇它是如何传统使用的。
在DE中你有他们所谓的策略。有很多:
1 --> DE/best/1/exp 6 --> DE/best/1/bin
2 --> DE/rand/1/exp 7 --> DE/rand/1/bin
3 --> DE/rand-to-best/1/exp 8 --> DE/rand-to-best/1/bin
4 --> DE/best/2/exp 9 --> DE/best/2/bin
5 --> DE/rand/2/exp else DE/rand/2/bin
您可以在Matlab here中找到代码。
2)我看到你如何指定初始随机化群体的间隔,但有没有限制突变和交叉操作的间隔?
突变和交叉受到您选择的策略的限制。
3)如果参数没有任何界限,那么突变和交叉操作是否可以自由探索所有空间?
理论上,如果您在所有解决方案空间内启动限制,DE将找到全局最优。但是,根据我的经验,我注意到解决方案空间中的初始参数和限制对于获得快速响应非常重要。简而言之,如果您对解决方案的位置有一点了解,那么如果您在这些值中划分参数,DE将会表现得更好。