test_OptimizerEvolutionary.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include <gtest/gtest.h>
  2. #include <json.hpp>
  3. //#define private public
  4. #include "OptimizerEvolutionary.h"
  5. #include <ModuleSwitch.h>
  6. /*
  7. using namespace mdd;
  8. TEST(OptimizerEvolutionary, OptimizeSimpleFormula) {
  9. //optimize f(x)=a*b
  10. std::shared_ptr<ModuleMath> f1 = std::make_shared<ModuleMath>(MathOperation::MULTIPLY);
  11. auto inputs = f1->getInputIDs();
  12. auto outputs = f1->getOutputIDs();
  13. limits limit;
  14. limit.min = { -10 };
  15. limit.max = { 10 };
  16. limit.step = { 1 };
  17. f1->getInput(inputs[0])->setLimits() = limit;
  18. f1->getInput(inputs[1])->setLimits() = limit;
  19. f1->getInput(inputs[0])->setOptimizability(true);
  20. f1->getInput(inputs[1])->setOptimizability(true);
  21. f1->getOutput(outputs[0])->setOptimizability(true);
  22. OptimizerEvolutionary optimizer(f1, 5);
  23. optimizer.setEvaluation("out0");
  24. auto res = optimizer.update();
  25. //std::cout << res.dump() << std::endl;
  26. EXPECT_EQ(res[0][0]* res[1][0],-100);
  27. }
  28. TEST(OptimizerEvolutionary, OptimizeSimpleFormulaWithSimpleRestriction) {
  29. //optimize f(x)=a*b
  30. std::shared_ptr<ModuleMath> f1 = std::make_shared<ModuleMath>(MathOperation::MULTIPLY);
  31. auto inputs = f1->getInputIDs();
  32. auto outputs = f1->getOutputIDs();
  33. limits limit;
  34. limit.min = { -10 };
  35. limit.max = { 10 };
  36. limit.step = { 1 };
  37. limit.rule = "val[0] != -10";
  38. f1->getInput(inputs[0])->setLimits() = limit;
  39. f1->getInput(inputs[1])->setLimits() = limit;
  40. f1->getInput(inputs[0])->setOptimizability(true);
  41. f1->getInput(inputs[1])->setOptimizability(true);
  42. f1->getOutput(outputs[0])->setOptimizability(true);
  43. OptimizerEvolutionary optimizer(f1, 3);
  44. optimizer.setEvaluation("out0");
  45. auto res = optimizer.update();
  46. //std::cout << res.dump() << std::endl;
  47. EXPECT_EQ(res[0][0] * res[1][0], -90);
  48. }
  49. TEST(OptimizerEvolutionary, exprtk) {
  50. json a;
  51. a["value"] = { 1,2,3 };
  52. exprtk::symbol_table<double> symbol_table;
  53. auto v = a["value"].get<std::vector<double>>();
  54. //std::cout << v[0] << "|" << v[1] << "|" << v[2] << std::endl;
  55. symbol_table.add_vector("in" + std::to_string(0), v);
  56. symbol_table.add_constants();
  57. exprtk::expression<double> _func_expr;
  58. _func_expr.register_symbol_table(symbol_table);
  59. exprtk::parser<double> parser;
  60. //"in0[1]==in0[1]"=>1
  61. //"in0[1]!=in0[1]"=>0
  62. //std::cout << _func_expr.value() << std::endl;
  63. //std::cout << res.dump() << std::endl;
  64. parser.compile("in0[1]==in0[1]", _func_expr);
  65. EXPECT_EQ(_func_expr.value(), 1);
  66. parser.compile("in0[1]!=in0[1]", _func_expr);
  67. EXPECT_EQ(_func_expr.value(), 0);
  68. }*/