Advertisement
Guest User

Untitled

a guest
Jul 9th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.58 KB | None | 0 0
  1. max_gen = 50;
  2. populationSize = 100;
  3. mu = 100;
  4. e = 0.2;
  5. population = zeros(populationSize,7); %a b c aStd bStd cStd
  6.  
  7.  
  8. fileID = fopen('model26.txt');
  9. C = textscan(fileID,'%f %f');
  10. fclose(fileID);
  11. asd = C(1);
  12. asdd = C(2);
  13. X = [asd{:}];
  14. Y = [asdd{:}];
  15.  
  16. tau1 = 1 / sqrt(2 * populationSize);
  17. tau2 = 1 / sqrt(2 * sqrt(populationSize));
  18.  
  19. errors=[];
  20.  
  21. for k = 1:populationSize    
  22. population(k,1:3) = normrnd(0,1,[1,3]);
  23. population(k,4:6) = abs(normrnd(0,1,[1,3]));
  24. Yind = zeros(101,1);
  25. for i=1:length(X)
  26.     Yind(i)=func(population(k,1),population(k,2),population(k,3),X(i));
  27. end
  28. population(k,7) = immse(Y,Yind);
  29. end
  30.  
  31.  
  32. for iter = 1:max_gen
  33.     %recombination
  34.     temp = population;
  35.    
  36.     %crossover
  37.     intermediateCrossover = intermediate_crossover(population,mu,populationSize);
  38.    
  39.     %mutation and evaluatuon mse
  40.     offspring = mutation(temp,mu,populationSize,tau1,tau2,X,Y);
  41.    
  42.     %offspring selection
  43.     population = select_population(offspring);
  44.    
  45.     iter=iter+1;
  46.     errors=[errors population(1,7)]
  47.     iter
  48.     if population(1,7)<e
  49.         break
  50.     end
  51.    
  52. end
  53.  
  54. plot(errors)
  55.  
  56. function sorted = select_population(offspring)
  57.     sorted = sortrows(offspring,7);
  58. end
  59.  
  60. function off = mutation(pop, mu,populationSize,tau1,tau2,X,Y)
  61.     x= 1;
  62.     off = zeros(populationSize,7);
  63.    
  64.     for i =1:mu
  65.        p = pop(x,:);
  66.        off(i,1:6) = [(p(1)+normrnd(0,p(4))) (p(2)+normrnd(0,p(5))) (p(3)+normrnd(0,p(6))) (p(4)*exp(normrnd(0,tau1))*exp(normrnd(0,tau2))) (p(5)*exp(normrnd(0,tau1))*exp(normrnd(0,tau2))) (p(6)*exp(normrnd(0,tau1))*exp(normrnd(0,tau2)))];
  67.        x=x+1;
  68.        if x>=populationSize
  69.            x=1;
  70.        end
  71.     end
  72.     for k = 1: length(pop)
  73.         Yind = zeros(101,1);
  74.         for i=1:length(X)
  75.             Yind(i)=func(off(k,1),off(k,2),off(k,3),X(i));
  76.         end
  77.         off(k,7) = immse(Y,Yind);
  78.     end
  79.    
  80. end
  81.  
  82. function f = func(a,b,c,x)
  83.   f = a*(x.^2-b*cos(c*pi*x));
  84. end
  85.  
  86. function offspring = intermediate_crossover(population,mu,populationSize)
  87. x=1;
  88. offspring =[];
  89. for i = 1:mu
  90.     p1 = population(x,:);
  91.     if x <= 1                
  92.         newRow = [p1(1)/2 p1(2)/2 p1(3)/2 p1(4)/2 p1(5)/2 p1(6)/2];        
  93.         temp = [offspring;newRow];
  94.         offspring = temp;
  95.     else
  96.         p2 = population((x-1),:);
  97.         newRow = [((p1(1)+p2(1))/2) ((p1(2)+p2(2))/2) ((p1(3)+p2(3))/2) ((p1(4)+p2(4))/2) ((p1(5)+p2(5))/2) ((p1(5)+p2(5))/2)];
  98.         temp = [offspring;newRow];
  99.         offspring = temp;
  100.      
  101.     end
  102.     x = x+1;
  103.     if x >= populationSize
  104.         x=1;
  105.     end
  106.  
  107. end
  108. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement