test_OptimizerEvolutionary.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 = f1->getConfiguration();
  13. config["configure"]["operation"]["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() = std::make_shared<limits>(limit);
  20. f1->getInput(1)->setLimits() = std::make_shared<limits>(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 = optimizer.getConfiguration();
  27. config[0]["value"] = 5;
  28. optimizer.configure(config.dump());
  29. optimizer.setEvaluation("out0");
  30. optimizer.update();
  31. auto res = optimizer.getBests()[0].dna;
  32. //std::cout << res.dump() << std::endl;
  33. EXPECT_EQ(res[0][0]* res[1][0],-100);
  34. }
  35. TEST(OptimizerEvolutionary, OptimizeSimpleFormulaWithSimpleRestriction) {
  36. //optimize f(x)=a*b
  37. IModule::Ptr f1 = regi.generateModule("ModuleMath");
  38. json config = f1->getConfiguration();
  39. config["configure"]["operation"]["value"] = "multiply";
  40. f1->configure(config);
  41. limits limit;
  42. limit.min = { -10 };
  43. limit.max = { 10 };
  44. limit.step = { 1 };
  45. limit.rule = "val[0] != -10";
  46. f1->getInput(0)->setLimits() = std::make_shared<limits>(limit);
  47. f1->getInput(1)->setLimits() = std::make_shared<limits>(limit);
  48. f1->getInput(0)->setOptimizability(true);
  49. f1->getInput(1)->setOptimizability(true);
  50. f1->getOutput(0)->setOptimizability(true);
  51. OptimizerEvolutionary optimizer;
  52. optimizer.connect(f1);
  53. config = optimizer.getConfiguration();
  54. config["converges"]["value"] = 5;
  55. optimizer.configure(config);
  56. optimizer.setEvaluation("out0");
  57. optimizer.update();
  58. auto res = optimizer.getBests()[0].dna;
  59. //std::cout << res.dump() << std::endl;
  60. EXPECT_EQ(res[0][0]* res[1][0],-90);
  61. }
  62. //*/
  63. }