Browse Source

Real Test

Willi Zschiebsch 4 years ago
parent
commit
36220ee174

+ 1 - 0
lib/include/OptimizerBase.h

@@ -67,6 +67,7 @@ namespace mdd {
 		//state update() override;
 		void callback_add_step(const std::vector<Permutation>& pers);
 		void callback_evaluate_opt(const Permutation& per);
+		void callback_autosave();
 		void callback_reset();
 		~OptimizerBase();
 

+ 10 - 3
lib/src/Connector.cpp

@@ -191,7 +191,7 @@ namespace mdd {
 				auto jobj_conf = jobj->find("configure");
 				if (jobj_conf != jobj->end())
 				{
-					jargs["object"]["configure"] = module_ptr->dump();
+					jargs["object"] = module_ptr->dump();
 				}
 				else {
 					jargs["object"] = *jobj;
@@ -209,7 +209,7 @@ namespace mdd {
 			module_ptr->configure(*jobj);
 			if (jobj->contains("configure"))
 			{
-				jargs["object"]["configure"] = module_ptr->dump();
+				jargs["object"] = module_ptr->dump();
 			}
 			else {
 				jargs["object"] = *jobj;
@@ -406,12 +406,19 @@ namespace mdd {
 	}
 
 	json Connector::optimizerCallback(const json& callback) {
+		auto jit = callback.find("operation");
+		if (jit != callback.end())
+		{
+			if (jit->get<std::string>() == "autosave")
+			{
+				return save(callback);
+			}
+		}
 		return _callback(callback);
 	}
 
 	Connector::Connector()
 	{
-		
 		json path;
 		load(path);
 	}

+ 8 - 4
lib/src/Input.cpp

@@ -163,11 +163,15 @@ namespace mdd{
             success = true;
         }
 
-        jit = jconfig.find("appendix");
-        if (jit != jconfig.end())
+        jit = jparse.find("ID");
+        if (jit != jparse.end())
         {
-            _appendix = jit.value().get<int>();
-            success = true;
+            auto jit2 = jit->find("appendix");
+            if (jit2 != jit->end())
+            {
+                _appendix = jit2.value().get<int>();
+                success = true;
+            }
         }
 
         jit = jconfig.find("optimizable");

+ 1 - 1
lib/src/ModuleHTTP.cpp

@@ -150,7 +150,7 @@ namespace mdd{
         },
         "GUI":{
             "name":{
-                "value": "#HTTP"
+                "value": "HTTP"
             },
             "color":{
                 "value": "#0257ad"

+ 25 - 5
lib/src/ModuleSQL.cpp

@@ -95,7 +95,10 @@ namespace mdd {
 	}
 
 	ModuleSQL::~ModuleSQL() {
-		sqlite3_close(_db);
+		if (_db != nullptr)
+		{
+			sqlite3_close(_db);
+		}
 	}
 
 	bool ModuleSQL::configureChild(const json& config) {
@@ -212,11 +215,28 @@ namespace mdd {
 		{
 			return false;
 		}
-		inputs.push_back(std::make_shared<Input>(_content[0].key, inputs.size()));
-		inputs.back()->setParent(shared_from_this());
-		for (auto& cont : _content)
+
+		if (inputs.size()<1)
+		{
+			inputs.push_back(std::make_shared<Input>(_content[0].key, inputs.size()));
+			inputs.back()->setParent(shared_from_this());
+		}
+		else
+		{
+			inputs[0]->setName(_content[0].key);
+		}
+		
+		if (outputs.size() > _content.size())
+		{
+			outputs.erase(outputs.begin() + (_content.size() - 1), outputs.begin() + (outputs.size() - 1));
+		}
+		for (int i = 0; i < outputs.size(); ++i)
+		{
+			outputs[0]->setName(_content[i].key);
+		}
+		for (int i = outputs.size(); i < _content.size(); ++i)
 		{
-			outputs.push_back(std::make_shared<Output>(cont.key, outputs.size()));
+			outputs.push_back(std::make_shared<Output>(_content[i].key, outputs.size()));
 			outputs.back()->setParent(shared_from_this());
 		}
 

+ 27 - 2
lib/src/OptimizerBase.cpp

@@ -260,6 +260,16 @@ namespace mdd{
 		_callback(jcall);
 	}
 
+	void OptimizerBase::callback_autosave(){
+		_mutex.lock();
+		_base_config["optimizer"]["state"]["value"] = "pause";
+		json jcall;
+		jcall["operation"] = "autosave";
+		_callback(jcall);
+		_base_config["optimizer"]["state"]["value"] = "run";
+		_mutex.unlock();
+	}
+
 	void OptimizerBase::callback_reset() {
 		json ret;
 		ret["step"] = step;
@@ -492,6 +502,7 @@ namespace mdd{
 
 		return ret && found;
 	}
+
 	bool OptimizerBase::loadStepDB(const json& j) {
 		bool ret = true;
 		for (size_t i = 0; i < j.size(); i++)
@@ -526,11 +537,25 @@ namespace mdd{
 
 	bool OptimizerBase::addPermutation(const json& jper) {
 		// Create SQL statement
-		std::string sval = "'" + jper["dna"].dump() + "', " + jper["fitness"].dump() + ", " + jper["time"].dump() + ", " + jper["status"].dump();
+		std::string sval = "'";
+		if (jper["dna"].is_string())
+		{
+			sval += jper["dna"].get<std::string>();
+		}
+		else {
+			sval += jper["dna"].dump();
+		}
+		sval += "', " + jper["fitness"].dump() + ", " + jper["time"].dump() + ", " + jper["status"].dump();
 		auto it = jper.find("processor");
 		if (it != jper.end())
 		{
-			sval += ", " + it->dump();
+			if (it->is_string())
+			{
+				sval += ", '" + it->get<std::string>() + "'";
+			}
+			else {
+				sval += ", '" + it->dump() + "'";
+			}
 		}
 		else
 		{

+ 16 - 9
lib/src/OptimizerEvolutionary.cpp

@@ -94,6 +94,7 @@ namespace mdd {
 			}
 		}
 		_mutex.unlock();
+		callback_autosave();
 	}
 
 	OptimizerEvolutionary::OptimizerEvolutionary()
@@ -163,7 +164,7 @@ namespace mdd {
 			{
 				jval = json::parse(jval.get<std::string>());
 			}
-			_max_fitness = jval.get<int>();
+			_max_fitness = jval.get<double>();
 			_base_config["configure"]["max fitness"]["value"] = _max_fitness;
 			found = true;
 		}
@@ -382,15 +383,16 @@ namespace mdd {
 				while (not_found)
 				{
 					per = generatePermutation();
-					if (getPermutation(step, per.dna) == nullptr)
+					not_found = false;
+					for (size_t i = 0; i < _children.size(); i++)
 					{
-						not_found = false;
+						if (_children[i].dna == per.dna)
+						{
+							not_found = true;
+							break;
+						}
 					}
 				}
-				if (_children.size() != i)
-				{
-					int test = 0;
-				}
 				_children.push_back(per);
 			}
 		}
@@ -440,9 +442,14 @@ namespace mdd {
 					int p2 = (int)random_num(0, gen_pool.size() - 1);
 					per = combine(gen_pool[p1], gen_pool[p2]);
 					++try_counter;
-					if (getPermutation(step, per.dna) == nullptr)
+					not_found = false;
+					for (size_t i = 0; i < _children.size(); i++)
 					{
-						not_found = false;
+						if (_children[i].dna == per.dna)
+						{
+							not_found = true;
+							break;
+						}
 					}
 				}
 				_children.push_back(per);

+ 8 - 4
lib/src/Output.cpp

@@ -165,11 +165,15 @@ namespace mdd {
             success = true;
         }
 
-        jit = jconfig.find("appendix");
-        if (jit != jconfig.end())
+        jit = jparse.find("ID");
+        if (jit != jparse.end())
         {
-            _appendix = jit.value().get < int >();
-            success = true;
+            auto jit2 = jit->find("appendix");
+            if (jit2 != jit->end())
+            {
+                _appendix = jit2.value().get<int>();
+                success = true;
+            }
         }
 
         jit = jconfig.find("optimizable");

BIN
lib/test/db/optimization.db


+ 4 - 3
lib/test/server/gfk_plate.py

@@ -107,7 +107,7 @@ def sim_rotor(materials, angles, outer_diameter=0.250, inner_diameter=0.050, thi
     mapdl.mshkey(1)
     mapdl.vmesh("ALL")
 
-    mapdl.eplot("ALL")
+    # mapdl.eplot("ALL")
 
     for j in range(1, len(angles)+1):
         for i in range(0, 20*4):
@@ -142,7 +142,7 @@ def sim_rotor(materials, angles, outer_diameter=0.250, inner_diameter=0.050, thi
 
     result = mapdl.result
     # result.plot_nodal_solution(0, 'z', show_displacement=True)
-    result.plot_principal_nodal_stress(0, 'S1', show_edges=True, show_axes=True)
+    # result.plot_principal_nodal_stress(0, 'S1', show_edges=True, show_axes=True)
 
     # """
     nodenump, stress = result.principal_nodal_stress(0)
@@ -179,7 +179,8 @@ def sim_rotor(materials, angles, outer_diameter=0.250, inner_diameter=0.050, thi
     f = result.time_values
 
     mapdl.exit()
-    time.sleep(0.5)
+    while not mapdl._exited:
+        time.sleep(0.5)
 
     return s1max, s2max, srmax, stmax, f[0], f[1], f[2]
 

+ 8 - 3
lib/test/server/server-ansys.py

@@ -43,7 +43,11 @@ inputs = [
     {'type': "d11", 'value': [4.4E-3]},
     {'type': "d22", 'value': [3.1E-3]},
     {'type': "d33", 'value': [3.1E-3]},
-    {'type': "angles", 'value': [90, 0, 0, 0, 0, 0]}
+    {'type': "angles", 'value': [90, 0, 0, 0, 0, 0]},
+    {'type': "outer_diameter", 'value': [0.250]},
+    {'type': "inner_diameter", 'value': [0.050]},
+    {'type': "thickness", 'value': [0.005]},
+    {'type': "omega", 'value': [1]}
 ]
 
 outputs = [
@@ -65,14 +69,15 @@ def update():
     materials = []
     for i in range(0, len(inputs[0]['value'])):
         material = {}
-        for j in range(0, len(inputs) - 1):
+        for j in range(0, len(inputs) - 5):
             material[inputs[j]['type']] = inputs[j]['value'][i]
         materials.append(material)
     success = False
     while not success:
         try:
             outputs[0]['value'][0], outputs[1]['value'][0], outputs[2]['value'][0], outputs[3]['value'][
-                0], outputs[4]['value'][0], outputs[5]['value'][0], outputs[6]['value'][0] = gfk_plate.sim_rotor(materials, inputs[len(inputs) - 1]['value'])
+                0], outputs[4]['value'][0], outputs[5]['value'][0], outputs[6]['value'][0] = gfk_plate.sim_rotor(
+                materials, inputs[len(inputs) - 5]['value'], inputs[len(inputs) - 4]['value'][0],  inputs[len(inputs) - 3]['value'][0],  inputs[len(inputs) - 2]['value'][0],  inputs[len(inputs) - 1]['value'][0])
             success = True
         except PermissionError:
             print("Catch Error")