#include #include #include #include #include "Registration.h" #include "OptimizerEvolutionary.h" #include "ProcessorStandard.h" #include #include using namespace mdd; namespace TEST_ANSYS { auto regi = Registration(); TEST(ModuleHTTP, test_ansys_sql_server) { auto sql = regi.generateModule("ModuleSQL"); json config = json::parse(sql->getConfiguration()); config[0]["value"] = "../../../lib/test/db/materials.db"; sql->configure(config.dump()); auto http = regi.generateModule("ModuleHTTP");// ("", "localhost", 8888); config = json::parse(http->getConfiguration()); config[0]["value"] = ""; config[1]["value"] = "localhost"; config[2]["value"] = 8888; http->configure(config.dump()); //../../../lib/test/server/server-ansys.py sql->getInput(0)->setValue() = { 1 }; for (size_t i = 0; i < http->getNumInputs(); i++) { std::cout << http->getInput(i)->getValue()[0] << std::endl; } for (size_t i = 2; i < sql->getNumOutputs(); i++)//0: ID 1: Name { http->getInput(i - 2)->connect(sql->getOutput(i)); } http->getInput(http->getNumInputs() - 1)->setOptimizability(true); limits limit; limit.min = { 0, 0, 0, 0, 0, 0 }; limit.max = { 90, 90, 90, 90, 90, 90 }; limit.rule = "val[0] != val[5] || val[1] != val[4] || val[2] != val[3]"; http->getInput(http->getNumInputs() - 1)->setLimits() = limit; http->getInput(http->getNumInputs() - 1)->setValue() = { 90,90,0,90,0,90 }; http->getOutput(0)->setOptimizability(true); sql->update(); //test SQL std::cout << "SQL-TEST" << std::endl; for (size_t i = 2; i < sql->getNumOutputs(); i++) { std::cout << sql->getOutput(i)->getValue()[0] << std::endl; } http->update(); EXPECT_FLOAT_EQ(http->getOutput(3)->getValue()[0], 31.204228291286723); } TEST(ModuleHTTP, test_configurations) { auto sql = regi.generateModule("ModuleSQL"); json config = json::parse(sql->getConfiguration()); config[0]["value"] = "../../../lib/test/db/materials.db"; sql->configure(config.dump()); auto http = regi.generateModule("ModuleHTTP");// ("", "localhost", 8888); config = json::parse(http->getConfiguration()); config[0]["value"] = ""; config[1]["value"] = "localhost"; config[2]["value"] = 8888; http->configure(config.dump()); //../../../lib/test/server/server-ansys.py sql->getInput(0)->setValue() = { 1 }; for (size_t i = 0; i < http->getNumInputs(); i++) { std::cout << http->getInput(i)->getValue()[0] << std::endl; } for (size_t i = 2; i < sql->getNumOutputs(); i++)//0: ID 1: Name { http->getInput(i - 2)->connect(sql->getOutput(i)); } http->getInput(http->getNumInputs() - 1)->setOptimizability(true); limits limit; limit.min = { 0, 0, 0, 0, 0, 0 }; limit.max = { 90, 90, 90, 90, 90, 90 }; limit.rule = "val[0] != val[5] || val[1] != val[4] || val[2] != val[3]"; http->getInput(http->getNumInputs() - 1)->setLimits() = limit; http->getOutput(0)->setOptimizability(true); std::shared_ptr processor = std::make_shared();; processor->addModule(sql); processor->addModule(http); OptimizerEvolutionary optimizer; config = json::parse(optimizer.getConfiguration()); config[0]["value"] = 3; config[1]["value"] = 20; config[2]["value"] = 0.13; config[3]["value"] = 5; optimizer.configure(config.dump()); optimizer.connect(processor); optimizer.setEvaluation("out0"); //auto res = optimizer.update(); OptimizerEvolutionary::Individual ind; auto start = std::chrono::steady_clock::now(); auto end = std::chrono::steady_clock::now(); /* ind.dna = { { 0,0,0,0,0,0 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 0,0,0,0,0,0 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 90,90,90,90,90,90 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 90,90,90,90,90,90 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; //*/ ind.dna = { { 90,0,0,0,0,0 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 90,0,0,0,0,0 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 0,0,0,0,0,90 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 0,0,0,0,0,90 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 0,90,90,90,90,90 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 0,90,90,90,90,90 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end-start).count() << "ms" << std::endl; ind.dna = { { 90,90,90,90,90,0 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 90,90,90,90,90,0 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 90,0,0,0,90,0 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 90,0,0,0,90,0 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 90,0,0,0,90,0 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 90,0,0,0,90,0 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 90,0,0,0,90,0 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 90,0,0,0,90,0 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 0,0,90,90,90,90 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 0,0,90,90,90,90 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; ind.dna = { { 0,0,90,90,90,90 } }; start = std::chrono::steady_clock::now(); std::cout << "{ 0,0,90,90,90,90 }: " << optimizer.evaluateFitness(ind); end = std::chrono::steady_clock::now(); std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; EXPECT_TRUE(ind.fitness <= 100.0); } TEST(ModuleHTTP, test_ansys_server) { auto sql = regi.generateModule("ModuleSQL"); json config = json::parse(sql->getConfiguration()); config[0]["value"] = "../../../lib/test/db/materials.db"; sql->configure(config.dump()); auto http = regi.generateModule("ModuleHTTP");// ("", "localhost", 8888); config = json::parse(http->getConfiguration()); config[0]["value"] = ""; config[1]["value"] = "localhost"; config[2]["value"] = 8888; http->configure(config.dump()); //../../../lib/test/server/server-ansys.py sql->getInput(0)->setValue() = { 1 }; for (size_t i = 0; i < http->getNumInputs(); i++) { std::cout << http->getInput(i)->getValue()[0] << std::endl; } for (size_t i = 2; i < sql->getNumOutputs(); i++)//0: ID 1: Name { http->getInput(i - 2)->connect(sql->getOutput(i)); } http->getInput(http->getNumInputs() - 1)->setOptimizability(true); limits limit; limit.min = { 0, 0, 0, 0, 0, 0 }; limit.max = { 90, 90, 90, 90, 90, 90 }; limit.rule = "val[0] != val[5] || val[1] != val[4] || val[2] != val[3]"; http->getInput(http->getNumInputs() - 1)->setLimits() = limit; http->getOutput(0)->setOptimizability(true); std::shared_ptr processor = std::make_shared();; processor->addModule(sql); processor->addModule(http); OptimizerEvolutionary optimizer; config = json::parse(optimizer.getConfiguration()); config[0]["value"] = 3; config[1]["value"] = 20; config[2]["value"] = 13.4; config[3]["value"] = 5; optimizer.configure(config.dump()); optimizer.connect(processor); optimizer.setEvaluation("out0"); auto start = std::chrono::steady_clock::now(); auto res = optimizer.update(); auto end = std::chrono::steady_clock::now(); std::cout << optimizer.getBests()[0].fitness; std::cout << " | " << std::chrono::duration_cast(end - start).count() << "ms" << std::endl; std::cout << optimizer.evaluateFitness(optimizer.getBests()[0]) << std::endl; EXPECT_TRUE(optimizer.getBests()[0].fitness <= 100.0); } //*/ }