国赛培训——最优化智能算法——遗传算法

本文详细介绍了遗传算法在最优化问题中的应用,包括编码方式(二进制编码及其解码)、适应度函数的计算与转换、选择策略(如轮盘赌选择、锦标赛选择等)、交叉操作(单点交叉)以及变异策略。特别强调了动态线性变换和自适应交叉变异在优化性能上的优势。
摘要由CSDN通过智能技术生成

过程:①编码–>初始化种群–>(计算适应度值–>②选择–>③交叉–>④变异–>新种群–>判断是否满足条件)–>解码

1. 编码

1.1 二进制编码

1.1.1 编码长度

每个自变量编码长度之和。其中自变量的编码长度为:
在这里插入图片描述
(a,b)代表自变量的取值范围,eps是要求的精度

%% 1.计算二进制编码的长度
for i=1:varnum
	L(i) = ceil(log2(ub(i)-lb(i)/eps + 1)); %求解每个变量的长度
end
LS = sum(L);	%二进制编码的总长度

%% 2.初始化种群
pop = randi([0 1],n,LS);	% 种群
spoint = cumsum([0 L]);		% 保存各变量对应二进制编码的位置

1.1.2 解码

将二进制数据转换为十进制
在这里插入图片描述
其中X为二进制转化为十进制的整数值

function real = decode(pop,lb,ub)
	[row col] = size(pop);
	% 1.计算X
	for i=col:-1:1
		temp(i) = 2^(i-1)*pop(i);
	end
	X = sum(temp);
	% 2.二进制-->十进制转换公式
	real = lb + X*(ub-lb)/(2^col-1);
end

1.2 适应度函数计算与转换

fval = Objfun(x);		% 直接计算适应度值

Cmin/Cmax转换(最简单 但效果不佳)

在这里插入图片描述
其中Cmin.Cmax可以是特定的输入值,也可以是目标函数的最大最小值
①最大值问题

function fitvalue = fitnessfun(x)
	Cmin = 0.01;		% 0 or 0.1
	row = size(x,1);
	for i=1:row
		fval = Objfun(x(i,:));		% 种群中第i个个体的函数值
		if fval+Cmin > 0
			fitvalue(i) = fval+Cmin;
		else
			fitvalue(i) = 0;
		end
	end
end

②最小值问题

function fitvalue = fitnessfun(x)
	% 1.计算Cmax
	row = size(x,1);
	temp = zeros(1,row);
	for i=1:row
		temp(i) = Objfun(x(i,:));
	end
	Cmax = max(temp);
	% 2.适应度转换
	for i=1:row
		fval = Objfun(x(i,:));		% 种群中第i个个体的函数值
		if fval < Cmax
			fitvalue(i) = Cmax-fval;
		else
			fitvalue(i) = 0;
		end
	end
end

线性变换1(分max min)

函数表达式:F(x) = af(x)+b
max问题: F(x) = f(x)-fmin+σ
min问题:F(x) = fmax-f(x)+σ
其中σ是一个较小的数,可使种群中最差的个体也有繁殖的机会(具体取值可以由数值量级决定)
①max问题

case '线性变化1'
	kesai =0.1;		//数值根据数量级决定
	fmin = min(fval);
	fitvalue = fval-fmin+kesai;

②min问题

case '线性变化1'
	kesai = 0.1;
	fmax = max(fval);
	fitvalue = fmax-fval+kesai

线性变换2

函数表达式:F(x) = af(x)+b
在这里插入图片描述

case '线性变换2'
	C =1.5;		// C取值为1.2~2
	fmin = min(fval);
	fmax = max(fval);
	favg = sum(fval)/size(x,1);
	if fmin >(C*favg-fmax)/(C-1)
		a =(C-1)*favg/(fmax-favg);
		b = 
一、目标与适应函数的简单对比 目标函数就是你希望得到的优化结果,比如函数最大值或者最小值。而适应度函数是为了计算个体的适配值。 适配值是非负的,而且要求适配值越大则该个体越优越。而目标函数则有正有负,它们之间关系多种多样,比如求最小值时,目标函数最小,则适配值越大,求最大值时目标值越大,适配值越大。 目标函数Object function和适应度函数Fitness function是不一样的概念,有时为了方便后续计算在适应度函数中做些 拉伸,取反,什么的。 目标函数是你求解的优化变量的函数形式;而适应度函数是你求解的优化变量的一种度量,是一种更为广义的概念。可以这么理解,目标函数只是适应度函数的一种,也可以有其他的表达形式。 对于目标函数,为了得到好的搜索性能,经过一些变化就可以得到适应度函数。另外就是这些变化可以不唯一的。 二、适应度函数 适应度函数跟 想要实现什么功能有关,把粒子对应成你问题的候选解,适应度函数用来评价给出的这个候选解(粒子)的好坏(好坏的评价标准需要一个量化指标,也就是,粒子的适应度值) 适应度用于评价个体的优劣程度,适应度越大个体越好,反之适应度越小则个体越差;根据适应度的大小对个体进行选择,以保证适应性能好的个体有更多的机会繁殖后代,使优良特性得以遗传。因此,遗传算法要求适应度函数值必须是非负数,而在许多实际问题中,求解的目标通常是费用最小,而不是效益最大,因此需要将求最小的目标根据适应度函数非负原则转换为求最大目标的形式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冠long馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值