📄 mainf.m
字号:
function mainf(popnum,x,y)
%popnum 种群数,x输入数值,y输出数值
output1=[];
bestfit=[];
strArray = java_array('java.lang.String',popnum);
strArray1 = java_array('java.lang.String',popnum);
for i=1:20
[str,tr]=beg(i+1);
strArray(i)= java.lang.String(tr);
str
end
%总进化次数
for gen=1:50
for i=1:popnum
strinput='';
strinput=strArray(i);
outnum=fitness(strinput,x);
fit(i)=1/(1+abs(outnum-y));
end
fit=fit./sum(fit);%归一化适应度
%选择
[au,good]= sort(fit,'descend');
beststr=strArray(good(1));
bestfit=fitness(beststr,x);
output1=[output1 bestfit];
strArray1(good(1:5))=strArray(good(1:5));
ns=find(fit>rand(1,popnum));
if ns
strArray1(ns)=strArray(ns);
end
a=1:popnum;
for i=1:length(ns)
a=find(a~=ns(i));
end
for n=1:5
a=find(a~=good(n));
end
for i=1:length(a)
strArray1(a(i))=strArray(ceil(rand*popnum));
end
strArray=strArray1;
%交叉概率 0.6
[au,snum]=find(fit<0.6);
for i=1:2:length(snum)
str1=strArray(snum(i));
str2=strArray(snum(i+1));
[child1,child2]=crossover(str1,str2);
strArray(snum(i)) = java.lang.String(child1);
strArray(snum(i+1)) = java.lang.String(child2);
end
%变异概率0.2
for mu=1:popnum
if rand<0.2
% bnum=ceil(rand*popnum);
strm=mutation(strArray(mu));
strArray(mu) = java.lang.String(strm);
end
end
%输出最优解
ss='';
s=beststr;
a1=find(s=='+');
ss(a1)='+';
a1=find(s=='-');
ss(a1)='-';
a1=find(s=='*');
ss(a1)='*';
a1=find(s=='/');
ss(a1)='/';
beststr=ss;
output='';
output=strcat('x',output);
% output=strcat(output,'x');
for i=1:length(beststr)
if beststr(i)=='*'|| beststr(i)=='/'
output=strcat('(',output);
output=strcat(output,')');
output=strcat(output,beststr(i));
output=strcat(output,'x');
else
output=strcat(output,beststr(i));
output=strcat(output,'x');
end
end
output
if abs(bestfit-y)<1
break;
end
gen=gen+1
end
output1
plot(1:length(output1),output1)
% plot(1:length(output),output);
% plot(1:length(output),y,'r');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -