遗传算法求二元函数极值怎么编码_使用遗传算法求二元函数的最小值
二元函数为y=x1^2+x2^2,x∈[-5,5]
NIND=121; %初始种群的个数(Number of individuals)
NVAR=2; %一个染色体(个体)有多少基因
PRECI=20; %变量的二进制位数(Precision of variables)
MAXGEN=200; %最大遗传代数(Maximum number of generations)
GGAP=0.8; %代沟(Generation gap),以一定概率选择父代遗传到下一代
trace=zeros(MAXGEN,2); %寻优结果的初始值
Chrom=crtbp(NIND,PRECI*NVAR); %初始种群
%区域描述器(Build field descriptor)
%确定每个变量的二进制位数,取值范围,及取值范围是否包括边界等。
FieldD=[rep([PRECI],[1,NVAR]);rep([-5;5],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Objv=objfun(bs2rv(Chrom,FieldD))
gen=1; %代计数器
while gen<=MAXGEN
Fitv=ranking(Objv); %分配适应度值(Assign fitness values)
SelCh=select('sus',Chrom,Fitv,GGAP); %选择
SelCh=recombin('xovsp',SelCh,1); %重组
SelCh=mut(SelCh); %变异
ObjVSel=objfun(bs2rv(SelCh,FieldD));%子代个体的十进制转换
%重插入子代的新种群
[Chrom,Objv]=reins(Chrom,SelCh,1,1,Objv,ObjVSel);
trace(gen,1)=min(Objv); %遗传算法性能跟踪
trace(gen,2)=sum(Objv)/length(Objv);
gen=gen+1; %代计数器增加
end
plot(trace(:,1));
hold on
plot(trace(:,2),'.')
grid
legend('最优解的变化','解的平均值的变化')
根据上面的求解模型,可以写出模型的.M文件如下,即适应度函数
% OBJFUN.M
% Syntax: ObjVal = objfun1(Chrom,rtn_type)
%
% Input parameters:
% Chrom - Matrix containing the chromosomes of the current
% population. Each row corresponds to one individual's
% string representation.
% if Chrom == [], then special values will be returned
% rtn_type - if Chrom == [] and
% rtn_type == 1 (or []) return boundaries
% rtn_type == 2 return title
% rtn_type == 3 return value of global minimum
%
% Output parameters:
% ObjVal - Column vector containing the objective values of the
% individuals in the current population.
% if called with Chrom == [], then ObjVal contains
% rtn_type == 1, matrix with the boundaries of the function
% rtn_type == 2, text for the title of the graphic output
% rtn_type == 3, value of global minimum
% Author: YQ_younger
function ObjVal = objfun(Chrom,rtn_type);
% Dimension of objective function
Dim = 2;
% Compute population parameters
[Nind,Nvar] = size(Chrom);
% Check size of Chrom and do the appropriate thing
% if Chrom is [], then define size of boundary-matrix and values
if Nind == 0
% return text of title for graphic output
if rtn_type == 2
ObjVal = ['DE JONG function 1-' int2str(Dim)];
% return value of global minimum
elseif rtn_type == 3
ObjVal = 0;
% define size of boundary-matrix and values
else
% lower and upper bound, identical for all n variables
ObjVal = 1*[-5; 5];
ObjVal = ObjVal(1:2,ones(Dim,1));
end
% if Dim variables, compute values of function
elseif Nvar == Dim
% function 1, sum of xi^2 for i = 1:Dim (Dim=30)
% n = Dim, -5 <= xi <= 5
% global minimum at (xi)=(0) ; fmin=0
ObjVal = sum((Chrom .* Chrom)')';
% ObjVal = diag(Chrom * Chrom'); % both lines produce the same
% otherwise error, wrong format of Chrom
else
error('size of matrix Chrom is not correct for function evaluation');
end
% End of function
注释:
种群表示和初始化函数 bs2rv:
二进制串到实值的转换
Phen=bs2rv(Chrom,FieldD) FieldD=[len, lb, ub, code, scale, lbin, ubin]
code(i)=1为标准的二进制编码,code(i)=0为格雷编码
scale(i)=0为算术刻度,scale(i)=1为对数刻度
函数 crtbp:
创建初始种群
[Chrom,Lind,BaseV]=crtbp(Nind,Lind)
[Chrom,Lind,BaseV]=crtbp(Nind,BaseV)
[Chrom,Lind,BaseV]=crtbp(Nind,Lind,BaseV)
Nind指定种群中个体的数量,Lind指定个体的长度
函数 crtrp:
创建实值原始种群
Chrom=crtrp(Nind,FieldDR)
适应度计算函数 ranking:
基于排序的适应度分配(此函数是从最小化方向对个体进行排序的)
FitV=ranking(ObjV)
FitV=ranking(ObjV, RFun)
FitV=ranking(ObjV, RFun, SUBPOP)
Rfun(1)线性排序标量在[1 2]间为,非线性排序在[1 length(ObjV)-2]
Rfun(2)指定排序方法,0为线性排序,1为非线性排序
SUBPOP指明ObjV中子种群的数量,默认为1
选择高级函数 select:
从种群中选择个体
SelCh=select(SEL_F, Chrom, FitnV)
SelCh=select(SEL_F, Chrom, FitnV, GGAP)
SelCh=select(SEL_F, Chrom, FitnV, GGAP, SUBPOP)
SEL_F是一字符串,为一低级选择函数名,如rws或sus
GGAP指出了代沟,默认为1;也可大于1,允许子代数多于父代的数量
rws: 轮盘赌选择
NewChrIx=rws(FitnV, Nsel) 使用轮盘赌选择从一个种群中选择Nsel个个体
NewChrIx 是为育种选择的个体的索引值
sus:
随机遍历抽样
NewChrIx=sus(FitnV, Nsel)
交叉高级函数 recombin:
重组个体
NewChrom=recombin(REC_F, Chrom)
NewChrom=recombin(REC_F, Chrom, RecOpt)
NewChrom=recombin(REC_F, Chrom, RecOpt, SUBPOP)
REC_F是包含低级重组函数名的字符串,例如recdis,recint,reclin,xovdp, xovdprs, xovmp, xovsh, xovshrs, xovsp, xovsprs
recdis:
离散重组
NewChrom=recdis(OldChorm)
recint:
中间重组
NewChrom=recint(OldChorm)
reclin:
线性重组
NewChrom=reclin(OldChorm)
xovdp:
两点交叉
NewChrom=xovdp(OldChrom, XOVR)
XOVR为交叉概率, 默认为0.7
Xovdprs:
减少代理的两点交叉
NewChrom=xovdprs(OldChrom, XOVR)
Xovmp:
多点交叉
NewChrom=xovmp(OldChrom, XOVR, Npt, Rs)
Npt指明交叉点数, 0 洗牌交叉;1 单点交叉;2 两点交叉;
默认为0
Rs指明使用减少代理, 0 不减少代理;1 减少代理;
默认为0
Xovsh:
洗牌交叉
NewChrom=xovsh(OldChrom, XOVR)
Xovshrs:
减少代理的洗牌交叉
NewChrom=xovshrs(OldChrom, XOVR)
Xovsp:
单点交叉
NewChrom=xovsp(OldChrom, XOVR)
Xovsprs:
减少代理的单点交叉
NewChrom=xovsprs(OldChrom, XOVR)
变异高级函数 mutate:
个体的变异
NewChorm=mutate(MUT_F, OldChorm, FieldDR) NewChorm=mutate(MUT_F, OldChorm, FieldDR, MutOpt) NewChorm=mutate(MUT_F, OldChorm, FieldDR, MutOpt, SUBPOP) MUT_F为包含低级变异函数的字符串,例如mut, mutbga, recmut
mut:
离散变异算子
NewChrom=mut(OldChorm, Pm) NewChrom=mut(OldChorm, Pm, BaseV)
Pm为变异概率,默认为Pm=0.7/Lind
mutbga:
实值种群的变异(遗传算法育种器的变异算子) NewChrom=mutbga(OldChorm, FieldDR)
NewChrom=mubga(OldChorm, FieidDR, MutOpt)
MutOpt(1)是在[ 0 1]间的重组概率的标量,默认为1
MutOpt(2)是在[0 1]间的压缩重组范围的标量,默认为1(不压缩)
recmut:
具有突变特征的线性重组
NewChrom=recmut(OldChorm, FieldDR)
NewChrom=recmut(OldChorm, FieidDR, MutOpt)
重插入函数 reins:
重插入子群到种群
Chorm=reins(Chorm, SelCh)
Chorm=reins(Chorm, SelCh, SUBPOP)
Chorm=reins(Chorm, SelCh, SUBPOP, InsOpt, ObjVch)
[Chorm, ObjVch]=reins(Chorm, SelCh, SUBPOP, InsOpt, ObjVch, ObjVSel)
InsOpt(1)指明用子代代替父代的选择方法,0为均匀选择,1为基于适应度的选择,默认为0
InsOpt(2)指明在[0 1]间每个子种群中重插入的子代个体在整个子种群的中个体的比率,默认为1
ObjVch包含Chorm中个体的目标值,对基于适应度的重插入是必需的
ObjVSel包含Selch中个体的目标值,如子代数量大于重插入种群的子代数量是必需的
其他函数矩阵复试函数 rep:
MatOut=rep(MatIn, REPN)
REPN为复制次数
以上这篇使用遗传算法求二元函数的最小值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
时间: 2020-02-09
遗传算法求二元函数极值怎么编码_使用遗传算法求二元函数的最小值相关推荐
- 遗传算法求二元函数极值怎么编码_用遗传算法求复杂函数的极值点
确定遗传 在元素个体,遗传得到的个体和变异个体中选取最好的30个个体(对应的函数值最大的30个个体)作为下一次迭代的父样本. from random import randint from numpy ...
- 遗传算法求二元函数极值怎么编码_遗传算法求解一元函数二元函数最值
##--------------------------施工中----------------------------## import random import math import numpy ...
- 遗传算法求二元函数极值怎么编码_遗传算法求解二元函数极值源码
网上看到了一个比较不错的讲解遗传算法的帖子,链接如下 http://blog.csdn.net/b2b160/article/details/4680853 但是却没有贴源代码,正好最近闲来无事,就尝 ...
- correl函数相关系数大小意义_在EXCEL中用“CORREL”函数求 两列的相关系数为什么是等于1?...
展开全部 因为正负号表示的e5a48de588b662616964757a686964616f31333365646235是正相关还是负相关,数值表示的是相关程度. 一.相关表和相关图可反映两个变量之 ...
- python函数模块关键代码_从零开始学Python(六):函数,模块和类的使用
从这章开始,我们不在使用sublime文本编译器进行编码了,主要是我们每次运行的使用还得去命令行执行pyhon ***.py命令查看结果,操作比较麻烦.推荐大家使用Pycharm(具体安装使用教程大家 ...
- python 函数作用于矩阵_图解NumPy:常用函数的内在机制
原标题:图解NumPy:常用函数的内在机制 来源: 机器之心 支持大量多维数组和矩阵运算的 NumPy 软件库是许多机器学习开发者和研究者的必备工具,本文将通过直观易懂的图示解析常用的 NumPy 功 ...
- python中高阶函数和装饰器_三.Python高阶函数和装饰器
1高阶函数 1.1 数学概念回顾下数学知识: y=f(x) 这是最开始接触的普通函数 y=g(f(x)) 这个就是我们接触到的高阶函数 在数学和计算机科学中,高阶函数至少应当是满足下面一个条件的函数: ...
- mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...
/* 关于MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结,*/ -- 1 运算符优先级 /* 12.1.1. 操作符优先级 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符 ...
- python函数的使用方法_百度资讯搜索_python函数的使用方法
金生水起程序猿 2020年11月22日 11:23函数语法格式及调用参数:默认值.元组和字典可变参数的使用全局变量和局部变量作用域,局部变量如何升级为全局变量函数是可重复使用的,实现单一功能的代码块. ...
最新文章
- 专访黄勇:Java在未来的很长一段时间仍是主流
- Geoserver中TileLayers中切割离线瓦片预览时地图模糊不清
- 相片堆叠瀑布流网格布局动画效果
- Leaflet使用vector tiles 标注label设置
- 荒野行动系统推荐观战榜_荒野行动 观战延迟投票结果公示 更新计划抢先看!...
- zzuoj 10409: D.引水工程
- Elasticsearch合并高亮字段
- MongoDB多条件分组聚合查询
- 页游中的十大经典游戏题材
- android把2变成02_【Android】学习札记第2章之数组二(Arrays工具类)
- iOS - OC NSFileManager		文件管理
- 3招教你花式导入Excel数据到JMP
- mysql 索引失效情况总结
- 红杉资本投资的企业汇总
- 转 Html转pdf的工具——wkhtmltopdf
- c语言表示星期的英语单词周一到周日,sql 获取本周周一和周日
- win10不能正常安装.NET Framework 3.5,报0x800F081F错误。
- 用猎头的方式来找工作
- android 获得屏幕方向,Android 获取设置屏幕横竖屏
- 基于Verilog HDL的数字时钟
热门文章
- S3C2440之触摸屏驱动
- Android进阶课学习收获(31~33)
- git checkout介绍
- AI快车道PaddleNLP系列直播课2|开箱即用的产业级NLP开发库
- [Violation]Added non-passive event listener to a scroll-blocking ‘touchstart‘ event.
- 设计模式之美——行为型3:迭代模式、访问者模式、命令模式、解释器模式、中介模式
- 打造Flutter高性能富文本编辑器——协议篇
- 【WEB前端开发】基础知识大总结(HTML5+CSS3)
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
- 一直播回放视频怎么保存到本地电脑 经验分享