资源简介
基于并行遗传算法的TSP问题C++代码,本代码改编自《Parallel Genetic Algorithms: A Typical MPI Application》,添加了丰富的代码注释。
代码片段和文件信息
/*
MPI based TSP Problem
本代码改编自:Parallel Genetic Algorithms: A Typical MPI Application。 见pga.pdf
由于测试需要添加了Linux的信号处理函数,需要安装有MPICH/openmpi库的Linux系统下编译:
mpicxx -g pga.cpp -o pga
城市坐标文件:cities.txt
运行:mpirun -n 4 ./pga
您也可以把Linux信号处理部分的代码注释掉,这样可以在Windows系统的编译(需要安装Windows版MPICH2,或微软的MPI库)
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define POP_SIZE 1000
#define MAX_Gen 3000
#define MUTATIONFACTOR 0.035
#define EXCHANGEPERIOD 10
#define CITYNO 25
#define DATAFILE “cities.txt“ // 城市地理坐标文件
/*
0.8147 0.7577
0.9058 0.7431
0.1270 0.3922
0.9134 0.6555
0.6324 0.1712
0.0975 0.7060
0.2785 0.0318
0.5469 0.2769
0.9575 0.0462
0.9649 0.0971
0.1576 0.8235
0.9706 0.6948
0.9572 0.3171
0.4854 0.9502
0.8003 0.0344
0.1419 0.4387
0.4218 0.3816
0.9157 0.7655
0.7922 0.7952
0.9595 0.1869
0.6557 0.4898
0.0357 0.4456
0.8491 0.6463
0.9340 0.7094
0.6787 0.7547
*/
typedef struct scity
{
float x_coord; // x
float y_coord; // y
} city;
struct
{
float value;
int index;
} in out;
MPI_Datatype MPI_City;
typedef int path[CITYNO];
city cities[CITYNO];
int rank size;
void random_shuffle(path p);
float Fitness(path p);
int comparepaths(const void *p1 const void *p2);
void crossover(path p1 path p2);
void Do_Crossover(path p1 path p2 path np1 path np2);
void printpath(path p);
void mutate(path p);
void select_crossover_choices(int *p float *fits);
void random_crossover_choices(int *p float *fits);
int find_pid_by_name( char* ProcName vector& pid_x);
void handler(int sig)
{
printf(“Get a signal num is %d !\n“ sig);
printf(“Ding!Ding!Ding!Ding!Ding! \n“);\
if(0 == rank)
{
//pga并行计算的0号进程,发送给另一个进程solver 一个ALARM信号:
//通过进程名获取进程pid
vector pid;
int rv = find_pid_by_name(“solver“ pid);
if(!rv)
{
for(int i = 0; i < pid.size(); i++)
{
printf(“pid[%d]=%d\n“ i pid[i]); // 如果solver也是MPI并行从小,那么同名的进程可能不止一个。
kill(pid[i] SIGALRM); // 向名为solver的进程发送一个SIGALRM信号
printf(“pga send an alarm to solver %d\n“pid[i]);
}
}
}
// 对外发送完信号后,发送给自己一个暂停的信号
pid_t pidme = getpid();
kill(19 pidme);
sleep(20);
kill(18 pidme); //睡眠20秒后,开始续算
}
int main(int argc char **argv)
{
city acity;
int lenc[2];
MPI_Aint locc[2];
MPI_Datatype typc[2];
MPI_Aint baseaddr;
/
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 525 2018-06-21 16:37 MPI-GA-TSP\src\cities.txt
文件 274297 2018-07-31 14:49 MPI-GA-TSP\src\pga
文件 13873 2018-07-31 16:19 MPI-GA-TSP\src\pga.cpp
文件 118106 2018-05-07 13:35 MPI-GA-TSP\src\pga.pdf
目录 0 2018-07-31 16:18 MPI-GA-TSP\src
目录 0 2018-07-31 16:12 MPI-GA-TSP
----------- --------- ---------- ----- ----
406801 6
- 上一篇:C语言画图程序代码
- 下一篇:PBKDF2_HMac_SHA1哈希算法
相关资源
- 并行蚁群算法解决旅行商问题
- iar.cc++.compiler.v1.30.3.50673.for.rl78-patch
- Intel C++ Compiler 9 10 11 license Key 注册文
- c 编译器 masm32 汇编 可自举
- 基于蚁群算法的TSP问题实现C语言
- C++实现小游戏flappy bird
- 遗传算法求解TSP旅行商问题C语言源代
- ATmega16与DAC0832连接用DA产生正弦波
- MPI并行化多体问题源码
- 分支限界法求旅行商问题
- 利用遗传算法解决TSP问题c++
- GA遗传算法C++实现,控制台演示
- C++实现的遗传算法实现TSP问题
- MFC动态绘制曲线图-HightSpeedChart实现
- xilinx Vivado HLS技术性能优化指南
- Vivado HLS 视频课程总结
- RTSP流媒体协议实现源代码 含客户端和
- RTSPRTP服务器+客户端 C++ 源代码
- 遗传算法C语言版已运行
- TSP问题蚁群算法C++实现
- StateMachineCompiler for C 根据状态表生成
- mingW-w64 C++ compiler
- Intel C++ Compiler 11.1.054 windows (包含安
- 蚁群算法解决TSP问题C源码
- proteus仿真,用atmega16控制12864显示屏
- DSS中的RTSPclientLib程序
- RTSPRTP C++ 源代码
- 将音视频文件转换为rtsp流(live555 媒
- 高性能计算之并行编程技术-MPI并行程
- 用opencv处理RTSP视频流,其中视频流的
评论
共有 条评论