test_OptimizerEvolutionary.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <gtest/gtest.h>
  2. #include <json.hpp>
  3. //#define private public
  4. #include <OptimizerEvolutionary.h>
  5. #include <Registration.h>
  6. using namespace mdd;
  7. namespace TEST_OPTIMIZER_EVOLUTION {
  8. auto regi = Registration();
  9. TEST(OptimizerEvolutionary, OptimizeSimpleFormula) {
  10. //optimize f(x)=a*b
  11. IModule::Ptr f1 = regi.generateModule("ModuleMath");
  12. json config = json::parse(f1->getConfiguration());
  13. config[0]["value"] = "multiply";
  14. f1->configure(config.dump());
  15. limits limit;
  16. limit.min = { -10 };
  17. limit.max = { 10 };
  18. limit.step = { 1 };
  19. f1->getInput(0)->setLimits() = limit;
  20. f1->getInput(1)->setLimits() = limit;
  21. f1->getInput(0)->setOptimizability(true);
  22. f1->getInput(1)->setOptimizability(true);
  23. f1->getOutput(0)->setOptimizability(true);
  24. OptimizerEvolutionary optimizer;
  25. optimizer.connect(f1);
  26. config = json::parse(optimizer.getConfiguration());
  27. config[0]["value"] = 3;
  28. optimizer.configure(config.dump());
  29. optimizer.setEvaluation("out0");
  30. auto res = optimizer.update();
  31. //std::cout << res.dump() << std::endl;
  32. EXPECT_EQ(res[0][0]* res[1][0],-100);
  33. }
  34. TEST(OptimizerEvolutionary, OptimizeSimpleFormulaWithSimpleRestriction) {
  35. //optimize f(x)=a*b
  36. IModule::Ptr f1 = regi.generateModule("ModuleMath");
  37. json config = json::parse(f1->getConfiguration());
  38. config[0]["value"] = "multiply";
  39. f1->configure(config.dump());
  40. limits limit;
  41. limit.min = { -10 };
  42. limit.max = { 10 };
  43. limit.step = { 1 };
  44. limit.rule = "val[0] != -10";
  45. f1->getInput(0)->setLimits() = limit;
  46. f1->getInput(1)->setLimits() = limit;
  47. f1->getInput(0)->setOptimizability(true);
  48. f1->getInput(1)->setOptimizability(true);
  49. f1->getOutput(0)->setOptimizability(true);
  50. OptimizerEvolutionary optimizer;
  51. optimizer.connect(f1);
  52. config = json::parse(optimizer.getConfiguration());
  53. config[0]["value"] = 3;
  54. optimizer.configure(config.dump());
  55. optimizer.setEvaluation("out0");
  56. auto res = optimizer.update();
  57. //std::cout << res.dump() << std::endl;
  58. EXPECT_EQ(res[0][0]* res[1][0],-90);
  59. }
  60. //*/
  61. }