% pmutation - 初始变异概率,一般取 0.05-0.2 之间较好(默认 0.1)
% pInversion - 倒位概率,一般取 0.05-0.3 之间较好(默认 0.2)
% options - 1*2 矩阵,options(1)=0 二进制编码(默认
0),option(1)~=0 十进制编
%码,option(2)设定求解精度(默认 1e-4)
%
% ------------------------------------------------------------------
------
T1=clock;
if nargin<3, error(‘FMAXGA requires at least three input arguments‘);
end
if nargin==3,
eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;optio
ns=[0 1e-4];end
if nargin==4,
popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0
1e-4];end
if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0
1e-4];end
if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end
if nargin==7, pInversion=0.15;options=[0 1e-4];end
if find((LB-UB)>0)
error(‘数据输入错误,请重新输入(LB<UB):‘);
end
s=sprintf(‘程序运行需要约%.4f 秒钟时间,请稍
等......‘,(eranum*popsize/1000));
disp(s);
global m n NewPop children1 children2 VarNum
bounds=[LB;UB]‘;bits=[];VarNum=size(bounds,1);
precision=options(2);%由求解精度确定二进制编码长度
bits=ceil(log2((bounds(:,2)-bounds(:,1))‘ ./ precision));%由设定精度
划分区间
[Pop]=InitPopGray(popsize,bits);%初始化种群
[m,n]=size(Pop);
NewPop=zeros(m,n);
children1=zeros(1,n);
children2=zeros(1,n);
pm0=pMutation;
BestPop=zeros(eranum,n);%分配初始解空间 BestPop,Trace
Trace=zeros(eranum,length(bits)+1);
i=1;
while i<=eranum
for j=1:m
value(j)=feval(FUN(1,:),(b2f(Pop(j,:),bounds,bits)));%计算适