(五)遗传算法

本文详细探讨了遗传算法的原理和实现,重点介绍了如何利用C++进行遗传算法编程,包括种群初始化、选择、交叉和变异等关键步骤。通过实例解析,帮助读者掌握遗传算法在优化问题中的应用。
摘要由CSDN通过智能技术生成
#ifndef _GA_
#define _GA_

#include <iostream>
#include <time.h>

using namespace std;

void TestGA();

/*
	1.初始化 :随机生成M个群体。T:进化代数。M:初始种群的个数
	2.个体评价:计算各个个体的适应度
	3.选择运算:选择子个体,将选择算子作用于群体
	4.交叉运算:将交叉算子作用于群体
	5.变异运算:将变异算子作用于群体,通过以上步骤得到下一代群体
	6.终止条件:按照进化代数?或者收敛指标
*/

/*
	编码:二进制串进行编码

*/

/*
	适应度函数:
		计算某个种群的适应度大小,越大,越好
		根据具体问题而定
*/

/*
	选择算子:
		适应度高的种群保留的概率大,适应度低的种群保留概率小
		从父种群中选择一些个体,遗传到下一代?:遗传?
		轮盘赌选择算法
		
		1.根据适应度计算概率
		2.计算累计概率
		3.计算每个种群的概率区间

*/

/*
	交叉算子:为了重组基于。交换基因片段
		单点交叉算子:
			1.选择交叉点
			2.将两个编码交叉点后的进行交换
		
*/

/*
	变异算子:改变某些编码,产生新的种群
		基本位变异算子:
			选择变异点
			随机指定一个或几个位置做变异运算		
*/

/*
	运行参数:
		M:种群数量
		T:终止时的代数
		Pc:交叉概率
		Pm:变异概率
*/

/*
	举例:
		求【0,31】上使函数y=x^2取得最大值的x
	交叉配对如何确定?
	交叉的交叉点如何确定?
	如何确定终止位置?
	如何确定种群个数?
*/

const int CODE_LENGTH = 5;

void GA_1(int M, int T, double pc, double pm);

// 初始化M个种群
void Initialize(unsigned char population[], int M);

// 计算各个种群的适应度,传入适应度函数
void Adaptable(unsigned char population[], double adapt[], int M, double (*func)(int x));

// 计算适应度区间
void AdaptableLength(double adapt[], int M);

// 适应度函数
double Func(int x);

void CopyPop(unsigned char population[], unsigned char tmpPop[], int M);

// 产生M个从0到1的随机数,通过adapt,确定剩下的种群
void GetCopyPopulation(unsigned char population[], unsigned char tmpPop[], double adapt[], int M);
int FindI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值