python多元函数求极小值_使用遗传算法求二元函数的最小值

二元函数为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为复制次数

以上这篇使用遗传算法求二元函数的最小值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

testlink mysql配置_TestLink安装配置手册

TestLink安装配置手册范围本文仅作为安装和配置TestLink的参考文档。本文的第一部分为TestLink的安装步骤&#xff0c;第二部分是TestLink的配置方法。本文和其他相关文档可在中寻求帮助一般TestLink安装的步骤如下&#xff1a;1.下载TestLink2.解压文件3.创建数据库4.导入缺省…

python matlibplot绘制矩阵_matplotlib.pyplot.matshow 矩阵可视化实例

这是一个绘制矩阵的函数。用matshow绘制矩阵的例子&#xff1a;import matplotlib.pyplot as pltimport numpy as npdef samplemat(dims):"""Make a matrix with all zeros and increasing elements on the diagonal"""aa np.zeros(dims)for i …

如果有一个人在我创业之前告诉我这些

听别人的个人经历&#xff0c;并持保留态度&#xff0c;结合自己用来参考。 首先验证想法。不要浪费时间来建造无人需要的东西。扼杀你的自我。 创业内容不在于自我&#xff0c;而是关于用户。必须去想用户想要什么&#xff0c;而不是我想要什么的。不要盲目躺平顺从投资者&…

时分秒 java_JAVA 时分秒累加

一、简介有个需求是&#xff0c;累加通话时长&#xff0c;把上次通话时长加上本次通话时长&#xff0c;依次累加。二、实现Testpublic void TestA() throws ParseException {SimpleDateFormat myFormatter new SimpleDateFormat("HH:mm:ss");SimpleDateFormat forma…

python插件化设计_python - 插件化编程

引用2018-11-06 python插件式框架开发https://www.jianshu.com/p/a472f44c7161python 优雅地实现插件架构https://www.cnblogs.com/hhh5460/p/6681363.html一. classmethod function装饰器1.1 项目结构├─ project├─ run.py├─ app├─ __init__.py├─ main.py├─ platf…

java 如何实现对象克隆_Java对象克隆

Java不提供克隆(复制)对象的自动机制。克隆对象意味着逐位复制对象的内容。要支持克隆操作&#xff0c;请在类中实现clone()方法。Object类中的clone()方法的声明如下&#xff1a;protected Object clone() throws CloneNotSupportedExceptionclone()方法声明为protected。 因此…

python 默认配置文件_python各类配置文件写法

1. csv文件csv&#xff1a;Comma-Separated Values半结构化数据逗号分割值&#xff0c;可以使用office或者wps打开。模块&#xff1a;csvcsv.reader(csvfile,dialect’excel’,**fmtparams)csv.writer(csvfile,dialect’excel’,**fmtparams)返回一个DictWriter实例。主要支持的…

java mvc建包结构_Java SSM框架的配置方法、MVC结构的分析、响应的流程

今天头一次配置成功一个SSM框架&#xff0c;兴奋之余&#xff0c;还应该从使用的角度&#xff0c;将整个ssm配置的方法&#xff0c;配置的原因&#xff0c;认真的分析一下。在结束了对SSM框架简单的分析之后&#xff0c;就要开始回归基础&#xff0c;全面的认真复习。所以这个文…

英特尔显示器音频_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少

随着Type-C接口的不断发展&#xff0c;这个接口也成为越来越多设备的标配&#xff0c;除了出现在手机、平板电脑和笔记本电脑等移动设备上&#xff0c;显卡这样的设备也开始配备Type-C接口了&#xff0c;本周末&#xff0c;小编为大家收集了一些有关Type-C接口的冷知识&#xf…

java drawingpanel_Java DrawingPanel.getHeight方法代码示例

import org.opensourcephysics.display.DrawingPanel; //导入方法依赖的package包/类/*** Paint the contour.* param g*/public synchronized void draw(DrawingPanel panel, Graphics g) {if(!visible||(griddatanull)) {return;}if(!autoscaleZ && showColoredLevel…

python激活虚拟环境source不是内部或外部_激活虚拟环境的问题

F:\sdk\imooc_request>virtualenv envname --no-setuptools --no-pip --no-wheelUsing base prefix f:\\编程\\pycharmNew python executable in F:\sdk\imooc_request\envname\Scripts\python.exeF:\sdk\imooc_request>source .env/bin/activatesource 不是内部或外部命…

如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...

❝Vditor 是一款浏览器端的 Markdown 编辑器&#xff0c;支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现&#xff0c;支持原生 JavaScript、Vue、React、Angular&#xff0c;提供桌面版❞Markdown背景随着 Markdown 排版方式的普及&…

java ocsp请求_java – 客户端证书上的OCSP吊销

如果仅使用客户端的java.security.cert.X509Certificate,如何使用OCSP手动检查java中的证书撤销状态&#xff1f;我看不清楚这样做的明确方法.或者,我可以让tomcat自动为我做,你怎么知道你的解决方案是真的&#xff1f;解决方法:我发现了一个最优秀的解决方案/**54 * This is a…

java模型给泛型_【一天一个基础系列】- java之泛型篇

java 5以后&#xff0c;java引入了“参数化类型”的概念&#xff0c;允许程序在创建集合时指定集合元素的类型java 7之前&#xff0c;如果使用带泛型的接口、类定义变量&#xff0c;那么调用构造器创建对象时构造器的后面也必须带泛型比如//java 7之前List list new ArrayList…

mpython掌控板作品_第1课 Arduino micro:bit 掌控板 创客教育常用的3类主控板

有很多朋友想学习创客&#xff0c;问我怎么学习。我建议他先百度一下“创客”&#xff0c;看看有什么感觉。结果还是很懵&#xff0c;五花八门&#xff0c;什么都有&#xff0c;找不到核心。简单理解&#xff0c;就是以前讲的DIY&#xff0c;自己动手&#xff0c;制作一个东西。…

redis启动没反应_Promethues如何针对Redis进行监控

需求&#xff1a;采用redis_exporter 收集数据&#xff0c;promethus采集redis_exporter数据&#xff0c;granfana展示数据一、简易安装redisyum install -y redisrpm -qa |grep redislsof -i :6379rpm -ql redissystemctl start redis找到配置文件/etc/redis.conf,修改 requir…

网上书店管理系统java部分代码_网上书店管理系统 java语言

【实例简介】整个系统&#xff0c;包括数据库&#xff0c;安装上就能用&#xff0c;非常适合做课程设计的作业或者毕业设计的作业【实例截图】【核心代码】OnLineBookStore└── OnLineBookStore├── WebRoot│ ├── META-INF│ │ └── MANIFEST.MF│ ├── W…

java自定义标签遍历_自定义标签 - CarlDing的个人页面 - OSCHINA - 中文开源技术交流社区...

EL的不足&#xff0c;由JSTL来加强 -> 自定义标签来实现。1&#xff1a;自定义标签1&#xff1a;自定义标签也是类。2&#xff1a;让用户在JSP页面使用&#xff0c;不引用Java代码的情况下&#xff0c;调用Java代码。2&#xff1a;标签开的类的继承关系3&#xff1a;快速的…

python宏替换_简单的宏替换

简单的宏替换1.宏定义必须写在第一次使用该宏定义的代码之前&#xff1b;2.宏定义不是以分号结束的3.#define string1 string2 之间至少要有一个空格4.string 1称为宏&#xff0c;string2 称为宏扩展5. 宏名用大写的字母表示是一个习惯6.使用宏的好处&#xff1a;a 简化程序的书…

python逆序数怎么求_怎么算逆序数?急~~~!!!

展开全部可使用直bai接计数法&#xff0c;计算一个du排列的逆序数的直接zhi方法是逐个dao枚举逆序&#xff0c;同时统计个内数。举个例子&#xff1a;标准列是容1 2 3 4 5&#xff0c;那么 5 4 3 2 1 的逆序数算法&#xff1a;看第二个&#xff0c;4之前有一个5&#xff0c;在标…