我正在创建一个遗传算法框架,并且有一个包含TournamentEvolutionStrategy对象的种群类,以便可以插入不同的锦标赛类型和进化策略。

目前,我已经对其进行了设置,以便通过从种群中传入EvolutionStrategy对象来创建新的Population对象-

EvolutionStrategy strategy = new BasicStrategy(this);


BasicStrategy构造函数中

Population pop;
public BasicStrategy(Population pop)
{
    this.pop = pop;
}


我对此有两个问题

1)这是否创建适当的参考变量,从而允许在EvolutionStrategy中立即访问总体更新,还是应该使用某种形式的同步?

2)有更好的方法吗?在Population中具有策略的引用变量,在Strategy中具有总体的引用变量对我来说似乎是浪费。

最佳答案

没事
我认为您应该有一个额外的类,例如EvolutionAlgorithm,用于在其中分别存储人口(根据正在演化的对象)和EvolutionStrategy。当您要扩展种群时,您只需调用以种群为参数的evolutionStrategy方法即可(战略模式)。我认为EvolutionStartegy不需要存储人口。人口也可以没有发展战略就有意义。

08-16 18:40