• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

matlab遗传算法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
function [xv,fv] = myGA(fitness, a, b, NP, NG, Pc, Pm, eps)
%	用遗传算法求解一维无约束优化问题
%
%	待优化的目标函数 fitness
%	自变量下界 a 
%	自变量上界 b 
%	种群个体数 NP
%	最大进化代数 NG
%	杂交概率 Pc
%	变异概率 Pm
%	自变量离散精度 eps
%	目标变量取最大值时自变量的值: xm
%	目标函数的最大值 fv
%
%	Example:
%		function F = fitness(x)
%		F = x^3-60*x^2+900*x+100;   
%   -------------------------------
%		[xv,fv] = myGA(@fitness,0, 30, 50, 100, 0.9, 0.04, 0.01);
%	--------------------------------------------------
%		xv = 10
%		fv = 4100
%
%	本程序在《精通MATLAB最优化计算》页315程序的基础上修改

L = ceil(log2((b-a) / eps + 1));				%编码长度
x = zeros(NP, L);								%种群
nx = zeros(size(x));							%滚动数组
fx = zeros(NP, 1);								%适应度
for i = 1:NP
	x(i,:) = Initial(L);
end

fv = -inf;

for k = 1 : NG
	for i = 1 : NP
		fx(i) = fitness(Dec(a, b, x(i, :), L));
		if (fx(i) > fv)
			xv = Dec(a, b, x(i, :), L);
			fv = fx(i);
		end
	end
	
	sumfx = sum(fx);
	Px = fx / sumfx;
	
	PPx = zeros(NP, 1);
	PPx(1) = Px(1);									%概率叠加
	for i = 2 : NP
		PPx(i) = PPx(i - 1) + Px(i);
	end
	
	selFather = 0;
	for i = 1 : NP
		sita = rand();
		for j = 1 : NP
			if (sita <= PPx(j))
				selFather = j;						%使用轮盘赌法进行选择父亲
				break;
			end
		end
		
		selMother = floor(rand() * NP) + 1;			%母亲随机选择
		posCut = floor(rand() * (L - 1)) + 1;		%交叉点
		
		r1 = rand();
		if (r1 <= Pc)
			nx(i, 1 : posCut) = x(selFather, 1:posCut);
			nx(i, (posCut + 1) : L) = x(selMother, (posCut + 1) : L);
			r2 = rand();
			if (r2 <= Pm)
				posMut = floor(rand() * L) + 1;
				nx(i, posMut) = ~nx(i, posMut);
			end
		else
			nx(i, :) = x(selFather, :);
		end
	end
	
	x = nx;
end

%--------------------------------------------------------
%	初始化种群
function  result = Initial(length)
result = zeros(size(length()));
for i = 1 : length
	r = rand();
	result(i) = round(r);
end

%----------------------------------------------------------
%	编码转换
function y = Dec(a, b, x, L)
base = 2 .^ ((L - 1) : -1: 0);
y = dot(base, x);
y = a + y * (b - a) / (2 ^ L - 1);



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
遗传算法——matlab代码解析发布时间:2022-07-18
下一篇:
TCCSuperPlayerView让Delphi支持app视频播放!发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap