<强>二元函数为y=x1 ^ 2 + x2 ^ 2, x∈(5, 5) 强>
宁德=121;%初始种群的个数(个人) 据NVAR=2;%一个染色体(个体)有多少基因 PRECI=20;%变量的二进制位数(精度变量) MAXGEN=200;%最大遗传代数(一代又一代的最大数量) GGAP=0.8;%代沟(代沟),以一定概率选择父代遗传到下一代 跟踪=0 (MAXGEN, 2);%寻优结果的初始值 铬=crtbp(宁德,PRECI *据NVAR);%初始种群 %区域描述器(构建字段描述符) %确定每个变量的二进制位数,取值范围,及取值范围是否包括边界等。 FieldD=[代表([PRECI],[1,据NVAR]);代表([5;5],[1,据NVAR]);代表([1,0,1,1],[1,据NVAR])); Objv=objfun (bs2rv(铬、FieldD)) 创=1;%代计数器 而gen<=MAXGEN Fitv=排名(Objv);%分配适应度值(分配健身值) 选择通道=选择(“嫌疑犯”,铬、Fitv GGAP);%选择 选择通道=recombin (“xovsp”,选择通道,1);%重组 选择通道=傻瓜(选择通道);%变异 ObjVSel=objfun (bs2rv(选择通道,FieldD)); %子代个体的十进制转换 %重插入子代的新种群 (铬,Objv)=缰绳(铬,选择通道,1,1,Objv ObjVSel); 跟踪(创1)=min (Objv);%遗传算法性能跟踪 跟踪(gen 2)=(Objv)/长度总和(Objv); 创=创+ 1;%代计数器增加 结束 情节(跟踪(:1)); 按住alt键="使用遗传算法求二元函数的最小值">根据上面的求解模型,可以写出模型的m文件如下,即适应度函数
% OBJFUN.M %的语法:ObjVal=objfun1(铬、rtn_type) % %输入参数: %色矩阵包含当前的染色体 %的人口。每一行对应于一个人的 %字符串表示。 %如果铬==[],那么将返回特殊值 % rtn_type——如果铬==[] % rtn_type==1(或[])返回边界 % rtn_type==2返回标题 % rtn_type==3全球最低的返回值 % %输出参数: % ObjVal——包含的客观值列向量 %的人在当前的人口。 %如果称为铬==[],然后ObjVal包含 % rtn_type==1,矩阵函数的边界 % rtn_type==2,标题的文本的图形输出 % rtn_type==3,全球最低的价值 %作者:YQ_younger 函数ObjVal=objfun(铬、rtn_type); %的目标函数 昏暗的=2; %计算总体参数 [宁德,据Nvar]=大小(铬); %检查大小的铬和做适当的事情 %如果铬[],然后定义boundary-matrix和值的大小 如果宁德==0 %的返回文本标题图形输出 如果rtn_type==2 ObjVal=['德容函数1 - ' int2str(暗)]; %全球最低的返回值 elseif rtn_type==3 ObjVal=0; %定义boundary-matrix和值的大小 其他的 对所有n %降低和上界,相同的变量 ObjVal=1 * [5;5); ObjVal=ObjVal(1:2(暗,1)); 结束 %如果模糊变量,计算值的函数 elseif据Nvar==渺茫 %函数1,i=1笔ξ^ 2:暗(暗=30) % n=昏暗,5 & lt;=xi & lt;=5 全球最低% (xi)=(0);fmin=0 ObjVal=总和((铬。*铬)')'; % ObjVal=诊断接头(铬*铬”);%都产生相同的行 铬的%否则错误,错误的格式 其他的 错误(矩阵铬的大小是不正确的评价函数的); 结束 %的函数 >之前<强>注释:强>
种群表示和初始化函数bs2rv:
二进制串到实值的转换
苯酚的=bs2rv(铬,FieldD) FieldD=(len、磅、乌兰巴托、代码、规模、lbin, ubin]
代码(我)=1为标准的二进制编码,代码(我)=0为格雷编码
规模(i)=0为算术刻度、规模(i)=1为对数刻度
函数crtbp:
创建初始种群
(铬,林德,BaseV]=crtbp(宁德,林德)[铬,林德,BaseV]=crtbp(宁德BaseV)
(铬,林德,BaseV]=crtbp(宁德,林德,BaseV)宁德指定种群中个体的数量,林德指定个体的长度
函数crtrp:
创建实值原始种群
FieldDR铬=crtrp(宁德)适应度计算函数排名:
基于排序的适应度分配(此函数是从最小化方向对个体进行排序的)
FitV=排名(ObjV)
FitV=排名(ObjV RFun)
FitV=排名(ObjV RFun SUBPOP)
Rfun(1)线性排序标量在[1 - 2]间为,非线性排序在[1长度(ObjV) 2]
Rfun(2)指定排序方法,0为线性排序,1为非线性排序
SUBPOP指明ObjV中子种群的数量,默认为1选择高级函数选择:
从种群中选择个体
选择通道=选择(铬,SEL_F FitnV)
选择通道=选择(SEL_F,铬、FitnV GGAP)使用遗传算法求二元函数的最小值