遗传算法解决车辆路径问题(VRP)
关于遗传算法博客里已经很多了,这次贴个 c 的代码,下面的源代码是解决车辆路径问题的。谈
一点经验性的东西,就是在进行染色体交叉时,一定要注意基因结构的问题。根据具体应用情况,尽量要
保证好的基因结构遗传到后代中。其实此时的交叉变异等所有的操作,考虑的是基因结构,而不是单个的
基因。所以在设计编码方式时就要考虑到设计出良好的基因结构。便于分割和组合的结构是好的设计。
部分源程序:(http://blog.sina.com.cn/greensim)
/************************** 最优化函数 ***************************/
void GAOptim( oat *vData, oat vP, int vGenNum, int *pBestGen )
{
$ int vFlockSize = FLOCKSIZE ;
$ int GENNUM = vGenNum ;
$ oat P = vP ;
$ int vLen = LEN ;
$ int MotherFlock[FLOCKSIZE][LEN] ;
$ int FatherFlock[FLOCKSIZE][LEN] ;
$ int ChildFlock[2*FLOCKSIZE][LEN] ;
$ int mBestGen[LEN] ;
$
$ int mCounter, mCounter1 ;
$ int *pTemp1;
$
$$ //产生初始种群
$$ for( mCounter1 = 0 ; mCounter1<FLOCKSIZE ; mCounter1++ )
$$ {
$$ $$$pTemp1 = MotherFlock[mCounter1] ;
$$ $$$PermutRnd( LEN , 1 , pTemp1 ) ;
$$ }
$$
$$ for( mCounter1 = 0 ; mCounter1<FLOCKSIZE ; mCounter1++ )
$$ {
$$ $$$pTemp1 = FatherFlock[mCounter1] ;
$$ $$$PermutRnd( LEN , 1 , pTemp1 ) ;
$$ }
$
$$ PermutRnd( LEN , 1 , mBestGen ) ; // 初始化最优种群
$
$$ for( mCounter = 0 ; mCounter < GENNUM ; mCounter++ )
$$ {
$$
$$ //交叉
$$ GenCross( MotherFlock,FatherFlock,ChildFlock,vData ) ;