Refactoring

This commit is contained in:
Iason 2021-02-25 10:09:38 +02:00
parent 50c15751a3
commit f5fb395e12
4 changed files with 42 additions and 57 deletions

View File

@ -89,4 +89,4 @@ target_include_directories(${PROJECT_NAME}
) )
link_directories(${MYSOURCES_SOURCE_DIR}/boost_graph/libs) link_directories(${MYSOURCES_SOURCE_DIR}/boost_graph/libs)
target_link_libraries(${PROJECT_NAME} -static Eigen3::Eigen matplot dlib::dlib) target_link_libraries(${PROJECT_NAME} polyscope Eigen3::Eigen matplot dlib::dlib)

View File

@ -46,10 +46,10 @@ int main(int argc, char *argv[]) {
ReducedModelOptimizer::Settings settings_optimization; ReducedModelOptimizer::Settings settings_optimization;
settings_optimization.xRanges = {beamWidth, beamDimensionsRatio, beamE, settings_optimization.xRanges = {beamWidth, beamDimensionsRatio, beamE,
innerHexagonSize}; innerHexagonSize};
const bool input_numberOfFunctionCallsDefined = argc >= 5; const bool input_numberOfFunctionCallsDefined = argc >= 4;
settings_optimization.numberOfFunctionCalls = settings_optimization.numberOfFunctionCalls =
input_numberOfFunctionCallsDefined ? std::atoi(argv[4]) : 100; input_numberOfFunctionCallsDefined ? std::atoi(argv[3]) : 100;
settings_optimization.normalizeObjectiveValue = true; settings_optimization.shouldNormalizeObjectiveValue = true;
// Optimize pair // Optimize pair
const std::string pairName = const std::string pairName =
@ -62,9 +62,9 @@ int main(int argc, char *argv[]) {
optimizer.optimize(settings_optimization); optimizer.optimize(settings_optimization);
// Export results // Export results
const bool input_resultDirectoryDefined = argc >= 6; const bool input_resultDirectoryDefined = argc >= 5;
std::string optimizationResultsDirectory = std::string optimizationResultsDirectory =
input_resultDirectoryDefined ? argv[5] : "OptimizationResults"; input_resultDirectoryDefined ? argv[4] : "OptimizationResults";
if (optimizationResults.numberOfSimulationCrashes != 0) { if (optimizationResults.numberOfSimulationCrashes != 0) {
const auto crashedJobsDirPath = const auto crashedJobsDirPath =
std::filesystem::path(optimizationResultsDirectory) std::filesystem::path(optimizationResultsDirectory)

View File

@ -214,20 +214,20 @@ double ReducedModelOptimizer::objective(long n, const double *x) {
<< x[parameterIndex] << std::endl; << x[parameterIndex] << std::endl;
} }
#ifdef POLYSCOPE_DEFINED //#ifdef POLYSCOPE_DEFINED
ReducedModelOptimizer::visualizeResults( // ReducedModelOptimizer::visualizeResults(
global.fullPatternSimulationJobs[simulationScenarioIndex], // global.fullPatternSimulationJobs[simulationScenarioIndex],
global.reducedPatternSimulationJobs[simulationScenarioIndex], // global.reducedPatternSimulationJobs[simulationScenarioIndex],
global.reducedToFullInterfaceViMap, false); // global.reducedToFullInterfaceViMap, false);
ReducedModelOptimizer::visualizeResults( // ReducedModelOptimizer::visualizeResults(
global.fullPatternSimulationJobs[simulationScenarioIndex], // global.fullPatternSimulationJobs[simulationScenarioIndex],
std::make_shared<SimulationJob>( // std::make_shared<SimulationJob>(
reducedPatternMaximumDisplacementSimulationJobs // reducedPatternMaximumDisplacementSimulationJobs
[simulationScenarioIndex]), // [simulationScenarioIndex]),
global.reducedToFullInterfaceViMap, true); // global.reducedToFullInterfaceViMap, true);
polyscope::removeAllStructures(); // polyscope::removeAllStructures();
#endif // POLYSCOPE_DEFINED //#endif // POLYSCOPE_DEFINED
} }
error += thisSimulationScenarioError; error += thisSimulationScenarioError;
} }
@ -582,7 +582,7 @@ void ReducedModelOptimizer::visualizeResults(
const std::shared_ptr<SimulationJob> &pReducedPatternSimulationJob, const std::shared_ptr<SimulationJob> &pReducedPatternSimulationJob,
const std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex> const std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex>
&reducedToFullInterfaceViMap, &reducedToFullInterfaceViMap,
const bool draw = true) { const bool &draw = true) {
FormFinder simulator; FormFinder simulator;
std::shared_ptr<SimulationMesh> pFullPatternSimulationMesh = std::shared_ptr<SimulationMesh> pFullPatternSimulationMesh =
pFullPatternSimulationJob->pMesh; pFullPatternSimulationJob->pMesh;
@ -613,7 +613,7 @@ void ReducedModelOptimizer::visualizeResults(
polyscope::show(); polyscope::show();
const std::string screenshotFilename = const std::string screenshotFilename =
"/home/iason/Coding/Projects/Approximating shapes with flat " "/home/iason/Coding/Projects/Approximating shapes with flat "
"patterns/RodModelOptimizationForPatterns/build/OptimizationResults/" "patterns/RodModelOptimizationForPatterns/Results/"
"Images/" + "Images/" +
pFullPatternSimulationMesh->getLabel() + "_" + "noScenarioName"; pFullPatternSimulationMesh->getLabel() + "_" + "noScenarioName";
// simulationScenarioStrings[simulationScenarioIndex]; // simulationScenarioStrings[simulationScenarioIndex];
@ -1101,23 +1101,9 @@ ReducedModelOptimizer::Results ReducedModelOptimizer::optimize(
Vector6d(0)), Vector6d(0)),
fullModelResults.displacements, global.reducedToFullInterfaceViMap); fullModelResults.displacements, global.reducedToFullInterfaceViMap);
const double displacementMultiplier = 2; const double displacementMultiplier = 2;
// if (global.optimizeInnerHexagonSize) {
// displacementMultiplier = 2;
// } else {
// displacementMultiplier = 2;
// }
global.reducedPatternMaximumDisplacementNormSum[simulationScenarioIndex] = global.reducedPatternMaximumDisplacementNormSum[simulationScenarioIndex] =
displacementMultiplier * displacementMultiplier *
std::max(errorOfMaxDisplacedReduced, errorOfNonDisplacedReduced); std::max(errorOfMaxDisplacedReduced, errorOfNonDisplacedReduced);
// if (errorOfMaxDisplacedReduced > errorOfNonDisplacedReduced) {
// std::cout << "Max disp results in a bigger error for scenario "
// << simulationScenarioStrings[simulationScenarioIndex]
// << std::endl;
// } else {
// std::cout << "Zero disp results in a bigger error for scenario "
// << simulationScenarioStrings[simulationScenarioIndex]
// << std::endl;
// }
} }
} }
Results optResults = runOptimization(optimizationSettings); Results optResults = runOptimization(optimizationSettings);
@ -1127,10 +1113,8 @@ ReducedModelOptimizer::Results ReducedModelOptimizer::optimize(
optResults.reducedPatternSimulationJobs.push_back( optResults.reducedPatternSimulationJobs.push_back(
global.reducedPatternSimulationJobs[simulationScenarioIndex]); global.reducedPatternSimulationJobs[simulationScenarioIndex]);
} }
// updateMesh(optResults.x.size(), optResults.x.data()); optResults.draw();
// optResults.draw();
// visualizeResults(simulationJobs, global.simulationScenarioIndices);
#ifdef POLYSCOPE_DEFINED #ifdef POLYSCOPE_DEFINED
// visualizeResults( // visualizeResults(
// global.fullPatternSimulationJobs, global.reducedPatternSimulationJobs, // global.fullPatternSimulationJobs, global.reducedPatternSimulationJobs,

View File

@ -47,7 +47,7 @@ public:
std::vector<xRange> xRanges; std::vector<xRange> xRanges;
int numberOfFunctionCalls{100}; int numberOfFunctionCalls{100};
double solutionAccuracy{1e-2}; double solutionAccuracy{1e-2};
bool normalizeObjectiveValue{true}; bool shouldNormalizeObjectiveValue{true};
std::string toString() const { std::string toString() const {
std::string settingsString; std::string settingsString;
@ -58,9 +58,10 @@ public:
} }
settingsString += xRangesString; settingsString += xRangesString;
} }
settingsString += "FuncCalls=" + std::to_string(numberOfFunctionCalls) + settingsString +=
"FuncCalls=" + std::to_string(numberOfFunctionCalls) +
" Accuracy=" + std::to_string(solutionAccuracy) + " Accuracy=" + std::to_string(solutionAccuracy) +
" Norm=" + (normalizeObjectiveValue ? "yes" : "no"); " Norm=" + (shouldNormalizeObjectiveValue ? "yes" : "no");
return settingsString; return settingsString;
} }
@ -137,28 +138,22 @@ public:
&fullToReducedInterfaceViMap, &fullToReducedInterfaceViMap,
std::unordered_map<FullPatternVertexIndex, ReducedPatternVertexIndex> std::unordered_map<FullPatternVertexIndex, ReducedPatternVertexIndex>
&fullPatternOppositeInterfaceViMap); &fullPatternOppositeInterfaceViMap);
static void static void visualizeResults(
visualizeResults(const std::vector<std::shared_ptr<SimulationJob>> const std::shared_ptr<SimulationJob> &fullPatternSimulationJobs,
&fullPatternSimulationJobs, const std::shared_ptr<SimulationJob> &reducedPatternSimulationJobs,
const std::vector<std::shared_ptr<SimulationJob>>
&reducedPatternSimulationJobs,
const std::vector<SimulationScenario> &simulationScenarios,
const std::unordered_map<ReducedPatternVertexIndex, const std::unordered_map<ReducedPatternVertexIndex,
FullPatternVertexIndex> FullPatternVertexIndex>
&reducedToFullInterfaceViMap); &reducedToFullInterfaceViMap,
const bool &shouldDraw);
static double computeError(const std::vector<Vector6d> &reducedPatternResults, static double computeError(const std::vector<Vector6d> &reducedPatternResults,
const std::vector<Vector6d> &fullPatternResults, const std::vector<Vector6d> &fullPatternResults,
const double &interfaceDisplacementNormSum,
const std::unordered_map<ReducedPatternVertexIndex, const std::unordered_map<ReducedPatternVertexIndex,
FullPatternVertexIndex> FullPatternVertexIndex>
&reducedToFullInterfaceViMap); &reducedToFullInterfaceViMap,
const double &normalizationFactor);
private: private:
void
visualizeResults(const std::vector<std::shared_ptr<SimulationJob>>
&fullPatternSimulationJobs,
const std::vector<SimulationScenario> &simulationScenarios);
static void computeDesiredReducedModelDisplacements( static void computeDesiredReducedModelDisplacements(
const SimulationResults &fullModelResults, const SimulationResults &fullModelResults,
const std::unordered_map<size_t, size_t> &displacementsReducedToFullMap, const std::unordered_map<size_t, size_t> &displacementsReducedToFullMap,
@ -178,6 +173,12 @@ private:
const Eigen::MatrixX3d &optimalReducedPatternDisplacements); const Eigen::MatrixX3d &optimalReducedPatternDisplacements);
static double objective(long n, const double *x); static double objective(long n, const double *x);
FormFinder simulator; FormFinder simulator;
double static computeRawError(
const std::vector<Vector6d> &reducedPatternDisplacements,
const std::vector<Vector6d> &fullPatternDisplacements,
const std::unordered_map<ReducedPatternVertexIndex,
FullPatternVertexIndex>
&reducedToFullInterfaceViMap);
}; };
struct ReducedModelOptimizer::Results { struct ReducedModelOptimizer::Results {
double time{-1}; double time{-1};