蚁群算法c++代码(3)
发布时间:2021-06-08
发布时间:2021-06-08
可以运行,有详细步骤说明
AllowedCity[i]=1;
prob[i]=0;
}
}
void ant::addcity(int city) //增加一个城市到走过的城市数组中,并改变没走过的城市数组中的标志
{
//add city to tabu;
tabu[m_iCityCount]=city;
m_iCityCount++;
AllowedCity[city]=0;
}
int ant::ChooseNextCity()//蚂蚁选择下一个城市号
{
//Update the probability of path selection
//select a path from tabu[m_iCityCount-1] to next
int i;
int j=10000;
double temp=0;
int curCity=tabu[m_iCityCount-1]; //当前选择的城市号
for (i=0;i<iCityCount;i++){//先计算当前城市和没有走过的城市,两两之间的信息素的总和
if((AllowedCity[i]==1))
{
temp+=pow((1.0/Map.distance[curCity][i]),beta)*pow((Map.m_dTrial[curCity][i]),alpha); //信息素总和
}
}
double sel=0; //计算没有走过的城市被选中的概率
for (i=0;i<iCityCount;i++) {
if((AllowedCity[i]==1))
{
prob[i]=pow((1.0/Map.distance[curCity][i]),(int)beta)*pow((Map.m_dTrial[curCity][i]),(int)alpha)/temp;
sel+=prob[i];
}
else
prob[i]=0; //如果已经走过,则概率为0
}
double mRate=rnd(0,sel); //下面的操作实际上就是遗传算法中的轮盘选择
下一篇:电气工程专业认识实习