Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求解TSP问题的GA算法_Algorithm_Artificial Intelligence_Genetic - Fatal编程技术网

Algorithm 求解TSP问题的GA算法

Algorithm 求解TSP问题的GA算法,algorithm,artificial-intelligence,genetic,Algorithm,Artificial Intelligence,Genetic,我建立了一个GA算法来解决TSP问题 这是诺维格书(AIAMA)中的一个练习。他建议我们阅读拉拉纳加关于陈述等问题的观点。我在那里学习了一些交叉算子和突变,并尝试了其中的一些,看看哪个更适合我。我还详细阐述了基于每条路径成本的适应度函数 嗯,尽管我对我的算法设计有很多疑问,但我以前从未使用过人工智能,所以我不知道我的方法是否适用于GAs 以下是我所做的: 我采用了路径向量(我的初始总体) 然后在每个循环中,我通过增加成本顺序来组织这个向量,在这个向量中取最佳的X路径,并删除其他路径 然后我应用X

我建立了一个GA算法来解决TSP问题

这是诺维格书(AIAMA)中的一个练习。他建议我们阅读拉拉纳加关于陈述等问题的观点。我在那里学习了一些交叉算子和突变,并尝试了其中的一些,看看哪个更适合我。我还详细阐述了基于每条路径成本的适应度函数

嗯,尽管我对我的算法设计有很多疑问,但我以前从未使用过人工智能,所以我不知道我的方法是否适用于GAs

以下是我所做的:

我采用了路径向量(我的初始总体)

然后在每个循环中,我通过增加成本顺序来组织这个向量,在这个向量中取最佳的X路径,并删除其他路径

然后我应用XOver和Mutation(以一定的速率),并将它们放在向量的旧删除值的位置

然后我做同样的事情(顺序向量-提取最佳值等)

继续这样做直到它稳定下来

这是一个好方法吗?如果不是的话,给我一些北。因为当我选择了最好的而没有保留它们时(只是通过Xover和变异从它们中创建了一个全新的流行音乐),我没有得到好的结果。这样(保留最好的——在一些实验中,我只保留最好的一个)我得到了更好的结果,并且结果总是收敛得很快

状态表示法:对于状态表示法,我选择使用路径表示法(我从一开始就在使用它,在阅读Larrañaga et all之后决定继续使用它), 它是这样的:如果我们有,比方说,5个城市,参观第一个城市,然后第二个,然后第三个。。。我们的路径表示是(1,2,3,4,5)

初始人口生成:实际上,我生成随机点来表示城市(这就是书中要求我做的,在封闭的正方形中生成随机点)-但为了进行比较,我生成了一个总体,并在比较结果时坚持使用它-我认为如果我不坚持使用一个特定的总体,我就不会对我的改进有太多了解

最合适的个人:最合适的个人是旅行成本最高的人。(我不知道我是否应该在这个问题上使用其他东西作为参数

交叉:我尝试了一些交叉算子,并将我的reuslts与书中的一个进行了比较,最后使用了一个顺序交叉算子(Larrañaga等人(1999)): 此交叉从两个父路径中随机选取两个切割(形成子路径),然后从另一个父路径复制路径的其余部分(该子路径中尚未访问的城市)(从第二个切割开始,而不是在位置“0”)添加它们在另一个父路径中出现的城市

示例:路径(12345)(34215)选择子路径(234)和(421)
作为后代(5 | 2 3 4 | 1)(5 | 4 2 1 | 3)首先,避免所有这些缩写(GA、TSP、XOver)。这很难阅读,有些人可能不知道你在说什么。 遗传算法的第一个问题是如何选择初始种群,如何进行交叉,如何进行变异。第二个问题是,对描述的天真理解可能很糟糕

对你来说,最合适的个体是那些成本已经比较高的个体。你可以说,最好选择最多样化的个体,即那些更有可能探索问题空间不同部分的个体。描述你如何进行以下操作:

  • 状态表示法:只是为了确保
  • 初始种群生成:非常重要。可能有可用于此步骤的资料,因为这在局部搜索算法中很常见
  • 最适合的个人:我建议你尝试在这里玩得更多。尝试不同的策略。你寻找的是最适合繁殖的个人,而不是问题的整体解决方案
  • 交叉:你是如何做到的
  • 变异:变异的目标是避开问题空间的当前区域,你可以创造一个成本非常高的个体。在下一步使用你当前的算法时,他将在你排序时被抛弃
您还需要评估您的解决方案是如何随着运行时间而改进的。例如,您提供的不是
n
迭代
100n
,而是解决方案是否变得更好,改进程度如何?当算法停止时,上一代的个体彼此有多相似,等等

另一个问题,你是想解决固定拓扑还是可变拓扑的问题

编辑: 您使用的是已发布的算法,因此问题似乎不在特定操作上。对于适合度,请坚持使用路径成本。您说

因为当我选择了最好的而没有保留它们时(只是通过Xover和变异从它们中创建了一个全新的流行音乐),我没有得到好的结果。这样(保留最好的-在一些实验中,我只保留了最好的)我得到了更好的结果,结果总是收敛得很快

你应该留住最健康的人和他们的孩子。这遵循着一条邪恶的自然法则,只有最健康的人才有权繁衍后代。必须替换的是最不健康的人

有3个参数可以调整:有孩子的最适合个体的比例(以及将被淘汰的个体数量)、突变概率和跑步次数

为了测试算法的性能,您可以通过迭代对最佳解决方案进行采样,即每次
t
迭代都可以节省较低的成本。一旦绘制出来,它应该如下所示:

I