Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function [x_opt,y_opt,W]=PSO(epsilon,Nmax,xmin,xmax)
  2.  
  3. W=0;
  4. N=2; %wymiar problemu, tu dla dwóch zmiennych
  5. C=20;
  6. w=0.8; % wartosc powinna malec w czasie dzialania algorytmu
  7. c1=1;
  8. c2=1;
  9.  
  10. R.x=zeros(N,C);
  11. R.v=zeros(N,C);
  12. R.y=zeros(1,C);
  13.  
  14. for i=1:C
  15.     R.x(:,i)=(xmax-xmin).*rand(N,1)+xmin;
  16.     R.v(:,i)=0.02*(xmax-xmin).*rand(N,1)-0.01*(xmax-xmin);
  17.     [R.y(i),W] = fit_fun(R.x(:,i),W);
  18. end
  19.  
  20. x_opt_i=R.x;
  21. y_opt_i=R.y;
  22. [y_opt,numer]=min(R.y);
  23. x_opt=R.x(:,numer);   %najlepsze rozwiązanie to cząstka o numerze ...
  24.  
  25. while true
  26.     for i=1:C
  27.         R.v(:,i)=w*R.v(:,i)+c1*rand*(x_opt-R.x(:,i))+...
  28.             c2*rand*(x_opt_i(:,i)-R.x(:,i));
  29.         R.x(:,i)=R.x(:,i)+R.v(:,i);
  30.         [R.y(i),W]=fit_fun(R.x(:,i),W);
  31.         if R.y(i)<y_opt
  32.             y_opt=R.y(i);
  33.             x_opt=R.x(:,i);
  34.             if y_opt<epsilon
  35.                 return;
  36.             end
  37.         end
  38.         if R.y(i) <y_opt_i(i)
  39.             y_opt_i(i)=R.y(i);
  40.             x_opt_i(:,i)=R.x(:,i);
  41.         end
  42.         if W>Nmax
  43.             return;
  44.         end
  45.     end
  46. end
  47.  
  48.  
  49. function [y,w]=fit_fun(x,w)
  50.  
  51. w=w+1;
  52. %y=x(1)^2+x(2)^2;
  53. m1=400;
  54. m2=50;
  55. k1=x(1);
  56. k2=2e5;
  57. b=x(2);
  58. g=9.81;
  59. x2_0=-(m1+m2)*g/k2;
  60. x1_0=-m1*g/k1+x2_0;
  61. T=5;
  62. dt=0.01;
  63. A=0.06;
  64. f=2*pi*10;
  65.  
  66. assignin('base','m1',m1);
  67. assignin('base','m2',m2);
  68. assignin('base','k1',k1);
  69. assignin('base','k2',k2);
  70. assignin('base','b',b);
  71. assignin('base','g',g);
  72. assignin('base','x1_0',x1_0);
  73. assignin('base','x2_0',x2_0);
  74. assignin('base','T',T);
  75. assignin('base','dt',dt);
  76. assignin('base','a',A);
  77. assignin('base','f',f);
  78. sim('model.mdl');
  79. plot(t,x1);
  80. figure;
  81.  
  82. [l,m]=butter(12,0.16,'low');
  83. x1_f=filter(l,m,x1);
  84. plot(t,x1_f);
  85.  
  86. y=max(abs(x1_f));
  87. y=y+1e6*p;
  88. p=max(0,-k1)^2+max(0,k1-2e4)^2+ ...
  89.     max(0,b)^2+max(0,b-3e3)^2+ ...
  90.     max(0,-x1_0-0.3)^2;
  91. plot(t,x1);
  92.  
  93.  
  94.  
  95.  
  96. error('To by było na tyle');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement