00001
00002
00003 double fitness(GAindividual p)
00004 {
00005 int i,r,n,sz;
00006 double f, sd, dt, time, * y, mXY = 0,mX = 0, mY = 0, mX2 = 0, mY2 = 0;
00007
00008 n = getNumSpecies(p);
00009 r = getNumReactions(p);
00010
00011 time = 500.0;
00012
00013 y = simulateNetworkStochastically(p,time,&sz);
00014
00015 f = 0;
00016 if (y != 0)
00017 {
00018 mXY = mX = mY = mX2 = mY2 = 0;
00019 for (i = 0; i < (sz-1); ++i)
00020 {
00021 dt = getValue(y,n+1,i+1,0) - getValue(y,n+1,i,0);
00022 mX += getValue(y,n+1,i,1) * dt;
00023 mX2 += getValue(y,n+1,i,1)*getValue(y,n+1,i,1)*dt;
00024 }
00025
00026 mX /= time;
00027 mX2 /= time;
00028
00029 sd = sqrt(mX2 - mX*mX);
00030
00031 if (sd <= 0 || mX <= 0 || mX > 5.0)
00032 f = 0.0;
00033 else
00034 f = mX / sd;
00035
00036 free(y);
00037 }
00038
00039 if(getNumSpecies(p) > 5)
00040 f = 0.0;
00041
00042 return (f);
00043 }
00044
00045
00046