#include "amma/Num/NumOptimiseGrid.hh" #include "amma/Num/NumOptimiseRandomUniform.hh" #include "amma/Num/NumOptimiseDescent.hh" #include "amma/Num/NumOptimiseGenetic.hh" #include "amma/Num/NumMagnitudeEuclidean.hh" #include "amma/Num/NumCostFunction.hh" #include "amma/Num/NumModelPolynomial.hh" #include "amma/Vector2d.hh" #include // This is a test program and should NOT be considered as // an example of how to use this code. main () { // Setup Data VectorC min = Vector2dC (0,0); VectorC max = Vector2dC (2,2); VectorC mid = Vector2dC (1,1); NumVVDataSetC train; train.Append (min,max); train.Append (max,max); train.Append (mid,min); train.Append (Vector2dC(0,2), Vector2dC(1,-1)); train.Append (Vector2dC(2,0), Vector2dC(-1,1)); train.Append (Vector2dC(1,0), Vector2dC(0.5,-0.5)); train.Append (Vector2dC(-1,0),Vector2dC(-0.5,0.5)); train.Append (Vector2dC(0,1), Vector2dC(0.5,0.5)); train.Append (Vector2dC(0,-1),Vector2dC(-0.5,-0.5)); // Setup parabola model NumModelPolynomialC model (2); model.Fit (train); // Optimisers SArray1dC optimisers (4); optimisers[0] = NumOptimiseGridC (); optimisers[1] = NumOptimiseRandomUniformC (100); optimisers[2] = NumOptimiseDescentC (50); optimisers[3] = NumOptimiseGeneticC (); // Setup cost function NumMagnitudeEuclideanC magnitude; IntSArray1dC steps (2); steps.Fill (50); SArray1dC masks(3); masks[0] = IntSArray1dC (2); masks[0].Fill(1); masks[1] = IntSArray1dC (2); masks[1][0] = 0; masks[1][1] = 1; masks[2] = IntSArray1dC (2); masks[2][0] = 1; masks[2][1] = 0; VectorC Yd = Vector2dC (0.5,-0.5); NumParametersC parameters (min,max,steps); parameters.SetConstP (mid); // Specifies starting point // Save { ofstream out ("testNumOptimise.data"); FOR_SARRAY1 (optimisers,i1) optimisers[i1].Save (out); } // Load again as optimiser ifstream in ("testNumOptimise.data"); SArray1dC newOptimisers (4); FOR_SARRAY1 (newOptimisers,i2) in >> newOptimisers[i2]; // Do optimisation FOR_SARRAY1 (masks,i0) { cout << "Using following parameters mask: " << masks[i0] << "\n"; parameters.SetMask (masks[i0]); NumCostFunctionC cost (parameters,Yd,model,magnitude); FOR_SARRAY1 (newOptimisers,i1) { VectorC Xdmin = newOptimisers[i1].MinimalX (cost); VectorC Xdmax = newOptimisers[i1].MaximalX (cost); cout << newOptimisers[i1].GetInfo () << "\n"; cout << "MinimalX = " << Xdmin << "\n"; cout << "MaximalX = " << Xdmax << "\n"; } } }