我正在实施带有81个城市的遗传算法的TSPTW(带时间窗的旅行推销员),我采用了以下步骤:
mutation prob=0.03
population size=100
-Generate random population according to the value of population size intialized
-Sort the generated population
-Looping for populations and determine two parents by roulette selection, apply crossover on the parents, get child and add it to children list
-I am saving the best solution over the algorithm
-Sort the Children, replace worst tour in populations with best one of children
until no good children is existing is better than worst solution in populations
-loop (1 to population size)in all populations and Apply mutation of each worst solution with solution i , if the mutated solution is better than the worst solution of children. I insert it in populations in its place according to its fitness function and remove the worst one.
我找不到一个好的结果,我把它运行到特定的高时间,但我发现有时候它会遇到解决方案并且无法获得更好的结果。 我改变了
参数(种群大小= 20000,1000,100,突变 概率= 0.03,0.02,...)
我也用循环交叉和有序交叉测试了它
我想知道,我的步骤是对的吗?如何正确指定种群大小和变异概率?
答案 0 :(得分:2)
你的算法可能太精英了。它只允许更好的解决方案进入您的人口。我认为它在某些时候会由所有类似的人组成。没有多样性,你的精英替代只有少量的突变才能引入新的遗传物质。
我建议只使用elitism,因为你只能让上一代最好的个体存活下去。其余的人都应该被新一代所取代。
或者你可以选择我们发明的后代选择方法。为了每个孩子的生存,它必须比其父母更好。否则他们将被丢弃,并选择一对新的父母来生产一个新的孩子。你循环生成新的孩子,直到你有足够的人来填补新的人口。然后你替换你的人口并重新开始。后代选择遗传算法通常在其可以实现的质量方面优于遗传算法。它在HeuristicLab中实现。如果您打开VRPTW并且只允许一辆车,您应该能够为TSPTW建模。
另一种选择是使用基于轨迹的算法,例如基于禁忌搜索,例如统一禁忌搜索。由于时间窗口解决方案并且达到不同的局部最优值,可能需要约束松弛。