• 大小: 8KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-23
  • 语言: 其他
  • 标签: CVRP  

资源简介

本资源为遗传算法解决车辆的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

评论

共有 条评论