GreenSimJ原创GreenSimJ原创遗传算法解决车辆路径.docVIP

  • 1
  • 0
  • 约1.62万字
  • 约 22页
  • 2017-04-14 发布于江苏
  • 举报

GreenSimJ原创GreenSimJ原创遗传算法解决车辆路径.doc

GreenSim.J原创】GreenSim.J原创】遗传算法解决车辆路径问题(VRP)(2007-08-29 11:22:12) 标签:知识/探索 关于遗传算法博客里已经很多了,这次贴个c的代码,下面的源代码是解决车辆路径问题的。谈一点经验性的东西,就是在进行染色体交叉时,一定要注意基因结构的问题。根据具体应用情况,尽量要保证好的基因结构遗传到后代中。其实此时的交叉变异等所有的操作,考虑的是基因结构,而不是单个的基因。所以在设计编码方式时就要考虑到设计出良好的基因结构。便于分割和组合的结构是好的设计。 部分源程序:(/greensim) /************************** 最优化函数 ***************************/ void GAOptim( float *vData, float vP, int vGenNum, int *pBestGen ) { int vFlockSize = FLOCKSIZE ; int GENNUM = vGenNum ; float 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 ; mCounter1FLOCKSIZE ; mCounter1++ ) { pTemp1 = MotherFlock[mCounter1] ; PermutRnd( LEN , 1 , pTemp1 ) ; } for( mCounter1 = 0 ; mCounter1FLOCKSIZE ; mCounter1++ ) { pTemp1 = FatherFlock[mCounter1] ; PermutRnd( LEN , 1 , pTemp1 ) ; } PermutRnd( LEN , 1 , mBestGen ) ; // 初始化最优种群 for( mCounter = 0 ; mCounter GENNUM ; mCounter++ ) { //交叉 GenCross( MotherFlock,FatherFlock,ChildFlock,vData ) ; //遗传 GenHeri( MotherFlock,FatherFlock,ChildFlock,mBestGen,vData ) ; //变异 GenAber( MotherFlock,FatherFlock,mBestGen,vP,vData ) ; } for( mCounter = 0 ; mCounter vLen ; mCounter++ ) { *( pBestGen + mCounter ) = mBestGen[mCounter] ; } return ; } /************************** 交叉子函数 ***************************/ void GenCross( int *MotherFlock, int *FatherFlock,int *ChildFlock, float *vData ) { int mCounter, mCounter1, mCounter2, mCounter3 ; int mIndex = 0 ; int mCrossLen1 = 0 , mCrossLen2 = 0 ; int mCrossFlag = 0 ; int mMoFkTemp1[LEN], mMoFkTemp2[LEN], mFaFkTemp1[LEN], mFaFkTemp2[LEN] ; int mMotherFlock[FLOCKSIZE][LEN] , mFatherFlock[FLOCKSIZE][LEN] ; int mChildFlock[2*FLOCKSIZE][LEN] ; int mIndex1[LEN], mIndex2[LEN] ; int *pM

文档评论(0)

1亿VIP精品文档

相关文档