【问题标题】:Genetic Algorithm Implementation for weight optimization权重优化的遗传算法实现
【发布时间】:2025-12-01 23:10:01
【问题描述】:

我是一名数据挖掘专业的学生,​​我有一个问题希望你们能给我一些建议:

我需要一个优化三个输入之间权重的遗传算法。权重必须是正值,并且它们的总和必须为 100%。

困难在于创建满足总和为 100% 要求的编码。

作为第一遍,我认为我可以简单地创建一个带有一系列数字(例如 4、7、9)的 chrom。每个权重只是它的数量除以所有染色体数量的总和(例如 4/20=20%)。

这种编码方法的问题在于,对染色体的任何改变都会改变所有染色体数目的总和,从而导致所有染色体权重的改变。这似乎大大限制了 GA 开发解决方案的能力。

您能就如何解决这个问题提供任何建议吗?

我已经阅读了有关实值编码的内容,并且我确实有一个 GA 的实现,但它会给我的权重可能不一定会达到 100%。

【问题讨论】:

  • 我只会提到遗传算法基本上是最后的优化方法。在您尝试凸出您的问题或开发出良好的启发式方法之后,可以尝试一些东西。不要被它们的“生物灵感”所迷惑,它们是非常低效的算法,需要进行无休止的手动调整。
  • 对 GA 来说唯一的好处是他们有一个时髦的名字。如果它们被称为癌症优化器,没有人会使用它们。

标签: algorithm genetic-algorithm


【解决方案1】:

如果您需要总和保持不变,那么在不更改至少一个值的情况下更改一个值在数学上是不可能的。

进行更改的一种方法正是您所建议的:重量 = 价值/总和。在这种情况下,当您更改一个值时,要弥补的差异将分布在所有其他值中。

另一个极端是只换对。从一组加到 100 的值开始,每当一个值发生变化时,将另一个值更改相反的数量以保持总和。另一个可以随机选择,也可以按规则选择。我预计这会比第一种方法需要更长的时间来收敛。

如果您的染色体只有 3 个值,那么从数学上讲,这是您仅有的两个选择。

【讨论】:

  • 完全正确。如果 x + y + z = 1,并且 x 发生变化,则 y 或 z 必须变为 1!
  • 阿雪莉,非常感谢。我同意更改一个号码会改变另一个号码。我喜欢你的两种解决方案,尤其是后一种更适合我的问题。