Refactoring
This commit is contained in:
parent
3cd5bcf13d
commit
03c7d63e5b
|
|
@ -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})
|
||||||
|
|
||||||
|
|
|
||||||
62
src/main.cpp
62
src/main.cpp
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue