test_Ansys.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #include <gtest/gtest.h>
  2. #include <json.hpp>
  3. #include <httplib.h>
  4. #include "Registration.h"
  5. #include "OptimizerEvolutionary.h"
  6. #include "ProcessorStandard.h"
  7. #include <math.h>
  8. #include <thread>
  9. using namespace mdd;
  10. namespace TEST_ANSYS {
  11. auto regi = Registration();
  12. TEST(ModuleHTTP, test_ansys_sql_server) {
  13. auto sql = regi.generateModule("ModuleSQL");
  14. json config = json::parse(sql->getConfiguration());
  15. config[0]["value"] = "../../../lib/test/db/materials.db";
  16. sql->configure(config.dump());
  17. auto http = regi.generateModule("ModuleHTTP");// ("", "localhost", 8888);
  18. config = json::parse(http->getConfiguration());
  19. config[0]["value"] = "";
  20. config[1]["value"] = "localhost";
  21. config[2]["value"] = 8888;
  22. http->configure(config.dump());
  23. //../../../lib/test/server/server-ansys.py
  24. sql->getInput(0)->setValue() = { 1 };
  25. for (size_t i = 0; i < http->getNumInputs(); i++)
  26. {
  27. std::cout << http->getInput(i)->getValue()[0] << std::endl;
  28. }
  29. for (size_t i = 2; i < sql->getNumOutputs(); i++)//0: ID 1: Name
  30. {
  31. http->getInput(i - 2)->connect(sql->getOutput(i));
  32. }
  33. http->getInput(http->getNumInputs() - 1)->setOptimizability(true);
  34. limits limit;
  35. limit.min = { 0, 0, 0, 0, 0, 0 };
  36. limit.max = { 90, 90, 90, 90, 90, 90 };
  37. limit.rule = "val[0] != val[5] || val[1] != val[4] || val[2] != val[3]";
  38. http->getInput(http->getNumInputs() - 1)->setLimits() = limit;
  39. http->getInput(http->getNumInputs() - 1)->setValue() = { 90,90,0,90,0,90 };
  40. http->getOutput(3)->setOptimizability(true);
  41. sql->update();
  42. //test SQL
  43. std::cout << "SQL-TEST" << std::endl;
  44. for (size_t i = 2; i < sql->getNumOutputs(); i++)
  45. {
  46. std::cout << sql->getOutput(i)->getValue()[0] << std::endl;
  47. }
  48. http->update();
  49. EXPECT_FLOAT_EQ(http->getOutput(3)->getValue()[0], 0.31204228291286723);
  50. }
  51. TEST(ModuleHTTP, test_configurations) {
  52. auto sql = regi.generateModule("ModuleSQL");
  53. json config = json::parse(sql->getConfiguration());
  54. config[0]["value"] = "../../../lib/test/db/materials.db";
  55. sql->configure(config.dump());
  56. auto http = regi.generateModule("ModuleHTTP");// ("", "localhost", 8888);
  57. config = json::parse(http->getConfiguration());
  58. config[0]["value"] = "";
  59. config[1]["value"] = "localhost";
  60. config[2]["value"] = 8888;
  61. http->configure(config.dump());
  62. //../../../lib/test/server/server-ansys.py
  63. sql->getInput(0)->setValue() = { 1 };
  64. for (size_t i = 0; i < http->getNumInputs(); i++)
  65. {
  66. std::cout << http->getInput(i)->getValue()[0] << std::endl;
  67. }
  68. for (size_t i = 2; i < sql->getNumOutputs(); i++)//0: ID 1: Name
  69. {
  70. http->getInput(i - 2)->connect(sql->getOutput(i));
  71. }
  72. http->getInput(http->getNumInputs() - 1)->setOptimizability(true);
  73. limits limit;
  74. limit.min = { 0, 0, 0, 0, 0, 0 };
  75. limit.max = { 90, 90, 90, 90, 90, 90 };
  76. limit.rule = "val[0] != val[5] || val[1] != val[4] || val[2] != val[3]";
  77. http->getInput(http->getNumInputs() - 1)->setLimits() = limit;
  78. http->getOutput(3)->setOptimizability(true);
  79. std::shared_ptr<ProcessorStandard> processor = std::make_shared<ProcessorStandard>();;
  80. processor->addModule(sql);
  81. processor->addModule(http);
  82. OptimizerEvolutionary optimizer;
  83. config = json::parse(optimizer.getConfiguration());
  84. config[0]["value"] = 3;
  85. config[1]["value"] = 20;
  86. config[2]["value"] = 0.13;
  87. config[3]["value"] = 5;
  88. optimizer.configure(config.dump());
  89. optimizer.connect(processor);
  90. optimizer.setEvaluation("out0");
  91. //auto res = optimizer.update();
  92. OptimizerEvolutionary::Individual ind;
  93. ind.dna = { { 0,90,90,90,90,90 } };
  94. std::cout << "{ 0,90,90,90,90,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  95. ind.dna = { { 90,90,90,90,90,0 } };
  96. std::cout << "{ 90,90,90,90,90,0 }: " << optimizer.evaluateFitness(ind) << std::endl;
  97. ind.dna = { { 90,0,0,0,0,0 } };
  98. std::cout << "{ 90,0,0,0,0,0 }: " << optimizer.evaluateFitness(ind) << std::endl;
  99. ind.dna = { { 0,0,0,0,0,90 } };
  100. std::cout << "{ 0,0,0,0,0,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  101. ind.dna = { { 0,0,0,0,0,0 } };
  102. std::cout << "{ 0,0,0,0,0,0 }: " << optimizer.evaluateFitness(ind) << std::endl;
  103. ind.dna = { { 90,90,90,90,90,90 } };
  104. std::cout << "{ 90,90,90,90,90,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  105. ind.dna = { { 0,0,90,90,90,90 } };
  106. std::cout << "{ 0,0,90,90,90,90 }: " << optimizer.evaluateFitness(ind) << std::endl;
  107. EXPECT_TRUE(ind.fitness <= 100.0);
  108. }
  109. TEST(ModuleHTTP, test_ansys_server) {
  110. auto sql = regi.generateModule("ModuleSQL");
  111. json config = json::parse(sql->getConfiguration());
  112. config[0]["value"] = "../../../lib/test/db/materials.db";
  113. sql->configure(config.dump());
  114. auto http = regi.generateModule("ModuleHTTP");// ("", "localhost", 8888);
  115. config = json::parse(http->getConfiguration());
  116. config[0]["value"] = "";
  117. config[1]["value"] = "localhost";
  118. config[2]["value"] = 8888;
  119. http->configure(config.dump());
  120. //../../../lib/test/server/server-ansys.py
  121. sql->getInput(0)->setValue() = { 1 };
  122. for (size_t i = 0; i < http->getNumInputs(); i++)
  123. {
  124. std::cout << http->getInput(i)->getValue()[0] << std::endl;
  125. }
  126. for (size_t i = 2; i < sql->getNumOutputs(); i++)//0: ID 1: Name
  127. {
  128. http->getInput(i - 2)->connect(sql->getOutput(i));
  129. }
  130. http->getInput(http->getNumInputs() - 1)->setOptimizability(true);
  131. limits limit;
  132. limit.min = { 0, 0, 0, 0, 0, 0 };
  133. limit.max = { 90, 90, 90, 90, 90, 90 };
  134. limit.rule = "val[0] != val[5] || val[1] != val[4] || val[2] != val[3]";
  135. http->getInput(http->getNumInputs() - 1)->setLimits() = limit;
  136. http->getOutput(3)->setOptimizability(true);
  137. std::shared_ptr<ProcessorStandard> processor = std::make_shared<ProcessorStandard>();;
  138. processor->addModule(sql);
  139. processor->addModule(http);
  140. OptimizerEvolutionary optimizer;
  141. config = json::parse(optimizer.getConfiguration());
  142. config[0]["value"] = 3;
  143. config[1]["value"] = 20;
  144. config[2]["value"] = 0.13;
  145. config[3]["value"] = 5;
  146. optimizer.configure(config.dump());
  147. optimizer.connect(processor);
  148. optimizer.setEvaluation("out0");
  149. auto res = optimizer.update();
  150. std::cout << optimizer.getBest().fitness << std::endl;
  151. std::cout << optimizer.evaluateFitness(optimizer.getBest()) << std::endl;
  152. EXPECT_TRUE(optimizer.getBest().fitness <= 100.0);
  153. }
  154. //*/
  155. }