test_Ansys.cpp 10 KB

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