From 6f81ad879d3f6bc6e4d84aff9d2d18804f8166b1 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Thu, 30 Sep 2010 15:53:16 -0700 Subject: [PATCH] add another simple example --- examples/simple.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 examples/simple.cpp diff --git a/examples/simple.cpp b/examples/simple.cpp new file mode 100644 index 0000000..650b244 --- /dev/null +++ b/examples/simple.cpp @@ -0,0 +1,44 @@ +#include + +#include "de.h" + +// just a helper function used in calculating the polynomails +double Polynomial(double x, double a, double b, double c, double d) +{ + return a*(x*x*x) + b*(x*x) + c*x + d; +} + +// the function we're searching for +double TargetFunction(double input) +{ + return Polynomial(input,17.0,321.0,-2.0,324.0); +} + +// our DE implementation +class PolySearch: public DE::Engine<4> +{ + public: + double TestFitness(const double testcase[4], bool& stop) + { + double error = 0.0; + for ( int i=-100;i<=100;i++ ) + { + double test = Polynomial((double)i,testcase[0],testcase[1],testcase[2],testcase[3]); + double actual = TargetFunction((double)i); + error += (test-actual)*(test-actual); + } + if ( error < 0.00000000000001 ) + { + stop = true; + } + return error; + } +}; + +// main program +int main() +{ + PolySearch de; + de.Solve(); + return 0; +}