资源简介
本资源为遗传算法解决车辆的CVRP问题,CVRP是一个NP_HARD问题
代码片段和文件信息
/*
Name: GA算法实现 车辆的CVRP问题
Copyright:
Author: GCJ NEW NEU Labotatry
Date: 12/11/17 20:49
Description: 本文件和附加的参数capacity.txt和data.txt文档放在一个工程下即可,
然后修改readTxt()函数内部的路径即可运行成功
*/
#include
#include“time.h“
#include
#include
#include
/*--------------------------------参数配置区---------------------------------------------------*/
#define CLIENT_NUM 50 //客户数量 为50 1个配送中心
#define CAPACITY 160 //车的容量为160
#define Population_size 50 //种群大小
#define iterations 50 //迭代次数
#define ISGA_crossover 1 //是否可交叉 1:交叉 0:不交叉
#define PC 0.7 //配置交叉率
#define ISmutate 1 //是否可变异 1: 变异 0:不变异
#define PM 0.1 //变异率
#define IsChampionShip 1 //锦标赛参数是否可调节(默认值为0.1倍的种群大小) 1:可调 0:不可调
/*--------------------------------宏配置区---------------------------------------------------*/
#define Min(xy) ( ( (x) < (y) ) ?(x):(y) )
#define Max(xy) ( ( (x) > (y) ) ?(x):(y) )
#define f(x) (x -1) //用f宏 作为index 因为在找商店的序号跟二维数组之间相差1 所以用f表示两者之间的映射
/*---锦标赛参数设置区---*/
#ifdef ChampionShip
double championShip = 0.2; //自己可随意设置成0-1之间的小数 但是最好不要超过0.5
#endif
typedef int ElementType;
using namespace std;
ElementType **Distance; //存储商店之间的距离
ElementType * Capacity; //存储车容量
typedef struct _rand{
int flag;
ElementType num;
}Rand;
class Chromosome
{
public:
Chromosome();
Chromosome(int len ); //length表示染色体的长度
virtual~Chromosome(); //析构函数
Chromosome(const Chromosome&a); //自定义拷贝构造函数
const Chromosome &operator =(const Chromosome & o ) ;
void initialize() ; //初始化染色体 调用newRandom函数 产生1- length 的随机数
int newRandom(int lowint high ); //随机产生 0- num 个不重复的数字
void evaluate();
#if ISmutate
void mutate(); //采用逆转变异算子
#endif
//查看染色体内容的调试函数
void toprint(){
int i;
// cout<<“染色体内容“< for( i =0 ; i cout< }
}
void printpath(); //打印最后的车辆安排路径
ElementType getFitness(){return this->fitness;} //返回染色体适应值
int getLength(){ return length; } //获取染色体长度
int getCar(){return carNum; } //获取车的数量
int *codespace = NULL; //编码空间 代表2-51商店的标号
private:
int length; //染色体的长度
ElementType fitness; //方便之后的数据的扩展
int carNum; //车数量
};
typedef struct _Cross{
ElementType one;
ElementType two;
int flag1 ; //标记找到的one
int flag2 ; //标记找到的two
_Cross():flag1(0)flag2(0){}
}Cross; //部分交叉映射需要用到的结构 记录映射关系
class GA
{
public:
GA(){};
GA(int popnumint max); //popnum 种群大小,max表示迭代次数
virtual~GA();
GA(const GA&o); //自定义拷贝构造函数 把指针的情况考虑进去了
const GA &operator =(const GA & o ); //自定义赋值函数
//成员函数
void initializePop(); //初始化种群
void GArun(); //运行GA算法
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 336 2017-11-03 16:40 capacity.txt
文件 22060 2017-11-12 21:55 GA.cpp
文件 495 2017-11-02 22:30 position.txt
文件 182 2017-11-12 22:05 readme.txt
- 上一篇:5 UARTRecIT.zip
- 下一篇:六自由度运动-动网格udf
评论
共有 条评论