資源簡介
里面有幾個文檔是介紹相關(guān)背景,threadpool.h和threadpool.c文件包含了簡單線程池的庫函數(shù),ant_pthread.c是并行蟻群算法的源代碼

代碼片段和文件信息
#include?
#include?
#include?
#include?“threadpool.h“
#define?Num_city?30?//number?of?city
#define?Num_ant?30?//number?of?ant
#define?It_max?5000?//maxium?number?of?iteration
double?graph[Num_city][Num_city];//matirx?saving?distance?between?cities
double?phe[Num_city][Num_city];//matrix?saving?pheromones?of?every?path
double?add[Num_city][Num_city];
double?yita[Num_city][Num_city];
double?alpha?=?2?beta?=?4?rou?=?0.1?alpha1?=?0.1?qzero?=?0.01;
double?allDistance[Num_city][Num_city];
double?Lnn;
pthread_mutex_t?phe_lock?=?PTHREAD_MUTEX_INITIALIZER;
double?C[Num_city][2]?=?{
{2?99}{4?50}{7?64}{13?40}{18?54}{18?40}{22?60}{24?42}{25?62}{25?38}{37?84}{41?94}{41?26}{44?35}{45?21}{54?67}{54?62}{58?35}{58?69}{62?32}{64?60}{68?58}{71?44}{71?71}{74?78}{82?7}{83?46}{83?69}{87?76}{91?38}
};
typedef?struct?antnode{
int?startCity;
int?visited[Num_city];?//0?for?visited?city?and?1?for?unvisited?city
int?antPath[Num_city][2];
}Ant;
double?calculateDistance(int?i?int?j){
????return?sqrt(pow((C[i][0]?-?C[j][0])2.0)?+?pow((C[i][1]?-?C[j][1])2.0));
}
void?calculateAllDistance(){
for(int?i?=?0;?i? for(int?j?=0;?j? if(i?!=?j){
allDistance[i][j]?=?calculateDistance(i?j);
allDistance[j][i]?=?allDistance[i][j];
}
}
}
}
double?calculateSumOfDistance(int*?tour){
double?sum?=?0;
for(int?i?=?0;?i? int?row?=?*(tour?+?2?*?i);
int?col?=?*(tour?+?2?*?i?+1);
sum?+=?allDistance[row][col];
}
return?sum;
}
void?InitParameter(double?value){
for(int?i?=?0;?i? for(int?j?=?0;?j? phe[i][j]?=?value;
phe[j][i]?=?value;
if(i?!=?j){
yita[i][j]?=?1.0?/?allDistance[i][j];
yita[j][i]?=?yita[i][j];
}
}
}
}
int?ChooseNextNode(int?currentNode?int?visitedNode[]){
int?nextNode?=?-1;
double?shortDistance?=?0.0;
for(int?i?=?0;?i? if(1?==?visitedNode[i]){
if(shortDistance?==?0.0){
shortDistance?=?allDistance[currentNode][i];
nextNode?=?i;
}
if(shortDistance? nextNode?=?i;
shortDistance?=?allDistance[currentNode][i];
}
}
}
return?nextNode;
}
double?CalAdjacentDistance(int?node){
double?sum?=?0.0;
int?visitedNode[Num_city];
int?currentNode?=?node;
int?nextNode;
for(int?j?=?0;?j? visitedNode[j]?=?1;
do{
nextNode?=?ChooseNextNode(currentNode?visitedNode);
if(nextNode?>=?0){
sum?+=?allDistance[currentNode][nextNode];
currentNode?=?nextNode;
visitedNode[currentNode]?=?0;
}
}while(nextNode?>=?0);
sum?+=?allDistance[currentNode][node];
return?sum;
}
double?Transition(int?i?int?j){
if(i?!=?j){
pthread_mutex_lock(&phe_lock);
double?temp?=?pow(phe[i][j]?alpha)?*?pow(yita[i][j]?beta);
pthread_mutex_unlock(&phe_lock);
return?temp;
}else{
return?0.0;
}
}
void?UpdateLocalPathRule(int?i?int?j);
void*?search(void*?arg){
int
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-06-25?21:44??蟻群算法的簡單并行\(zhòng)
?????文件????????7056??2016-06-25?21:42??蟻群算法的簡單并行\(zhòng)ant_pthread.c
?????文件????????6161??2016-06-25?21:41??蟻群算法的簡單并行\(zhòng)threadpool.c
?????文件?????????788??2016-06-25?21:41??蟻群算法的簡單并行\(zhòng)threadpool.h
?????文件??????412689??2016-06-25?14:48??蟻群算法的簡單并行\(zhòng)一種基于蟻群算法的TSP問題分段求解算法.pdf
?????文件??????271563??2016-06-22?11:04??蟻群算法的簡單并行\(zhòng)一種蟻群算法的并行實(shí)現(xiàn).pdf
?????文件??????447917??2016-06-21?15:25??蟻群算法的簡單并行\(zhòng)蟻群算法及其應(yīng)用.docx
?????文件??????695186??2016-06-21?15:23??蟻群算法的簡單并行\(zhòng)蟻群算法基本知識.pdf
?????文件?????1851197??2016-06-22?11:21??蟻群算法的簡單并行\(zhòng)蟻群算法并行化研究.pdf
評論
共有 條評論