我正在为GA旅行推销员问题工作,我正在使用精英选择。但要做到这一点,我需要通过chromosom的健身值对人口排序进行排序。这个过程正在减慢我的应用程序。因为当新的子项添加到填充中时,线程会迭代地调用此过程。所以我想用另一种方法让一些染色体具有更高的适应值。我怎样才能做到这一点?
我获得精英的代码:
Tour[] ElitChromosoms()
{
Array.Sort(population);
Tour[] elits = new Tour[population.Length / 2];
Array.Copy(population, elits, elits.Length);
return elits;
}
答案 0 :(得分:1)
某些选择技巧需要排序,但还有其他技术不需要排序。您可以通过使用它们来提高程序的效率。你可以使用例如q-tournament。
答案 1 :(得分:0)
这不是GA问题。
然而,您(我认为)的问题是您的新人口被放入未列出的列表或数组中。如果您将它们添加到排序列表中,那么您只需要获得精英的顶部/底部x。
就插入时间而言,这应该更加昂贵,但仍然比从头开始排序更快。