首页 技术 正文
技术 2022年11月14日
0 收藏 398 点赞 2,809 浏览 1414 个字
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);
endfv = -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
endsumfx = sum(fx);
Px = fx / sumfx;PPx = zeros(NP, 1);
PPx(1) = Px(1);%概率叠加
for i = 2 : NP
PPx(i) = PPx(i - 1) + Px(i);
endselFather = 0;
for i = 1 : NP
sita = rand();
for j = 1 : NP
if (sita <= PPx(j))
selFather = j;%使用轮盘赌法进行选择父亲
break;
end
endselMother = 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
endx = 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);
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,023
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,513
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,360
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,774
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,852