【发布时间】:2023-03-16 05:49:01
【问题描述】:
我有一个带有适应度函数的 GA,它可以评估为负值或正值。为了这个问题,让我们假设函数
u = 5 - (x^2 + y^2)
在哪里
x in [-5.12 .. 5.12]
y in [-5.12 .. 5.12]
现在在 GA 的 selection phase 中,我使用的是 simple roulette wheel。由于能够使用simple roulette wheel,我的适应度函数必须对群体中的具体案例是积极的,我开始寻找扩展解决方案。最自然的似乎是linear fitness scaling。它应该非常简单,例如查看this implementation。但是,我即使在线性缩放之后也得到了负值。
例如对于上述函数和这些适应度值:
-9.734897 -7.479017 -22.834280 -9.868979 -13.180669 4.898595
线性缩放后我得到这些值
-9.6766040 -11.1755111 -0.9727897 -9.5875139 -7.3870793 -19.3997490
相反,我想将它们缩放为正值,以便在下一阶段进行轮盘赌选择。
我在这里肯定做错了什么。我应该如何解决这个问题?
【问题讨论】:
-
u = 5 - (2*5.12^2) 的最小可能值。为什么不把这个添加到你的 u 中?
-
据我了解,这样做会破坏种群内的适应度分布,并且会为下一代挑选不同/错误的染色体。来自我帖子中的链接:“我们希望在种群中的最大适应度个体与平均种群适应度之间保持一定的关系。”
-
您是否完全使用了您链接到的页面中的代码?如果你仔细阅读,他们会说这段代码确实会产生负值,你仍然需要调整 f'_min 的偏移量。
-
是的,我使用了我链接到的页面中的算法,但是将其翻译为 R。据我了解,在该算法中,else 子句(/* 如果 smin 在缩放时变为负数 */ ) 已经应该处理这个了,不是吗?
-
好吧,“f'_min 的变化”就是我的建议。
标签: algorithm optimization genetic-algorithm