pso.h
Go to the documentation of this file.
00001 
00023 #ifndef PSO_H_
00024 #define PSO_H_
00025 
00026 #include <iostream>
00027 #include <string>
00028 #include <time.h>
00029 #include <stdlib.h>
00030 #include <vector>
00031 #include <stack>
00032 #include <map>
00033 #include <math.h>
00034 #include <set>
00035 #include <queue>
00036 #include <algorithm>
00037 
00038 #include <fstream>
00039 #include <sstream>
00040 
00041 namespace pso{
00042 
00043     class Coordinate  {  
00044         public:  
00045             float x;  
00046             float y;  
00047             Coordinate()
00048             {
00049                 x=0.0f;  
00050                 y=.0f;  
00051             }
00052             
00053             Coordinate(float x,float y)
00054             {
00055                 this->x=x;  
00056                 this->y=y; 
00057             } 
00058     };
00059     
00060     class Particle{
00061         //friend: 
00062         //    std::ostream& operator<<(std::ostream &output,const Particle &right);  
00063   
00064         public:  
00065             Particle(float x,float y)
00066             {
00067                 Xmax=30.0f;
00068                 Xmin=0.0f;  
00069                 Ymax=30.0f;  
00070                 Ymin=0.0f;  
00071                 Vxmax=Xmax-Xmin;
00072                 Vxmin=0-Vxmax;  
00073                 Vymax=Ymax-Ymin;  
00074                 Vymin=0-Vymax;  
00075   
00076                 c1=2.0f;  
00077                 c2=2.0f;
00078     
00079                 c.x=x;  
00080                 c.y=y;  
00081                 //p=100.0f;
00082                 p=pow(c.x-10.0f,2)+pow(c.y-20.0f,2);  
00083                 Vx=(Xmax-Xmin)/8.0f;
00084                 Vy=(Xmax-Xmin)/8.0f;
00085       
00086                 pBest.x=x;  
00087                 pBest.y=y;
00088             }
00089             
00090             void setP()
00091             {
00092                 float temp=pow(c.x-10.0f,2)+pow(c.y-20.0f,2);  
00093                 if(temp<p)  
00094                 {  
00095                     p=temp;  
00096                     //pBest.x=c.x;  
00097                     //pBest.y=c.y;  
00098                     pBest=c;  
00099                 }  
00100             }
00101             
00102             float getP()const
00103             {
00104                 return p;  
00105             }
00106 
00107             Coordinate getPBest()const
00108             {
00109                 return pBest;  
00110             }
00111 
00112             void setV(Coordinate gBest,float w)
00113             {
00114                 float r1,r2;  
00115                 r1=rand()/(float)RAND_MAX;  
00116                 r2=rand()/(float)RAND_MAX;  
00117                 Vx=w*Vx+c1*r1*(pBest.x-c.x)+c2*r2*(gBest.x-c.x);  
00118                 if(Vx>Vxmax)  
00119                     Vx=Vxmax;  
00120                 else if(Vx<Vxmin)  
00121                     Vx=Vxmin;  
00122                 Vy=w*Vy+c1*r1*(pBest.y-c.y)+c2*r2*(gBest.y-c.y);  
00123                 if(Vy>Vxmax)  
00124                     Vy=Vxmax;  
00125                 else if(Vy<Vxmin)  
00126                     Vy=Vxmin;  
00127             }
00128             
00129             float getVx()const
00130             {
00131                 return Vx;
00132             }
00133             
00134             float getVy()const
00135             {
00136                 return Vy;
00137             }
00138      
00139             void setCoordinate()
00140             {
00141                 c.x=c.x+Vx;  
00142                 if(c.x>Xmax)  
00143                     c.x=Xmax;  
00144                 else if(c.x<Xmin)  
00145                     c.x=Xmin;  
00146                 c.y=c.y+Vy;  
00147                 if(c.y>Ymax)  
00148                     c.y=Ymax;  
00149                 else if(c.y<Ymin)  
00150                     c.y=Ymin;
00151             }
00152             
00153             float getX()const
00154             {
00155                 return c.x;  
00156             }
00157             
00158             float getY()const
00159             {
00160                 return c.y;
00161             }
00162         private:  
00163             Coordinate c;  
00164             float p;
00165             Coordinate pBest;
00166             float Vx;  
00167             float Vy;  
00168             float Xmax,Xmin;  
00169             float Ymax,Ymin;  
00170             float Vxmax,Vxmin;
00171             float Vymax,Vymin;  
00172             float c1,c2;
00173     };
00174 };
00175 #endif


pso
Author(s):
autogenerated on Thu Jun 6 2019 18:52:34