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
00062
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
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
00097
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