⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainf.m

📁 本程序模拟GP算法处理数据的方法步骤How can computers learn to solve problems without being explicitly programmed? In
💻 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 + -