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()
set(EXTERNAL_DEPS_DIR "/home/iason/Coding/build/external dependencies/")
endif()
##Create directory for the external libraries
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)
.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<size_t> 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<size_t> 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;
}

View File

@ -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(

View File

@ -30,7 +30,7 @@ class ReducedModelOptimizer
std::unordered_map<size_t, std::unordered_set<size_t>> slotToNode;
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
= std::accumulate(simulationScenariosResolution.begin(),
simulationScenariosResolution.end(),