最近在搞一个调度的论文,我把它抽象成了一个TSP的问题,由于本人的VC基础不是太好,只会C语言,从别的参考资料上找到一个程序,语法错误已经全部排出,就是连接成EXE的时候出了问题,程序如下:
#include <time.h>
#include <assert.h>
#define N 20
//城市数
#define Q 100
//影响轨迹更新规则的Q值大小
static const int M=10; //蚂蚁数量
//城市坐标
double C[N][2]={{5.924,1.558},{4.286,3.622},{4.179,2.744},{4.185,2.230},{0.195,3.821},{4.771,6.041},{1.524,2.871},
{3.477,2.111},{3.718,3.665},{2.649,2.556},{4.399,1.94},{4.660,2.949},{1.232,6.440},{5.036,0.244},{2.710,3.140},{1.072,3.454},
{5.855,6.203},{0.194,1.862},{1.7962,2.693},{2.682,6.097}};
typedef int Tour[N][2];
typedef double doubleMatrix[N][N];
doubleMatrix D;
//两城市之间的几何距离
double dist(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 calc_dist()
{
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
D[i][j]=dist(i,j);
}
//两城市之间的最大距离
double max_dist()
{
double max_dist=0.0;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
if(dist(i,j)>max_dist)
max_dist=dist(i,j);
return max_dist;
}
//经过n个城市的一条路径长度
double calc_length(Tour*tour)
{
double l=0.0;
for(int n=0;n<N;n++)
{
int i=(*tour)[n][0];
int j=(*tour)[n][1];
l+=D[i][j];
}
return (l);
}
//用矩阵表示的经过n个城市的路径长度
int sum_sequence(int array[],int count)
{
int sum=0;
for(int i=0;i<count;i++)
sum+=array[i];
return (sum);
}
/***************************************************************/
class Ant
{
protected:
int START_CITY,CURRENT_CITY; //初始城市,当前城市
int ALLOWED[N];
//禁忌表
Tour CURRENT_TOUR;
//当前路径
int CURRENT_TOUR_INDEX; //当前路径索引
public:
inline Ant(int start_city)
{
START_CITY=start_city;
}
//蚂蚁转移到下一个城市
inline void moveTO(int to_city)
{
ALLOWED[to_city]=0;
CURRENT_TOUR[CURRENT_TOUR_INDEX][0]=CURRENT_CITY;
CURRENT_TOUR[CURRENT_TOUR_INDEX][1]=to_city;
CURRENT_TOUR_INDEX++;
CURRENT_CITY=to_city;
}
};
class NNAnt:Ant
{
public:
inline NNAnt(int start_city):Ant(start_city){};
//找出一个城市周围最短的边
inline int choose()
{
double best_length=(double)N*max_dist();
int best_choose=-1;
for(int j=0;j<N;j++)
{
if((ALLOWED[j]==1)&&(D[CURRENT_CITY][j]<best_length))
{
best_choose=j;
best_length=D[CURRENT_CITY][j];
}
}
return best_choose;
}
//沿着找出的最短的边进行搜索
inline Tour*search()
{
CURRENT_CITY=START_CITY;
CURRENT_TOUR_INDEX=0;
for(int i=0;i<N;i++)
ALLOWED[i]=1;
ALLOWED[CURRENT_CITY]=0;
while(sum_sequence(ALLOWED,N)>0)
moveTO(choose());
ALLOWED[START_CITY]=1;
moveTO(START_CITY);
return &CURRENT_TOUR;
}
};
class AntColonySystem;
class ACSAnt:Ant
{
private:
AntColonySystem*ACS;
public:
ACSAnt(AntColonySystem*acs,int start_city):Ant(start_city)
{
ACS=acs;
}
inline int choose();
inline Tour*search();
};
class AntColonySystem
{
private:
double ALPHA,BETA,RHO,TAU0,ALPHA1;
//定义参数
doubleMatrix TAU,dTAU;
ACSAnt*ANTS[M];
public:
double Q0;
AntColonySystem(double alpha,double beta,double rho,double q0,double alpha1);
inline double calc_tau0();
inline void init_tau_by_value(double value);
inline void init_tau_by_matrix(doubleMatrix matrix);
inline void init_uniform();
inline void init_random();
inline void init_randomMOAPC();
inline double ETA(int i,int j);
inline double transition(int i,int j);
inline double sum_transition(int i,int allowed[]);
inline void local_update_rule(int i,int j); //在蚁群系统中有些定义
inline void clear_global_update();
inline void add_global_update(Tour*tour,double length);
inline void global_update_rule();
inline doubleMatrix*get_tau();
inline Tour*search(int T);
};
//若q<q0,则按公式(3-7)选择移动方向;若q>q0,则按概率公式进行选择,将q0设为0,则为蚂蚁系统
inline int ACSAnt::choose()
{
double q=rand()/(double)RAND_MAX;
if(q<=ACS->Q0)
{
double best_value=-1.0;
int best_choose=-1;
for(int j=0;j<N;j++)
{
if((ALLOWED[j]==1)&&(ACS->transition(CURRENT_CITY,j)>best_value))
{
best_choose=j;
best_value=ACS->transition(CURRENT_CITY,j);
}
}
return best_choose;
}
//按概率选择移动方向
double sum=ACS->sum_transition(CURRENT_CITY,ALLOWED);
double p=rand()/(double)RAND_MAX;
double p_j=0.0;
for(int j=0;j<N;j++)
{
if(ALLOWED[j]==1)p_j+=ACS->transition(CURRENT_CITY,j)/sum;
if((p<p_j)&&(ALLOWED[j]==1))
return j;
}
return -1;
}
//选择移动方向,应用局部更新公式进行激素更新
//以下为蚁群系统的实现过程
/*
inline Tour*ACSAnt::search()
{
CURRENT_CITY=START_CITY;
int tocity;
CURRENT_TOUR_INDEX=0;
for(int i=0;i<N;i++)
ALLOWED[i]=1;
ALLOWED[CURRENT_CITY]=0;
int LAST_CITY;
while(1)
{
LAST_CITY=CURRENT_CITY;
tocity=choose();
if(tocity==-1)
{
break;
}
moveTO(tocity);
ACS->local_update_rule(CURRENT_CITY,START_CITY);
moveTO(START_CITY);
return &CURRENT_TOUR;
}
调试时连接出现的问题:
Linking...
ant.obj : error LNK2001: unresolved external symbol "public: int (* __thiscall ACSAnt::search(void))[20][2]" (?search@ACSAnt@@QAEPAY1BE@1HXZ)
Debug/ant.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
不懂这句提示是什么意思,请老师们指点,感激不尽!
请教老师们一个用蚁群算法解决TSP问题的程序
来源:互联网 发布日期:2011-09-26 13:55:25 浏览:6636次
导读:最近在搞一个调度 论文 我把它抽象成了一个TSP 问题 由于本人 VC基础不是太好 只会C语言 从别 参考资料上找到一个程序 语法错误已经全部排出 就是连接成EXE 时候...
相关热词: 请教老师们一个用蚁群算法解决TSP问题 程序 VC/MFC
相关内容
- 无需开颅将ChatGPT植入大脑,这家比尔盖茨支持的AI硬件公司,要挑战马斯克脑机接口
- 深圳!入选北斗规模应用试点城市
- 小鹏:未来 AI 汽车搭载至少 3 颗自研图灵芯片,已跑通智驾功能
- 【EMNLP2024】阿里云人工智能平台PAI多篇论文入选EMNLP2024
- Fedora 发行版调整:KDE桌面环境“上位”,和 GNOME“平起平坐”
- 登上Nature的AI芯片设计屡遭质疑,谷歌发文反击,Jeff Dean:质疑者连预训练都没做
- 美国政府芯片法案拨款迟迟未到,英特尔 CEO 对此感到“沮丧”
- 麻省理工团队成功研制出全新纳米级3D晶体管,垂直纳米线结构创新
- OpenAI收购域名Chat.com,传金额超过1000万美元
- Python 成 GitHub 最受欢迎编程语言,AI 成主要推动力
AiLab云推荐
最新资讯
- 为开发AI芯片,传特斯拉已要求三星、SK海力士提供HBM4样片
- 英特尔演示资料显示未来将推 AI 芯片 Jaguar Shores
- AI 驱动的芯片设计-AI前沿讲习班(CAAI-AIDL)第十四期活动成功举办
- 台系厂商安霸的智驾芯片风口,终于来了
- 登上Nature的AI芯片设计屡遭质疑,谷歌发文反击,Jeff Dean:质疑者连预训练都没做
- 中国版脑机接口手术来了!比马斯克的更安全
- 从断供中国芯片始,三星或加速衰落,韩国距发展中国家有多远
- 树莓派 Raspberry Pi CM5 计算模块提前曝光,延续上代外形设计
- 超越硅极限:纳米3D晶体管或成AI低功耗未来之钥
- 谷歌安卓 15 QPR2 新增 Linux 终端,可在虚拟机中运行Linux 应用
本月热点
热门排行
-
存储芯片年涨七成不算完:AI需求接棒,大厂持续加注
阅读量:18036
-
美大选逼近!传大陆芯片设计业计划从台积电转单三星
阅读量:13772
-
黄仁勋对话扎克伯格:新款芯片样品本周发送,AI行业还有5年产品创新期
阅读量:12017
-
马斯克:Neuralink 今年预计完成 10 例脑机接口植入手术
阅读量:11857
-
应对先进封装挑战,芯碁微装直写光刻技术助力本土创新突破
阅读量:11516
-
黑芝麻智能登陆港交所:智能汽车AI芯片第一股,拥抱广阔机遇
阅读量:11389
推荐内容
- 2024山东国际玻璃工业技术展览会
- 2024第二十二届中国广州国际汽车展览会
- 2024年阿尔及利亚国际暖通空调制冷展览会ALGERIA
- 2024第12届中国(青岛)国际茶产业博览会(华巨臣茶博会)
- 2024阿尔及利亚国际建材展
- 2024 第二十三届新加坡国际石油及天然气展览会暨研讨会
- 2024年荷兰阿姆斯特丹船舶游艇设备展览会METS TRADE
- 2024第12届巴基斯坦(卡拉奇)国际防务与军警展
- 2024年俄罗斯莫斯科电力、电网技术展览会
- 2024(京津冀)水果产销对接会
- 2024第二十一届北方(烟台)国际果业博览会(北方果博会 NIFIE)
- 2024第十六届中国(上海)振威国际化工装备博览会(CTEF)
- 2024第七届欧洲(德国不来梅)国际空间技术展
- 2024第十七届上海国际电池工业展览会(振威电池展 CNIBF)
- 2024第二十届上海国际充电设施产业展览会(振威充电设施展 evse)
- 2024第十一届浙江义乌国际智能装备博览会
- 2024第89届全国药品交易会(药交会 PHARMCHINA)
- 2024年中国北京国际高端食品饮料博览会
- 2024年中国(北京)国际有机绿色食品展览会
- IADE2024第三届突尼斯(杰尔巴)国际航空航天与防务展
- 2024年土耳其温室农业展土耳其畜牧机械展GrowTech Eurasia
- 2024中国北京名酒节暨世界葡萄酒博览会
- 2024第十三届杭州国际跨境电商交易博览会(跨交会 ICBE)
- 2024中国健康营养博览会(秋季)(NHNE)
- 2024乌兹别克斯坦食品及包装展 UZ PROD &INTER PACK
- 日本第45届国际建筑建材与家居材料展
- 2024中国国际制造业数智化博览会
- 2024第29届深圳国际服装供应链博览会(秋季)(FS展 Fashion Source)暨AW深圳原创设计时装周
- 2024越南(胡志明)轴承展览会
- 2024越南(胡志明)橡胶机械及塑料展览会
- 2024越南(胡志明)五金机械展览会
- 2024秋季中国(广州)国际茶业博览会
- 2024越南(胡志明)电机及线圈展览会
- 2024越南(胡志明)电线电缆展览会
- 2024越南(胡志明)润滑油及应用技术展览会
- 2024越南(胡志明)焊接与切割展览会
- 2024越南(胡志明)电池产品展览会
- 2024中国国际天然提取物和健康食品配料展览会(FIC-健康展2024)暨第23届全国秋季食品添加剂和配料展览会
- 2024厦门国际眼镜业展览会(厦门眼镜展)
- 2024第十八届中国宁波中小工厂展览会
- 2024越南(胡志明市)国际工业技术装备及产品展览会
- 2024深圳国际照明展览会
- 2024越南(胡志明)煤矿技术设备展览会
- 2024第20届越南胡志明国际工业展览会
- 2024第二十二届中国(北京)国际医疗旅游展览会(正和医疗旅游展 CMTF)
- 2024越南(胡志明)金属及冶金展览会
- 2024年越南国际制药装备及医疗器械展览会
- 2024越南国际表面处理及涂料涂装展览会
- 2024越南(胡志明)国际复合材料展览会
- 2024越南(胡志明)工程机械设备展览会
- 2024越南(胡志明)锅炉及压力容器展览会
- 2024越南(胡志明)化工展览会
- 2024越南(胡志明)工业自动化及仪器仪表展览会
- 2024越南(胡志明)机床工具展览会
- 2024越南(胡志明)金属加工及焊接技术展览会
- 2024越南(胡志明)铝工业展览会