diff --git a/CMakeLists.txt b/CMakeLists.txt index da082e2..a1ebc1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ set(EXTERNAL_DEPS_DIR "C:/Users/iason/Downloads/ReducedModelOptimization/build/e else() set(EXTERNAL_DEPS_DIR "/home/iason/Coding/build/external dependencies/") endif() + ##Create directory for the external libraries file(MAKE_DIRECTORY ${EXTERNAL_DEPS_DIR}) diff --git a/src/main.cpp b/src/main.cpp index d55c0c6..038218d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -75,40 +75,47 @@ int main(int argc, char *argv[]) { const std::filesystem::path crashedJobsDirPath(std::filesystem::path(optimizationResultsDirectory) .append("CrashedJobs") .append(optimizationName)); - optimizationResultFolderExists |= std::filesystem::exists(crashedJobsDirPath); + if (std::filesystem::exists(crashedJobsDirPath)) { + resultsOutputDir = crashedJobsDirPath.string(); + optimizationResultFolderExists = true; + } const std::filesystem::path convergedJobsDirPath( std::filesystem::path(optimizationResultsDirectory) .append("ConvergedJobs") .append(optimizationName)); - optimizationResultFolderExists |= std::filesystem::exists(convergedJobsDirPath); + if (std::filesystem::exists(convergedJobsDirPath)) { + resultsOutputDir = convergedJobsDirPath.string(); + optimizationResultFolderExists = true; + } ReducedPatternOptimization::Results optimizationResults; - // bool optimizationAlreadyComputed = false; - // if (optimizationResultFolderExists) { - // if (optimizationResults.settings == settings_optimization - // && optimizationResults.load(resultsOutputDir)) { - // optimizationAlreadyComputed = true; - // } - // } + bool optimizationAlreadyComputed = false; + if (optimizationResultFolderExists) { + const bool resultsWereSuccessfullyLoaded = optimizationResults.load(resultsOutputDir); + if (resultsWereSuccessfullyLoaded && optimizationResults.settings == settings_optimization) { + optimizationAlreadyComputed = true; + } + } - // if (!optimizationAlreadyComputed) { - const std::vector numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1}; - assert(interfaceNodeIndex == numberOfNodesPerSlot[0] + numberOfNodesPerSlot[3]); - ReducedModelOptimizer optimizer(numberOfNodesPerSlot); - optimizer.initializePatterns(fullPattern, reducedPattern, settings_optimization.xRanges.size()); - optimizer.optimize(settings_optimization, optimizationResults); - optimizationResults.label = optimizationName; - optimizationResults.baseTriangleFullPattern.copy(fullPattern); - optimizationResults.settings = settings_optimization; + if (!optimizationAlreadyComputed) { + const std::vector numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1}; + assert(interfaceNodeIndex == numberOfNodesPerSlot[0] + numberOfNodesPerSlot[3]); + ReducedModelOptimizer optimizer(numberOfNodesPerSlot); + optimizer.initializePatterns(fullPattern, + reducedPattern, + settings_optimization.xRanges.size()); + optimizer.optimize(settings_optimization, optimizationResults); + optimizationResults.label = optimizationName; + optimizationResults.baseTriangleFullPattern.copy(fullPattern); + optimizationResults.settings = settings_optimization; - // Export results - if (optimizationResults.numberOfSimulationCrashes != 0) { - resultsOutputDir = crashedJobsDirPath.string(); + // Export results + if (optimizationResults.numberOfSimulationCrashes != 0) { + resultsOutputDir = crashedJobsDirPath.string(); } else { resultsOutputDir = convergedJobsDirPath.string(); } optimizationResults.save(resultsOutputDir); - // } // Write results in csv csvFile csv_results({}, false); @@ -124,11 +131,12 @@ int main(int argc, char *argv[]) { optimizationResults.writeResultsTo(settings_optimization, csv_results); settings_optimization.writeSettingsTo(csv_results); csv_results << endrow; + } - //#ifdef POLYSCOPE_DEFINED - // optimizationResults.saveMeshFiles(); - // optimizationResults.draw(); - //#endif + //#ifdef POLYSCOPE_DEFINED + // optimizationResults.saveMeshFiles(); + // optimizationResults.draw(); + //#endif - return 0; + return 0; } diff --git a/src/reducedmodeloptimizer.cpp b/src/reducedmodeloptimizer.cpp index cc18059..a9d64d9 100644 --- a/src/reducedmodeloptimizer.cpp +++ b/src/reducedmodeloptimizer.cpp @@ -1097,8 +1097,7 @@ double ReducedModelOptimizer::getFullPatternMaxSimulationForce(const BaseSimulat forceMagnitude, 1e-8, 1e8, - optimizationEpsilon, - 200); + optimizationEpsilon); break; case Dome: global.desiredMaxRotationAngle = vcg::math::ToRad(20.0); @@ -1109,10 +1108,10 @@ double ReducedModelOptimizer::getFullPatternMaxSimulationForce(const BaseSimulat forceMagnitude, 1e-8, 1e8, - vcg::math::ToRad(1.0), + vcg::math::ToRad(1.0) // global.desiredMaxRotationAngle * 0.5, // optimizationEpsilon, - 500); + ); break; case Saddle: // global.desiredMaxDisplacementValue *= 2; @@ -1121,15 +1120,13 @@ double ReducedModelOptimizer::getFullPatternMaxSimulationForce(const BaseSimulat (global.baseTriangle.cP(1) + global.baseTriangle.cP(2)) / 2); - // std::cout << "Saddle des disp:" << global.desiredMaxDisplacementValue << std::endl; global.constructScenarioFunction = &ReducedModelOptimizer::constructSaddleSimulationScenario; global.interfaceViForComputingScenarioError = global.fullPatternInterfaceViPairs[0].first; dlib::find_min_single_variable(&fullPatternMaxSimulationForceTranslationalObjective, forceMagnitude, 1e-8, 1e8, - 1e-2, - 150); + 1e-2); break; } @@ -1411,7 +1408,7 @@ void ReducedModelOptimizer::optimize( DRMSimulationModel::Settings simulationSettings; simulationSettings.shouldDraw = false; #ifdef POLYSCOPE_DEFINED - const bool drawFullPatternSimulationResults = true; + const bool drawFullPatternSimulationResults = false; ; if (drawFullPatternSimulationResults) { global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing( diff --git a/src/reducedmodeloptimizer.hpp b/src/reducedmodeloptimizer.hpp index 41c1b0f..f9411ea 100644 --- a/src/reducedmodeloptimizer.hpp +++ b/src/reducedmodeloptimizer.hpp @@ -30,7 +30,7 @@ class ReducedModelOptimizer std::unordered_map> slotToNode; public: - constexpr static std::array simulationScenariosResolution = {4, 4, 4, 4, 4}; + constexpr static std::array simulationScenariosResolution = {10, 10, 20, 20, 20}; inline static int totalNumberOfSimulationScenarios = std::accumulate(simulationScenariosResolution.begin(), simulationScenariosResolution.end(),