SimpleOptTestGrid.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /// @file: optimization/SimpleOptTestGrid.cpp
  2. /// @author: Matthias Wacker
  3. /// @date: 2009-10-05
  4. #include "SimpleOptTestGrid.h"
  5. using namespace std;
  6. using namespace opt;
  7. SimpleOptTestGrid::SimpleOptTestGrid()
  8. {
  9. m_iNumberOfOptimizers = 0;
  10. m_iNumberOfProblems = 0;
  11. }
  12. SimpleOptTestGrid::~SimpleOptTestGrid()
  13. {
  14. }
  15. void SimpleOptTestGrid::addSimpleOptProblem(const SimpleOptProblem & optProb, const opt::matrix_type &solution, double successDist)
  16. {
  17. m_vSimpleOptProblem.push_back(optProb);
  18. m_vSolutions.push_back(solution);
  19. m_vSuccessDistances.push_back(successDist);
  20. m_iNumberOfProblems = m_vSimpleOptProblem.size();
  21. }
  22. void SimpleOptTestGrid::addSimpleOptimizer(SimpleOptimizer *opt)
  23. {
  24. m_vSimpleOptimzers.push_back(opt);
  25. m_iNumberOfOptimizers = m_vSimpleOptimzers.size();
  26. }
  27. bool SimpleOptTestGrid::test()
  28. {
  29. bool success = true;
  30. // for every optimizer
  31. for(int optIdx=0; optIdx < m_iNumberOfOptimizers; ++optIdx)
  32. {
  33. // run every test
  34. for(int probIdx=0; probIdx < m_iNumberOfProblems; ++probIdx)
  35. {
  36. bool tmpResult = test(optIdx,probIdx);
  37. cout << "SOTG: single test with opt: " << optIdx << " and prob: " << probIdx;
  38. if(tmpResult == true)
  39. {
  40. cout << " SUCCEEDED"<<endl;
  41. }
  42. else
  43. {
  44. cout << " FAILED"<<endl;
  45. }
  46. }
  47. }
  48. return success;
  49. }
  50. bool SimpleOptTestGrid::test(int optIdx, int probIdx)
  51. {
  52. // get a copy of the prob
  53. SimpleOptProblem optProb = m_vSimpleOptProblem[probIdx];
  54. matrix_type init = optProb.getAllCurrentParams();
  55. // start Optimization
  56. m_vSimpleOptimzers[optIdx]->optimizeProb(optProb);
  57. // check for success
  58. matrix_type result = optProb.getAllCurrentParams();
  59. double distres = ( result - m_vSolutions[probIdx] ).Norm(0);
  60. double distinit = ( init - m_vSolutions[probIdx] ).Norm(0);
  61. cout << "resDist: "<< distres << " from initial: "<< distinit << endl;
  62. return distres < m_vSuccessDistances[probIdx];
  63. }