test_Ansys.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include <gtest/gtest.h>
  2. #include <json.hpp>
  3. #include <httplib.h>
  4. //#define private public
  5. #include "OptimizerEvolutionary.h"
  6. #include <ProcessorStandard.h>
  7. #include <ModuleHTTP.h>
  8. #include <ModuleSQL.h>
  9. #include <ModuleMath.h>
  10. #include <ModuleSwitch.h>
  11. #include <math.h>
  12. #include <thread>
  13. using namespace mdd;
  14. TEST(ModuleHTTP, test_ansys_sql_server) {
  15. std::shared_ptr<ModuleSQL> sql = std::make_shared<ModuleSQL>("../../../lib/test/db/materials.db");
  16. std::shared_ptr<ModuleHTTP> http = std::make_shared<ModuleHTTP>("", "localhost", 8888);//../../../lib/test/server/server-ansys.py
  17. auto sql_inputs = sql->getInputIDs();
  18. auto sql_outputs = sql->getOutputIDs();
  19. auto http_inputs = http->getInputIDs();
  20. auto http_outputs = http->getOutputIDs();
  21. sql->getInput(sql_inputs[0])->setValue() = { 1 };
  22. //test http
  23. std::cout << "http-TEST" << std::endl;
  24. for (size_t i = 0; i < http_inputs.size(); i++)
  25. {
  26. std::cout << http->getInput(http_inputs[i])->getValue()[0] << std::endl;
  27. }
  28. for (size_t i = 2; i < sql_outputs.size(); i++)//0: ID 1: Name
  29. {
  30. http->getInput(http_inputs[i - 2])->connect(sql->getOutput(sql_outputs[i]));
  31. }
  32. http->getInput(http_inputs.back())->setOptimizability(true);
  33. limits limit;
  34. limit.min = { 0, 0, 0, 0, 0, 0 };
  35. limit.max = { 90, 90, 90, 90, 90, 90 };
  36. limit.rule = "val[0] != val[5] || val[1] != val[4] || val[2] != val[3]";
  37. http->getInput(http_inputs.back())->setLimits() = limit;
  38. //http->getInput(http_inputs.back())->setValue().clear();
  39. http->getInput(http_inputs.back())->setValue() = { 90,90,0,90,0,90 };
  40. http->getOutput(http_outputs[3])->setOptimizability(true);
  41. sql->update();
  42. //test SQL
  43. std::cout << "SQL-TEST" << std::endl;
  44. for (size_t i = 2; i < sql_outputs.size(); i++)
  45. {
  46. std::cout<< sql->getOutput(sql_outputs[i])->getValue()[0] <<std::endl;
  47. }
  48. http->update();
  49. EXPECT_FLOAT_EQ(http->getOutput(http_outputs[3])->getValue()[0], 0.31204228291286723);
  50. }
  51. TEST(ModuleHTTP, test_configurations) {
  52. std::shared_ptr<ModuleSQL> sql = std::make_shared<ModuleSQL>("../../../lib/test/db/materials.db");
  53. std::shared_ptr<ModuleHTTP> http = std::make_shared<ModuleHTTP>("", "localhost", 8888);//../../../lib/test/server/server-ansys.py
  54. auto sql_inputs = sql->getInputIDs();
  55. auto sql_outputs = sql->getOutputIDs();
  56. auto http_inputs = http->getInputIDs();
  57. auto http_outputs = http->getOutputIDs();
  58. sql->getInput(sql_inputs[0])->setValue() = { 1 };
  59. for (size_t i = 2; i < sql_outputs.size(); i++)//0: ID 1: Name
  60. {
  61. http->getInput(http_inputs[i - 2])->connect(sql->getOutput(sql_outputs[i]));
  62. }
  63. http->getInput(http_inputs.back())->setOptimizability(true);
  64. limits limit;
  65. limit.min = { 0, 0, 0, 0, 0, 0 };
  66. limit.max = { 90, 90, 90, 90, 90, 90 };
  67. limit.rule = "val[0] != val[5] or val[1] != val[4] or val[2] != val[3]";
  68. http->getInput(http_inputs.back())->setLimits() = limit;
  69. http->getOutput(http_outputs[3])->setOptimizability(true);
  70. std::shared_ptr<ProcessorStandard> processor = std::make_shared<ProcessorStandard>();;
  71. processor->addModule(sql);
  72. processor->addModule(http);
  73. auto mods = processor->getModuleIDs();
  74. OptimizerEvolutionary optimizer(processor, 3, 20, 0.13, 5);
  75. optimizer.setEvaluation("out0");
  76. //auto res = optimizer.update();
  77. OptimizerEvolutionary::Individual ind;
  78. ind.dna = { { 0,90,90,90,90,90 } };
  79. std::cout << "{ 0,90,90,90,90,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  80. ind.dna = { { 90,90,90,90,90,0 } };
  81. std::cout << "{ 90,90,90,90,90,0 }: " << optimizer.evaluateFitness(ind) << std::endl;
  82. ind.dna = { { 90,0,0,0,0,0 } };
  83. std::cout << "{ 90,0,0,0,0,0 }: " << optimizer.evaluateFitness(ind) << std::endl;
  84. ind.dna = { { 0,0,0,0,0,90 } };
  85. std::cout << "{ 0,0,0,0,0,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  86. ind.dna = { { 0,0,0,0,0,0 } };
  87. std::cout << "{ 0,0,0,0,0,0 }: " << optimizer.evaluateFitness(ind) << std::endl;
  88. ind.dna = { { 90,90,90,90,90,90 } };
  89. std::cout << "{ 90,90,90,90,90,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  90. ind.dna = { { 0,0,90,90,90,90 } };
  91. std::cout << "{ 0,0,90,90,90,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  92. EXPECT_TRUE(ind.fitness <= 100.0);
  93. }
  94. TEST(ModuleHTTP, test_ansys_server) {
  95. std::shared_ptr<ModuleSQL> sql = std::make_shared<ModuleSQL>("../../../lib/test/db/materials.db");
  96. std::shared_ptr<ModuleHTTP> http = std::make_shared<ModuleHTTP>("", "localhost", 8888);//../../../lib/test/server/server-ansys.py
  97. auto sql_inputs = sql->getInputIDs();
  98. auto sql_outputs = sql->getOutputIDs();
  99. auto http_inputs = http->getInputIDs();
  100. auto http_outputs = http->getOutputIDs();
  101. sql->getInput(sql_inputs[0])->setValue() = { 1 };
  102. for (size_t i = 2; i < sql_outputs.size(); i++)//0: ID 1: Name
  103. {
  104. http->getInput(http_inputs[i - 2])->connect(sql->getOutput(sql_outputs[i]));
  105. }
  106. http->getInput(http_inputs.back())->setOptimizability(true);
  107. limits limit;
  108. limit.min = { 0, 0, 0, 0, 0, 0 };
  109. limit.max = { 90, 90, 90, 90, 90, 90 };
  110. limit.rule = "val[0] != val[5] or val[1] != val[4] or val[2] != val[3]";
  111. http->getInput(http_inputs.back())->setLimits() = limit;
  112. http->getOutput(http_outputs[3])->setOptimizability(true);
  113. std::shared_ptr<ProcessorStandard> processor = std::make_shared<ProcessorStandard>();;
  114. processor->addModule(sql);
  115. processor->addModule(http);
  116. auto mods = processor->getModuleIDs();
  117. OptimizerEvolutionary optimizer(processor, 3, 20, 0.13, 5);
  118. optimizer.setEvaluation("out0");
  119. auto res = optimizer.update();
  120. std::cout << optimizer.getBest().fitness << std::endl;
  121. std::cout << optimizer.evaluateFitness(optimizer.getBest()) << std::endl;
  122. EXPECT_TRUE(optimizer.getBest().fitness <= 100.0);
  123. }