Refactoring

This commit is contained in:
iasonmanolas 2021-05-24 14:18:36 +03:00
parent 3cd5bcf13d
commit 03c7d63e5b
4 changed files with 42 additions and 36 deletions

View File

@ -22,6 +22,7 @@ set(EXTERNAL_DEPS_DIR "C:/Users/iason/Downloads/ReducedModelOptimization/build/e
else() else()
set(EXTERNAL_DEPS_DIR "/home/iason/Coding/build/external dependencies/") set(EXTERNAL_DEPS_DIR "/home/iason/Coding/build/external dependencies/")
endif() endif()
##Create directory for the external libraries ##Create directory for the external libraries
file(MAKE_DIRECTORY ${EXTERNAL_DEPS_DIR}) file(MAKE_DIRECTORY ${EXTERNAL_DEPS_DIR})

View File

@ -75,40 +75,47 @@ int main(int argc, char *argv[]) {
const std::filesystem::path crashedJobsDirPath(std::filesystem::path(optimizationResultsDirectory) const std::filesystem::path crashedJobsDirPath(std::filesystem::path(optimizationResultsDirectory)
.append("CrashedJobs") .append("CrashedJobs")
.append(optimizationName)); .append(optimizationName));
optimizationResultFolderExists |= std::filesystem::exists(crashedJobsDirPath); if (std::filesystem::exists(crashedJobsDirPath)) {
resultsOutputDir = crashedJobsDirPath.string();
optimizationResultFolderExists = true;
}
const std::filesystem::path convergedJobsDirPath( const std::filesystem::path convergedJobsDirPath(
std::filesystem::path(optimizationResultsDirectory) std::filesystem::path(optimizationResultsDirectory)
.append("ConvergedJobs") .append("ConvergedJobs")
.append(optimizationName)); .append(optimizationName));
optimizationResultFolderExists |= std::filesystem::exists(convergedJobsDirPath); if (std::filesystem::exists(convergedJobsDirPath)) {
resultsOutputDir = convergedJobsDirPath.string();
optimizationResultFolderExists = true;
}
ReducedPatternOptimization::Results optimizationResults; ReducedPatternOptimization::Results optimizationResults;
// bool optimizationAlreadyComputed = false; bool optimizationAlreadyComputed = false;
// if (optimizationResultFolderExists) { if (optimizationResultFolderExists) {
// if (optimizationResults.settings == settings_optimization const bool resultsWereSuccessfullyLoaded = optimizationResults.load(resultsOutputDir);
// && optimizationResults.load(resultsOutputDir)) { if (resultsWereSuccessfullyLoaded && optimizationResults.settings == settings_optimization) {
// optimizationAlreadyComputed = true; optimizationAlreadyComputed = true;
// } }
// } }
// if (!optimizationAlreadyComputed) { if (!optimizationAlreadyComputed) {
const std::vector<size_t> numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1}; const std::vector<size_t> numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1};
assert(interfaceNodeIndex == numberOfNodesPerSlot[0] + numberOfNodesPerSlot[3]); assert(interfaceNodeIndex == numberOfNodesPerSlot[0] + numberOfNodesPerSlot[3]);
ReducedModelOptimizer optimizer(numberOfNodesPerSlot); ReducedModelOptimizer optimizer(numberOfNodesPerSlot);
optimizer.initializePatterns(fullPattern, reducedPattern, settings_optimization.xRanges.size()); optimizer.initializePatterns(fullPattern,
optimizer.optimize(settings_optimization, optimizationResults); reducedPattern,
optimizationResults.label = optimizationName; settings_optimization.xRanges.size());
optimizationResults.baseTriangleFullPattern.copy(fullPattern); optimizer.optimize(settings_optimization, optimizationResults);
optimizationResults.settings = settings_optimization; optimizationResults.label = optimizationName;
optimizationResults.baseTriangleFullPattern.copy(fullPattern);
optimizationResults.settings = settings_optimization;
// Export results // Export results
if (optimizationResults.numberOfSimulationCrashes != 0) { if (optimizationResults.numberOfSimulationCrashes != 0) {
resultsOutputDir = crashedJobsDirPath.string(); resultsOutputDir = crashedJobsDirPath.string();
} else { } else {
resultsOutputDir = convergedJobsDirPath.string(); resultsOutputDir = convergedJobsDirPath.string();
} }
optimizationResults.save(resultsOutputDir); optimizationResults.save(resultsOutputDir);
// }
// Write results in csv // Write results in csv
csvFile csv_results({}, false); csvFile csv_results({}, false);
@ -124,11 +131,12 @@ int main(int argc, char *argv[]) {
optimizationResults.writeResultsTo(settings_optimization, csv_results); optimizationResults.writeResultsTo(settings_optimization, csv_results);
settings_optimization.writeSettingsTo(csv_results); settings_optimization.writeSettingsTo(csv_results);
csv_results << endrow; csv_results << endrow;
}
//#ifdef POLYSCOPE_DEFINED //#ifdef POLYSCOPE_DEFINED
// optimizationResults.saveMeshFiles(); // optimizationResults.saveMeshFiles();
// optimizationResults.draw(); // optimizationResults.draw();
//#endif //#endif
return 0; return 0;
} }

View File

@ -1097,8 +1097,7 @@ double ReducedModelOptimizer::getFullPatternMaxSimulationForce(const BaseSimulat
forceMagnitude, forceMagnitude,
1e-8, 1e-8,
1e8, 1e8,
optimizationEpsilon, optimizationEpsilon);
200);
break; break;
case Dome: case Dome:
global.desiredMaxRotationAngle = vcg::math::ToRad(20.0); global.desiredMaxRotationAngle = vcg::math::ToRad(20.0);
@ -1109,10 +1108,10 @@ double ReducedModelOptimizer::getFullPatternMaxSimulationForce(const BaseSimulat
forceMagnitude, forceMagnitude,
1e-8, 1e-8,
1e8, 1e8,
vcg::math::ToRad(1.0), vcg::math::ToRad(1.0)
// global.desiredMaxRotationAngle * 0.5, // global.desiredMaxRotationAngle * 0.5,
// optimizationEpsilon, // optimizationEpsilon,
500); );
break; break;
case Saddle: case Saddle:
// global.desiredMaxDisplacementValue *= 2; // global.desiredMaxDisplacementValue *= 2;
@ -1121,15 +1120,13 @@ double ReducedModelOptimizer::getFullPatternMaxSimulationForce(const BaseSimulat
(global.baseTriangle.cP(1) (global.baseTriangle.cP(1)
+ global.baseTriangle.cP(2)) + global.baseTriangle.cP(2))
/ 2); / 2);
// std::cout << "Saddle des disp:" << global.desiredMaxDisplacementValue << std::endl;
global.constructScenarioFunction = &ReducedModelOptimizer::constructSaddleSimulationScenario; global.constructScenarioFunction = &ReducedModelOptimizer::constructSaddleSimulationScenario;
global.interfaceViForComputingScenarioError = global.fullPatternInterfaceViPairs[0].first; global.interfaceViForComputingScenarioError = global.fullPatternInterfaceViPairs[0].first;
dlib::find_min_single_variable(&fullPatternMaxSimulationForceTranslationalObjective, dlib::find_min_single_variable(&fullPatternMaxSimulationForceTranslationalObjective,
forceMagnitude, forceMagnitude,
1e-8, 1e-8,
1e8, 1e8,
1e-2, 1e-2);
150);
break; break;
} }
@ -1411,7 +1408,7 @@ void ReducedModelOptimizer::optimize(
DRMSimulationModel::Settings simulationSettings; DRMSimulationModel::Settings simulationSettings;
simulationSettings.shouldDraw = false; simulationSettings.shouldDraw = false;
#ifdef POLYSCOPE_DEFINED #ifdef POLYSCOPE_DEFINED
const bool drawFullPatternSimulationResults = true; const bool drawFullPatternSimulationResults = false;
; ;
if (drawFullPatternSimulationResults) { if (drawFullPatternSimulationResults) {
global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing( global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing(

View File

@ -30,7 +30,7 @@ class ReducedModelOptimizer
std::unordered_map<size_t, std::unordered_set<size_t>> slotToNode; std::unordered_map<size_t, std::unordered_set<size_t>> slotToNode;
public: public:
constexpr static std::array<int, 5> simulationScenariosResolution = {4, 4, 4, 4, 4}; constexpr static std::array<int, 5> simulationScenariosResolution = {10, 10, 20, 20, 20};
inline static int totalNumberOfSimulationScenarios inline static int totalNumberOfSimulationScenarios
= std::accumulate(simulationScenariosResolution.begin(), = std::accumulate(simulationScenariosResolution.begin(),
simulationScenariosResolution.end(), simulationScenariosResolution.end(),