如何在 GA(遗传算法)中更快地获得精英染色体?
How can I get elit chromosoms much faster in GA(Genetic Algorithms)?
我正在研究旅行商问题的遗传算法,我正在使用精英选择。但要做到这一点,我需要根据染色体的适应值对种群顺序进行排序。这个过程正在减慢我的 application.Because 当新的孩子添加到人口中时,线程迭代地调用这个过程。所以我想用另一种方法让一些染色体具有更高的适应值。我怎样才能做到这一点?
我获得精英的代码:
Tour[] ElitChromosoms()
{
Array.Sort(population);
Tour[] elits = new Tour[population.Length / 2];
Array.Copy(population, elits, elits.Length);
return elits;
}
这不是特定的 GA 问题。
但是,您遇到的问题(我认为)是您的新人口未排序地放在列表或数组中。如果您将它们添加到排序列表中,那么您只需要为您的精英获取 top/bottom x。
就插入时间而言,这应该更昂贵,但仍然比从头开始排序更快。
有些选择技术需要排序,但有些则不需要。您可以通过使用它们来提高程序的效率。您可以使用例如 q-tournament。
我正在研究旅行商问题的遗传算法,我正在使用精英选择。但要做到这一点,我需要根据染色体的适应值对种群顺序进行排序。这个过程正在减慢我的 application.Because 当新的孩子添加到人口中时,线程迭代地调用这个过程。所以我想用另一种方法让一些染色体具有更高的适应值。我怎样才能做到这一点?
我获得精英的代码:
Tour[] ElitChromosoms()
{
Array.Sort(population);
Tour[] elits = new Tour[population.Length / 2];
Array.Copy(population, elits, elits.Length);
return elits;
}
这不是特定的 GA 问题。
但是,您遇到的问题(我认为)是您的新人口未排序地放在列表或数组中。如果您将它们添加到排序列表中,那么您只需要为您的精英获取 top/bottom x。
就插入时间而言,这应该更昂贵,但仍然比从头开始排序更快。
有些选择技术需要排序,但有些则不需要。您可以通过使用它们来提高程序的效率。您可以使用例如 q-tournament。