使用遗传算法对BP网络权值阈值进行优化

源代码在线查看: 利用遗传算法求解了48个城市的tsp问题(vc++ 代码).txt

软件大小: 3 K
上传用户: zyhunicom
关键词: 算法 BP网络 阈值
下载地址: 免注册下载 普通下载 VIP

相关代码

				利用遗传算法求解了48个城市的TSP问题(VC++ 代码)
				
				在Visual C++ 编译环境下,遗传算法的程序,并利用它们求解了48个城市的TSP问题。~..~
				
				程序说明
				由于篇幅有限,且程序中还包括界面实现和计算线程处理等一些与算法无关的代码。为方便阅读,程序清单只介绍实现算法的流程控制函数和一些功能函数,具体的代码可参见源程序。
				为了将算法和程序界面分离,程序将算法功能用DLL方式进行封装。遗传算法的源程序分别在[TspGA]和[GAApp]目录中,与算法相关的代码主要在如下三个文件中:
				1)gacode.h 算法中所需结构体的定义,包括SYCoordinate、SYCity、SYCityDistance、SYRouter
				2) gacode.cpp 算法中所有功能函数的实现,主要包括InitialGA、CountCityDistance、CreateCityRouter2opt、CountTotalDistance、CreateFitnessofPop、SelectPop、CrossoverPop、Crossover、MutationPop、OneIterGACompution等等。后面将分别介绍这些功能函数的作用。
				3)MainFrm.cpp流程控制函数的实现,该函数是GACompution。后面将详细介绍该函数的流程。
				
				流程控制函数和功能函数的介绍
				流程控制函数GACompution控制循环的迭代和结束,其主要代码如下:
				UINT GACompution(LPVOID pParam)
				{
				int totalgen = GetTotalGeneration(); //获取遗传算法的迭代总代数
				int nowiter = 0;
				while( nowiter = 0 ) //判断迭代次数是否大于迭代总代数,大于则停止计算
				{
				nowiter = OneIterGACompution(); //进行一代计算,包括竞争选择、交叉和变异
				}
				}
				下面是一些重要的功能函数的说明:
				OneIterGACompution() 最重要的功能函数是,它完成一代的计算,包括竞争选择、交叉和变异,在gacode.cpp中实现,其主要代码如下
				int OneIterGACompution()
				{
				CreateFitnessofPop(FITNESS_MODE); //为每个染色体计算评价函数
				SelectPop(); //群体竞争选择
				CrossoverPop(CROSSOVER_MODE); //种群交叉
				MutationPop(MUTATION_MODE); //种群变异
				NowGenNumber++; //当前代数递增
				return NowGenNumber;
				}
				CreateFitnessofPop() 对群体中的每个染色体计算适应函数/评价函数,采用基于序的计算方法。
				SelectPop() 轮盘赌方式竞争选择染色体。
				Crossover() 两染色体的交叉实现,提供两种交叉方式,分别如下:
				1、常规交叉方式,该方式比《现代计算方法》(邢文训等编著)p178给出的"非常规码的常规交配法"稍复杂些。书中只随机选择一个交配位,两个后代交配位之前的基因分别继承双亲的交配位之前的基因。本程序中,是随机选择两个不相同的交配位,后代在这两个交配位之间继承双亲在这两个交配位之间的基因
				如 父A 1 2 3 | 4 5 6 7 | 8 9 10
				  父B 4 7 8 | 3 2 5 9 | 1 6 10
				  子A 8 3 2 | 4 5 6 7 | 9 1 10
				  子B 1 4 6 | 3 2 5 9 | 7 8 10
				2、贪心交叉方式(Greedy Crossover),具体算法可参见 谢胜利等.求解TSP问题的一种改进的遗传算法. 计算机工程与应用, 2002(8):58~245。
				CrossoverPop() 种群交叉。
				MutationPop() 种群变异,提供两种变异方式,一是取两个不同的随机数,对这两个数确定的基因区间进行随机排序;二是在染色体的2-opt邻域中随机取出一个染色体。
				
				程序使用方法
				程序处理的TSP问题可按用户的具体要求,只需用户依照格式要求提供城市坐标文件即可,坐标文件的格式如下
				1 6734 1453
				2 2233 10
				3 5530 1424
				……………
				文件的每一行表示一个城市的信息,即,城市名称+空格+X坐标+空格+Y坐标。
				点击菜单栏的[文件]-[打开…],可打开指定的城市坐标文件。
				指点城市文件打开后,程序会读入文件里的各城市坐标信息,并初始化城市距离矩阵。
				点击菜单栏的[文件]-[开始计算],即可进行计算。
				城市计算结束后,会在C盘的根目录生成两个文件,一是gacitysfile.txt,它记录了计算得到的最优路径信息;二是gaitersfile.txt,它记录了计算过程中的迭代信息。
				可利用作者提供的Matlab的M文件gatspsta.m读取以上两个文件,画出路径优化过程图和求解路径图。
				
				程序算例
				程序对48个城市的TSP问题(城市坐标文件对应于48.txt)进行计算,求解路径和最优路径图如下。
				48个城市结果,大的红*表示路径开始城市,途经城市依次用蓝色方块和红色*标示,下同。			

相关资源