From f598d6a46ec73cdd7d41a7e60ade9db81bdfd12f Mon Sep 17 00:00:00 2001 From: iasonmanolas Date: Mon, 15 Nov 2021 11:28:12 +0200 Subject: [PATCH] Refactoring --- CMakeLists.txt | 6 ++++-- src/main.cpp | 12 +++--------- src/reducedmodeloptimizer.cpp | 32 +++++++++++++++++--------------- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a1ebc1a..fd83cf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,9 @@ cmake_minimum_required(VERSION 2.8) project(ReducedModelOptimization) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) - message(STATUS "The compiler ${CMAKE_CXX_COMPILER}") +message(STATUS "The compiler ${CMAKE_CXX_COMPILER}") + +SET(CMAKE_SYSTEM_NAME Windows) #Add the project cmake scripts to the module path list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) @@ -42,7 +44,7 @@ download_project(PROJ POLYSCOPE add_subdirectory(${POLYSCOPE_SOURCE_DIR} ${POLYSCOPE_BINARY_DIR}) add_compile_definitions(POLYSCOPE_DEFINED) endif() - +set(MYSOURCES_STATIC_LINK NOT ${USE_POLYSCOPE}) set(MYSOURCES_SOURCE_DIR "/home/iason/Coding/Libraries/MySources") if (EXISTS ${MYSOURCES_SOURCE_DIR}) diff --git a/src/main.cpp b/src/main.cpp index 3bcfbe4..bc1be9d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -48,20 +48,20 @@ int main(int argc, char *argv[]) { ReducedPatternOptimization::xRange innerHexagonAngle{"HexAngle", -30.0, 30.0}; ReducedPatternOptimization::Settings settings_optimization; settings_optimization.xRanges - = {beamE, beamA, beamI2, beamI3, beamJ, innerHexagonSize, innerHexagonAngle}; + = {/*beamE,*/ beamA, beamI2, beamI3, beamJ, innerHexagonSize, innerHexagonAngle}; const bool input_numberOfFunctionCallsDefined = argc >= 4; settings_optimization.numberOfFunctionCalls = input_numberOfFunctionCallsDefined ? std::atoi(argv[3]) : 100; settings_optimization.normalizationStrategy = ReducedPatternOptimization::Settings::NormalizationStrategy::Epsilon; - + settings_optimization.splitGeometryMaterialOptimization = false; settings_optimization.translationNormalizationParameter = 1e-3; settings_optimization.rotationNormalizationParameter = vcg::math::ToRad(3.0); // settings_optimization.translationNormalizationParameter = 1e-15; // settings_optimization.rotationNormalizationParameter = vcg::math::ToRad(1e-15); // settings_optimization.solverAccuracy = 1e-3; - settings_optimization.solverAccuracy = 1e-3; + settings_optimization.solverAccuracy = 1e-1; settings_optimization.objectiveWeights.translational = std::atof(argv[4]); settings_optimization.objectiveWeights.rotational = 2 - std::atof(argv[4]); @@ -129,7 +129,6 @@ int main(int argc, char *argv[]) { if (optimizationResults.wasSuccessful) { resultsOutputDir = convergedJobsDirPath.string(); csvFile csv_results({}, false); - // csvFile csv_results(std::filesystem::path(resultsOutputDir).append("optimizationDistances.csv"), false); csv_results << "Name"; optimizationResults.writeHeaderTo(csv_results); settings_optimization.writeHeaderTo(csv_results); @@ -146,11 +145,6 @@ int main(int argc, char *argv[]) { #ifdef POLYSCOPE_DEFINED // optimizationResults.saveMeshFiles(); - std::cout << "E:" - << optimizationResults.reducedPatternSimulationJobs[0] - ->pMesh->elements[0] - .material.youngsModulus - << std::endl; optimizationResults.draw(); #endif diff --git a/src/reducedmodeloptimizer.cpp b/src/reducedmodeloptimizer.cpp index 0a882f4..fc01f31 100644 --- a/src/reducedmodeloptimizer.cpp +++ b/src/reducedmodeloptimizer.cpp @@ -20,10 +20,9 @@ struct GlobalOptimizationVariables { std::vector> fullPatternInterfaceViPairs; matplot::line_handle gPlotHandle; - std::vector objectiveValueHistoryY; - std::vector objectiveValueHistoryX; + std::vector objectiveValueHistory_iteration; + std::vector objectiveValueHistory; std::vector plotColors; - size_t iterationOfMinima{0}; Eigen::VectorXd initialParameters; std::vector simulationScenarioIndices; double minY{DBL_MAX}; @@ -259,7 +258,8 @@ double ReducedModelOptimizer::objective(const dlib::matrix &x) ++global.numberOfFunctionCalls; if (totalError < global.minY) { global.minY = totalError; - global.iterationOfMinima = global.numberOfFunctionCalls; + global.objectiveValueHistory.push_back(totalError); + global.objectiveValueHistory_iteration.push_back(global.numberOfFunctionCalls); // std::cout << "New best:" << totalError << std::endl; // // global.minX.assign(x.begin(), x.begin() + n); // std::cout.precision(17); @@ -961,7 +961,8 @@ void ReducedModelOptimizer::getResults(const dlib::function_evaluation &optimiza // global.reducedPatternSimulationJobs[simulationScenarioIndex]->pMesh->registerForDrawing(); // global.reducedPatternSimulationJobs[simulationScenarioIndex]->pMesh->setLabel(temp); } - results.iterationOfMinima = global.iterationOfMinima; + results.objectiveValueHistory = global.objectiveValueHistory; + results.objectiveValueHistory_iteration = global.objectiveValueHistory_iteration; // results.draw(); } @@ -1029,16 +1030,17 @@ ReducedModelOptimizer::getFullPatternMaxSimulationForces( void ReducedModelOptimizer::runOptimization(const Settings &settings, ReducedPatternOptimization::Results &results) { + global.objectiveValueHistory.clear(); + global.objectiveValueHistory_iteration.clear(); + global.objectiveValueHistory.reserve(settings.numberOfFunctionCalls / 100); + global.objectiveValueHistory_iteration.reserve(settings.numberOfFunctionCalls / 100); + #if POLYSCOPE_DEFINED - global.objectiveValueHistoryY.clear(); - global.objectiveValueHistoryY.reserve(settings.numberOfFunctionCalls); - global.objectiveValueHistoryX.reserve(settings.numberOfFunctionCalls); global.plotColors.reserve(settings.numberOfFunctionCalls); #endif double (*objF)(const dlib::matrix &) = &objective; dlib::function_evaluation optimalResult; - constexpr bool shouldJointlyOptimizeGeometryAndMaterial = false; const auto hexAngleParameterIt = std::find_if(settings.xRanges.begin(), settings.xRanges.end(), [](const xRange &x) { @@ -1058,7 +1060,7 @@ void ReducedModelOptimizer::runOptimization(const Settings &settings, - numberOfGeometryOptimizationParameters; const bool hasGeometryAndMaterialParameters = hasBothGeometricalParameters && numberOfMaterialOptimizationParameters != 0; - if (!shouldJointlyOptimizeGeometryAndMaterial && hasGeometryAndMaterialParameters) { + if (settings.splitGeometryMaterialOptimization && hasGeometryAndMaterialParameters) { //Geometry optimization of the reduced pattern dlib::matrix xGeometryMin(numberOfGeometryOptimizationParameters); dlib::matrix xGeometryMax(numberOfGeometryOptimizationParameters); @@ -1145,11 +1147,11 @@ void ReducedModelOptimizer::runOptimization(const Settings &settings, std::copy(result_dlib_geometry.x.begin(), result_dlib_geometry.x.end(), optimalResult.x.begin() + numberOfMaterialOptimizationParameters); - std::cout << "opt x:"; - for (const auto optx : optimalResult.x) { - std::cout << optx << " "; - } - std::cout << std::endl; + // std::cout << "opt x:"; + // for (const auto optx : optimalResult.x) { + // std::cout << optx << " "; + // } + // std::cout << std::endl; function_updateReducedPattern = [&](const dlib::matrix &x, std::shared_ptr &pReducedPatternSimulationMesh) {