人工智能实验二:基于TSP遗传算法的旅行家问题求解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

遗传算法求TSP问题

遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它最初由美国Michigan大学J.Holland教授于1975年首先提出来的,并出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J.Holland教授所提出的GA通常为简单遗传算法(SGA)。

遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

遗传算法特点

遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,主要有以下特点:

1、遗传算法以决策变量的编码作为运算对象。传统的优化算法往往直接决策变量的实际值本身,而遗传算法处理决策变量的某种编码形式,使得我们可以借鉴生物学中的染色体和基因的概念,可以模仿自然界生物的遗传和进化机理,也使得我们能够方便的应用遗传操作算子。

2、遗传算法直接以适应度作为搜索信息,无需导数等其它辅助信息。

3、遗传算法使用多个点的搜索信息,具有隐含并行性。

4、遗传算法使用概率搜索技术,而非确定性规则。

/*********************************************************************** *遗传算法解决TSP问题*

*code by 小白at July.30 *

***********************************************************************/ def.h

-------------------------------

#ifndef _GENERATION_AMOUNT

#define _GENERATION_AMOUNT 201 //每一代的生存数

#define _CITY_AMOUNT 10 //城市数,等于基因数

//#define _XCHG_GENE_AMOUNT_WHEN_MIX 2 //每次杂交所交换的碱基数量

#define _TIMES 50 //定义进化次数

#define _DISP_INTERV AL 5 //每隔多少次显示基因中的最高适应度

#define _CONTAINER std::vector //定义个体基因容器类型

#define _CONTAINER_P std::vector //定义适应度容器类型

#define _P(a,x,y) *(a+(x)+(y)*_CITY_AMOUNT)

#define _P_GENE_ABERRANCE 10 //变异概率1%

#define _P_GENE_MIX (_GENERATION_AMOUNT-1)/2 //杂交次数

#define _INFINITE 100000

typedef int DISTANCE; //距离矩阵的数据存储类型

#endif

___________________________________________________________________________ TSP.cpp

____________________________________________________________________________ #include

#include

#include

#include

#include

#include "def.h"

#include "TSP.h"

void main()

{

const static DISTANCE distance[][_CITY_AMOUNT]

= {

0, 1, 4, 6, 8, 1, 3, 7, 2, 9,

1, 0, 7, 5, 3, 8, 3, 4, 2, 4,

4, 7, 0, 3, 8, 3, 7, 9, 1, 2,

6, 5, 3, 0, 3, 1, 5, 2, 9, 1,

8, 3, 8, 3, 0, 2, 3, 1, 4, 6,

1, 8, 3, 1, 2, 0, 3, 3, 9, 5,

3, 3, 7, 5, 3, 3, 0, 7, 5, 9,

7, 4, 9, 2, 1, 3, 7, 0, 1, 3,

2, 2, 1, 9, 4, 9, 5, 1, 0, 1,

9, 4, 2, 1, 6, 5, 9, 3, 1, 0

}; //城市间的距离矩阵

//distance[i][j]代表i城市与j城市的距离

/*

const static DISTANCE distance[][_CITY_AMOUNT]

={

0, 1, 4, 6, 8, 1, 3, 7, 2, 9, 7, 3, 4, 5, 8, 9, 2, 8, 2, 8,

相关文档
最新文档