diff --git a/de.inl b/de.inl index 72dda58..e60735f 100644 --- a/de.inl +++ b/de.inl @@ -17,7 +17,7 @@ template const double DE::Engine::DEFAULTCROSSOVER = 1.0; template -const double DE::Engine::DEFAULTRANGE= 10.0; +const double DE::Engine::DEFAULTRANGE= 100.0; template const double DE::Engine::BIGDOUBLE = 1.79e308; // close to max double @@ -164,7 +164,7 @@ inline bool DE::Engine::Solve(unsigned int maxgenerations) for (int candidate=0;candidate trial; - MakeTrial_randtobest1bin(candidate,trial); + MakeTrial_randtobest1exp(candidate,trial); double trialfitness = CalculateError(trial,success); @@ -193,10 +193,10 @@ inline bool DE::Engine::Solve(unsigned int maxgenerations) template inline void DE::Engine::Dump(const double& fitness, DE::Vector& individual) const { - printf(" fitness = %60.30f\n",fitness); + printf(" fitness = %24.16f\n",fitness); for (unsigned int i=0;i unsigned int test_count = 0; // accumulate squared error - for ( double i=-1.5;i<=1.5;i+=0.01 ) + for ( double i=-7.9287;i<=7.9287;i+=0.001 ) { // test double test = CalculatePolynomial(i,NUM_COEFFICIENTS,testcase); @@ -78,6 +78,24 @@ class PolySearch: public DE::Engine int main() { PolySearch de; + + // setup, adjust from default range + de.SetRange(-0.1,0.1); + + // create new population with adjusted range + de.Reset(); + + // run the DE de.Solve(1000); + + // output winner in polynomial form + printf("Best Polynomial Found\n=====================\ny ="); + for (int i=0;i