TestDownhillSimplex.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #ifdef NICE_USELIB_CPPUNIT
  2. #include <string>
  3. #include <exception>
  4. #include <map>
  5. #include "TestDownhillSimplex.h"
  6. #include "MyCostFunction.h"
  7. using namespace std;
  8. const bool verboseStartEnd = true;
  9. // const bool verbose = true;
  10. const bool verbose = false;
  11. CPPUNIT_TEST_SUITE_REGISTRATION( TestDownhillSimplex );
  12. void TestDownhillSimplex::setUp() {
  13. }
  14. void TestDownhillSimplex::tearDown() {
  15. }
  16. void TestDownhillSimplex::testDHS_1Dim ()
  17. {
  18. if (verboseStartEnd)
  19. std::cerr << "================== TestDownhillSimplex::testDHS_1Dim ===================== " << std::endl;
  20. int dim (1);
  21. CostFunction *func = new MyCostFunction(dim, verbose);
  22. //initial guess: 2.0
  23. optimization::matrix_type initialParams (dim, 1);
  24. initialParams.Set(2.0);
  25. //we search with step-width of 1.0
  26. optimization::matrix_type scales (dim, 1);
  27. scales.Set(1.0);
  28. //setup the optimization problem
  29. SimpleOptProblem optProblem ( func, initialParams, scales );
  30. DownhillSimplexOptimizer optimizer;
  31. //actually, this has no effect at all
  32. optimizer.setMaxNumIter(true, 100);
  33. optimizer.optimizeProb ( optProblem );
  34. optimization::matrix_type optimizedParams (optProblem.getAllCurrentParams());
  35. double goal(4.2);
  36. if (verbose)
  37. std::cerr << "1d optimization -- result " << optimizedParams[0][0] << " -- goal: " << goal << std::endl;
  38. CPPUNIT_ASSERT_DOUBLES_EQUAL( optimizedParams[0][0], goal, 1e-7 /* tolerance */);
  39. if (verboseStartEnd)
  40. std::cerr << "================== TestDownhillSimplex::testDHS_1Dim done ===================== " << std::endl;
  41. }
  42. void TestDownhillSimplex::testDHS_2Dim()
  43. {
  44. if (verboseStartEnd)
  45. std::cerr << "================== TestDownhillSimplex::testDHS_2Dim ===================== " << std::endl;
  46. int dim (2);
  47. CostFunction *func = new MyCostFunction(dim, verbose);
  48. //initial guess: 2.0
  49. optimization::matrix_type initialParams (dim, 1);
  50. initialParams.Set(2.0);
  51. //we search with step-width of 1.0
  52. optimization::matrix_type scales (dim, 1);
  53. scales.Set(1.0);
  54. //setup the optimization problem
  55. SimpleOptProblem optProblem ( func, initialParams, scales );
  56. DownhillSimplexOptimizer optimizer;
  57. //actually, this has no effect at all
  58. optimizer.setMaxNumIter(true, 100);
  59. optimizer.optimizeProb ( optProblem );
  60. optimization::matrix_type optimizedParams (optProblem.getAllCurrentParams());
  61. double goalFirstDim(4.7);
  62. double goalSecondDim(1.1);
  63. if (verbose)
  64. {
  65. std::cerr << "2d optimization 1st dim-- result " << optimizedParams[0][0] << " -- goal: " << goalFirstDim << std::endl;
  66. std::cerr << "2d optimization 1st dim-- result " << optimizedParams[1][0] << " -- goal: " << goalSecondDim << std::endl;
  67. }
  68. CPPUNIT_ASSERT_DOUBLES_EQUAL( optimizedParams[0][0], goalFirstDim, 1e-7 /* tolerance */);
  69. CPPUNIT_ASSERT_DOUBLES_EQUAL( optimizedParams[1][0], goalSecondDim, 1e-7 /* tolerance */);
  70. if (verboseStartEnd)
  71. std::cerr << "================== TestDownhillSimplex::testDHS_2Dim done ===================== " << std::endl;
  72. }
  73. #endif