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

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

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GreenSimJ原创GreenSimJ原创遗传算法解决车辆路径

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)

juhui05 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档