双倍体遗传算法

在普通的遗传算法的基础上,每个个体引入显隐性染色体。

算法流程:

  1. 初始化种群
  2. 根据显性染色体进行选择
  3. 个体之间交叉时:显性和显性交叉。隐性和隐性交叉
  4. 个体中显性以较小的变异概率变异,隐性以较大的变异概率变异

以下代码使用双倍体的遗传算法解决TSP问题,城市数量34.


```cpp
//双色体遗传算法
#include
#include
#include 
#include
#include
#include
using namespace std;
typedef vector Vi;
//typedef vector  Vii;
struct Obj{
	pair xian; // 显性染色体
	pair yin;  // 隐形染色体
	friend operator <(Obj &o1, Obj &o2){ 
		return o1.xian.first > o2.xian.first;   
	}
};

Vi x;  //城市的横坐标 
Vi y;  //城市的纵坐标 
/*
 1. 采用适应度比例分配个体的选择概率,
 2. 采用轮盘赌选择个体
 3. 采用pxm交叉 
 4. 采用两点互换的变异方式 
*/ 

bool cmp(Obj * x, Obj *y){    //sort的比较函数 
	return x->xian > y->xian; 
}
int next_int(){
	return rand()*(RAND_MAX+1)+rand();
}
double next_double(){
	retur

你可能感兴趣的:(人工智能算法,人工智能,算法)