?? 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 + -