我是一名数据挖掘学生,我有一个问题,我希望你们能给我一些建议:
我需要一种遗传算法来优化三个输入之间的权重。权重需要为正值,它们需要总和为100%。
难点在于创建满足100%要求总和的编码。
作为第一关,我认为我可以简单地用一系列数字创建一个chrom(ex.4,7,9)。每个权重只是它的数字除以所有染色体数字的总和(例如4/20 = 20%)。
这种编码方法的问题在于染色体的任何变化都会改变所有染色体数量的总和,从而导致所有染色体重量的变化。这似乎显着限制了GA发展解决方案的能力。
你能就如何处理这个问题提出任何建议吗?
我已经阅读了有关实际编码的编码,并且我确实有GA的实现,但它会给我权重,可能不一定加起来为100%。
答案 0 :(得分:2)
如果需要总和保持不变,在数学上不可能在不改变至少一个值的情况下更改一个值。
进行更改的一种方法正是您所建议的:weight = value / sum。在这种情况下,当您更改一个值时,要组成的差异将分布在所有其他值中。
另一个极端是只改变对。从一组添加到100的值开始,每当1个值更改时,以相反的量更改另一个值以保持总和。另一个可以随机挑选,也可以通过规则挑选。我希望这比第一种方法需要更长的时间才能收敛。
如果您的染色体长度只有3个值,那么从数学上来说,这些是您唯一的两个选择。