|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 O0 o3 t; o7 c& V; l; N( E N
一、简介
. C+ H6 h% z9 S任何一个优化问题可以转化为一个函数问题,因此生物智能算法广泛应用,同样生物免疫算法(AIA)也是一种模拟达尔文生物进化的一个新型智能算法,生物免疫算法(AIA)根据生物系统抗体处理抗原机制,抗体进化以及最终消灭抗原,这一过程为生物免疫算法(AIA)全局寻优解的过程。: p. d2 [2 U' {- |& V+ }* H
考虑到函数优化问题的普遍性,近些年来,很多学者应用新型算法对不同函数进行测试,例如算法的稳定性、泛华能力、有效性以及全局、局部寻优能力等,因此最优化函数问题(单目标和多目标函数优化问题)一直成为广大科研人员的研究热点。根据测试函数得到的可能解,智能算法得到不断的改进,理论基础逐渐深入,使得散发本身更加稳健,能够快速为工程所用。9 @) U. Y* G* e4 P3 L
人工免疫系统正引起人们的极大重视,基于免疫系统原理开发了各类算法,遗传算法GA、差分进化算法DE、蜂群算法ABC、鱼群算法FSA等,在工程实际问题中,应用越来越广泛,也取得越来越多的成果。5 B5 E+ O5 y5 N. n, a5 ?; z1 i
* j" a1 ^7 J5 r5 \0 K
. Q% b7 K, Z6 W1 N, T
& I+ j: V9 w$ N! E
% d* h) a8 `8 F0 y. X
* v2 S1 p' |" P% [+ } u) m. y6 e' H8 w# H3 x4 ]- v" j# K
9 l. j0 g* I9 D) C) c* W" @) j8 Q+ Z$ k" I* C7 ~
三、源代码
8 {* [3 r. [, F# ]7 j' c! i- clc,clear,close all;
- warning off
- global popsize length min max N code;
- N=12; % 每个染色体段数(十进制编码位数)
- M=100; % 进化代数
- popsize=30; % 设置初始参数,群体大小
- length=10; % length为每段基因的二进制编码位数
- chromlength=N*length; % 字符串长度(个体长度),染色体的二进制编码长度
- pc=0.7; % 设置交叉概率,本例中交叉概率是定值,若想设置变化的交叉概率可用表达式表示,或从写一个交叉概率函数,例如用神经网络训练得到的值作为交叉概率
- pm=0.3; % 设置变异概率,同理也可设置为变化的
- bound={-100*ones(popsize,1),zeros(popsize,1)};
- min=bound{1};max=bound{2};
- pop=initpop(popsize,chromlength); %运行初始化函数,随机产生初始群体
- ymax=500; % 适应度值初始化
- ysw_x = zeros(3,12);
- %电容C2:故障类型编码,每一行为一种!code(1,:),正常;code(2,:),50%;code(3,:),150%
- code =[-0.8180 -1.6201 -14.8590 -17.9706 -24.0737 -33.4498 -43.3949 -53.3849 -63.3451 -73.0295 -79.6806 -74.3230
- -0.7791 -1.2697 -14.8682 -26.2274 -30.2779 -39.4852 -49.4172 -59.4058 -69.3676 -79.0657 -85.8789 -81.0905
- -0.8571 -1.9871 -13.4385 -13.8463 -20.4918 -29.9230 -39.8724 -49.8629 -59.8215 -69.4926 -75.9868 -70.6706];
- function [bestindividual,bestfit]=best(pop,fitvalue)
- global popsize N length;
- bestindividual=pop(1,:);
- bestfit=fitvalue(1);
- %实现个体的解码的计算
- function [objx]=calx(pop)
- % global N length % 默认染色体的二进制长度length=10
- N=12; length=10;
- for j=1:N %译码!
- temp(:,j)=decodechrom(pop,1+(j-1)*length,length);
- x(:,j)=temp(:,j)/(2^length-1)*(max(j)-min(j))+min(j);
- end
- fitvalue=calfitvalue(objvalue); favg(k)=sum(fitvalue)/popsize; %
- newpop=selection(pop,fitvalue); objvalue=calobjvalue(newpop,i); %
- newpop=crossover(newpop,pc,k); objvalue=calobjvalue(newpop,i); %
- newpop=mutation(newpop,pm); objvalue=calobjvalue(newpop,i); %
- [bestindividual,bestfit]=best(newpop,fitvalue);
- if bestfit<ymax
- ymax=bestfit;
- end
* R/ n* V5 h7 b* b; w: _
4 N, L7 T" J( H7 s
( U* r; ?5 K) A$ Y+ d三、运行结果
! B5 J, y+ n# L: m- C# [# M& R0 o9 F- o+ C# N) ^: P3 l
3 Y1 I/ ^% |% K# W
|
|