资源

带局部优化的旅行推销员Prob(ga1)

/****************************************************************//*                                                              *//*S A S S A M P L E L I B R A R Y*//*                                                              *//*名称:ga1*//*标题:带局部优化的旅行推销员问题(ga1)*//*产品:或*//*系统:所有*//*关键字:或*//*项目:GA*//*数据:*//*                                                              *//*支持:更新:*//*参考:*//*MISC:本地搜索GA章节中的示例1*//*优化*//*                                                              *//****************************************************************//*旅行推销员问题的20个随机位置*/数据位置;输入x y;数据线;0.0333692 0.99250790.6020896 0.01688070.1532083 0.70204440.3181124 0.14692880.1878440 0.86791200.9786112 0.49253640.7918010 0.79431440.5145329 0.03634780.5500754 0.83246170.3893757 0.66354830.9641841 0.64002010.7718126 0.54639230.7549037 0.45845840.2837881 0.77334150.3308411 0.19748510.7977221 0.11931490.3221207 0.79304780.9201035 0.11862340.2397964 0.14485520.3967470 0.6716172;proc-ga数据1=位置种子=5554;调用SetEncoding(“S20”);ncities=20;阵列距离[20,20]/nosym;do i=1至20;do j=1到i;距离[i,j]=sqrt((x[i]-x[j])**2+(y[i]-y[j],**2);距离[j,i]=距离[i,j];结束;结束;调用SetObj('TSP',0,'distances',distances);调用SetCross(“订单”);调用SetMut(“转换”);调用SetMutProb(0.05);调用SetCrossProb(0.8);致电SetElite(1);调用初始化('DEFAULT',200);调用ContinueFor(140);运行;proc-ga数据1=位置种子=5554;调用SetEncoding(“S20”);ncities=20;阵列距离[20,20]/nosym;do i=1到20;do j=1到i;距离[i,j]=sqrt((x[i]-x[j])**2+(y[i]-y[j],**2);距离[j,i]=距离[i,j];结束;结束;/*具有局部优化的目标函数*/函数TSPSwap(选中[*],城市,距离[*,*]);数组s[1]/nosym;调用dynamic_array(s,ncities);调用ReadMember(选中,1,s);/*首先尝试通过交换相邻城市来改进解决方案*/i=1对城市;city1=s[i];不确定=1+mod(i,ncities);city2=s[inext];如果i=1,则之前=s[ncities];其他的之前=s[i-1];后=s[1+mod(inmet,ncities)];if(距离[before,city1]+距离[city2,after])>(距离[before,city2]+距离[city1,after])然后执行;s[i]=城市2;s[inext]=城市1;结束;结束;调用WriteMember(已选择,1,s);/*现在计算游览距离*/距离=距离[s[ncities],s[1];do i=1至(ncities-1);距离+距离[s[i],s[i+1]];结束;返回(距离);endsub;调用SetObjFunc('TSPSwap',0);调用SetCross(“订单”);调用SetMut(“转换”);调用SetMutProb(0.05);调用SetCrossProb(0.8);致电SetElite(1);调用初始化('DEFAULT',200);调用ContinueFor(35);运行;