Renamed ReducedPatternOptimization to ReducedModelOptimization

This commit is contained in:
iasonmanolas 2022-01-13 13:30:28 +02:00
parent 7aa41c87d8
commit 534efb98bb
3 changed files with 54 additions and 56 deletions

View File

@ -22,7 +22,7 @@
#endif #endif
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
// ReducedPatternOptimization::Results optResults; // ReducedModelOptimization::Results optResults;
// optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/" // optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/"
// "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)"); // "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)");
// optResults.load("/home/iason/Coding/Projects/Approximating shapes with flat " // optResults.load("/home/iason/Coding/Projects/Approximating shapes with flat "
@ -66,7 +66,7 @@ int main(int argc, char *argv[])
std::cerr << "Input optimization settings file does not exist:" std::cerr << "Input optimization settings file does not exist:"
<< optimizationSettingsFilePath << std::endl; << optimizationSettingsFilePath << std::endl;
} }
ReducedPatternOptimization::Settings settings_optimization; ReducedModelOptimization::Settings settings_optimization;
#ifdef POLYSCOPE_DEFINED #ifdef POLYSCOPE_DEFINED
// settings_optimization.save(optimizationSettingsFilePath.parent_path()); // settings_optimization.save(optimizationSettingsFilePath.parent_path());
// std::cout << "Save settings to:" << optimizationSettingsFilePath << std::endl; // std::cout << "Save settings to:" << optimizationSettingsFilePath << std::endl;
@ -99,7 +99,7 @@ int main(int argc, char *argv[])
optimizationResultFolderExists = true; optimizationResultFolderExists = true;
} }
ReducedPatternOptimization::Results optimizationResults; ReducedModelOptimization::Results optimizationResults;
constexpr bool shouldReoptimize = true; constexpr bool shouldReoptimize = true;
bool optimizationAlreadyComputed = false; bool optimizationAlreadyComputed = false;
if (!shouldReoptimize && optimizationResultFolderExists) { if (!shouldReoptimize && optimizationResultFolderExists) {
@ -203,7 +203,7 @@ int main(int argc, char *argv[])
std::cout << "Saved results to:" << resultsOutputDir << std::endl; std::cout << "Saved results to:" << resultsOutputDir << std::endl;
// optimizationResults.draw(); // optimizationResults.draw();
// ReducedPatternOptimization::Results optResults; // ReducedModelOptimization::Results optResults;
// optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/" // optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/"
// "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)"); // "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)");
ReducedModelEvaluator::evaluateReducedModel(optimizationResults); ReducedModelEvaluator::evaluateReducedModel(optimizationResults);

View File

@ -14,7 +14,7 @@
//#define USE_SCENARIO_WEIGHTS //#define USE_SCENARIO_WEIGHTS
using namespace ReducedPatternOptimization; using namespace ReducedModelOptimization;
struct GlobalOptimizationVariables struct GlobalOptimizationVariables
{ {
@ -31,17 +31,17 @@ struct GlobalOptimizationVariables
std::vector<double> objectiveValueHistory; std::vector<double> objectiveValueHistory;
std::vector<double> plotColors; std::vector<double> plotColors;
std::array<double, std::array<double,
ReducedPatternOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables> ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
parametersInitialValue; parametersInitialValue;
std::array<double, std::array<double,
ReducedPatternOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables> ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
optimizationInitialValue; optimizationInitialValue;
std::vector<int> simulationScenarioIndices; std::vector<int> simulationScenarioIndices;
double minY{DBL_MAX}; double minY{DBL_MAX};
std::vector<double> minX; std::vector<double> minX;
int numOfSimulationCrashes{false}; int numOfSimulationCrashes{false};
int numberOfFunctionCalls{0}; int numberOfFunctionCalls{0};
ReducedPatternOptimization::Settings optimizationSettings; ReducedModelOptimization::Settings optimizationSettings;
vcg::Triangle3<double> baseTriangle; vcg::Triangle3<double> baseTriangle;
//Variables for finding the full pattern simulation forces //Variables for finding the full pattern simulation forces
std::shared_ptr<SimulationMesh> pFullPatternSimulationMesh; std::shared_ptr<SimulationMesh> pFullPatternSimulationMesh;
@ -60,7 +60,7 @@ struct GlobalOptimizationVariables
std::vector<double> xMin; std::vector<double> xMin;
std::vector<double> xMax; std::vector<double> xMax;
std::vector<double> scenarioWeights; std::vector<double> scenarioWeights;
std::vector<ReducedPatternOptimization::Settings::ObjectiveWeights> objectiveWeights; std::vector<ReducedModelOptimization::Settings::ObjectiveWeights> objectiveWeights;
} global; } global;
double ReducedModelOptimizer::computeDisplacementError( double ReducedModelOptimizer::computeDisplacementError(
@ -662,9 +662,8 @@ void ReducedModelOptimizer::initializeUpdateReducedPatternFunctions()
void ReducedModelOptimizer::initializeOptimizationParameters( void ReducedModelOptimizer::initializeOptimizationParameters(
const std::shared_ptr<SimulationMesh> &mesh, const std::shared_ptr<SimulationMesh> &mesh,
const std::array<ReducedPatternOptimization::xRange, const std::array<ReducedModelOptimization::xRange,
ReducedPatternOptimization::NumberOfOptimizationVariables> ReducedModelOptimization::NumberOfOptimizationVariables> &optimizationParameters)
&optimizationParameters)
{ {
for (int optimizationParameterIndex = 0; for (int optimizationParameterIndex = 0;
@ -765,7 +764,7 @@ void ReducedModelOptimizer::computeDesiredReducedModelDisplacements(
void ReducedModelOptimizer::getResults(const FunctionEvaluation &optimalObjective, void ReducedModelOptimizer::getResults(const FunctionEvaluation &optimalObjective,
const Settings &settings, const Settings &settings,
ReducedPatternOptimization::Results &results) ReducedModelOptimization::Results &results)
{ {
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh
= global.reducedPatternSimulationJobs[global.simulationScenarioIndices[0]]->pMesh; = global.reducedPatternSimulationJobs[global.simulationScenarioIndices[0]]->pMesh;
@ -1007,7 +1006,7 @@ ReducedModelOptimizer::getFullPatternMaxSimulationForces(
} }
void ReducedModelOptimizer::runOptimization(const Settings &settings, void ReducedModelOptimizer::runOptimization(const Settings &settings,
ReducedPatternOptimization::Results &results) ReducedModelOptimization::Results &results)
{ {
global.objectiveValueHistory.clear(); global.objectiveValueHistory.clear();
global.objectiveValueHistory_iteration.clear(); global.objectiveValueHistory_iteration.clear();
@ -1595,7 +1594,7 @@ double ReducedModelOptimizer::computeFullPatternMaxSimulationForce(
// ForceMagnitudeOptimization f(objectiveFunction); // Create function to be optimized. // ForceMagnitudeOptimization f(objectiveFunction); // Create function to be optimized.
// arma::mat forceMagnitude_mat({forceMagnitude}); // arma::mat forceMagnitude_mat({forceMagnitude});
// minimumError = optimizer.Optimize(f, forceMagnitude_mat); // minimumError = optimizer.Optimize(f, forceMagnitude_mat);
// std::cout << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] << ": " // std::cout << ReducedModelOptimization::baseSimulationScenarioNames[scenario] << ": "
// << optimalObjective << std::endl; // << optimalObjective << std::endl;
// forceMagnitude = forceMagnitude_mat(0, 0); // forceMagnitude = forceMagnitude_mat(0, 0);
@ -1610,20 +1609,20 @@ double ReducedModelOptimizer::computeFullPatternMaxSimulationForce(
wasSuccessful = minimumError < objectiveEpsilon; wasSuccessful = minimumError < objectiveEpsilon;
#ifdef POLYSCOPE_DEFINED #ifdef POLYSCOPE_DEFINED
std::cout << "Max " << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] std::cout << "Max " << ReducedModelOptimization::baseSimulationScenarioNames[scenario]
<< " magnitude:" << forceMagnitude << std::endl; << " magnitude:" << forceMagnitude << std::endl;
if (!wasSuccessful) { if (!wasSuccessful) {
SimulationJob job; SimulationJob job;
job.pMesh = global.pFullPatternSimulationMesh; job.pMesh = global.pFullPatternSimulationMesh;
global.constructScenarioFunction(forceMagnitude, global.fullPatternInterfaceViPairs, job); global.constructScenarioFunction(forceMagnitude, global.fullPatternInterfaceViPairs, job);
std::cerr << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] std::cerr << ReducedModelOptimization::baseSimulationScenarioNames[scenario]
+ " max scenario magnitude was not succefully determined." + " max scenario magnitude was not succefully determined."
<< std::endl; << std::endl;
std::filesystem::path outputPath( std::filesystem::path outputPath(
std::filesystem::path("../nonConvergingJobs") std::filesystem::path("../nonConvergingJobs")
.append(m_pFullPatternSimulationMesh->getLabel()) .append(m_pFullPatternSimulationMesh->getLabel())
.append("magFinal_" .append("magFinal_"
+ ReducedPatternOptimization::baseSimulationScenarioNames[scenario])); + ReducedModelOptimization::baseSimulationScenarioNames[scenario]));
std::filesystem::create_directories(outputPath); std::filesystem::create_directories(outputPath);
job.save(outputPath); job.save(outputPath);
std::terminate(); std::terminate();
@ -1813,12 +1812,12 @@ void ReducedModelOptimizer::computeObjectiveValueNormalizationFactors()
if (global.optimizationSettings.normalizationStrategy if (global.optimizationSettings.normalizationStrategy
== Settings::NormalizationStrategy::Epsilon) { == Settings::NormalizationStrategy::Epsilon) {
const double epsilon_translationalDisplacement = global.optimizationSettings const double epsilon_translationalDisplacement = global.optimizationSettings
.translationNormalizationEpsilon; .translationEpsilon;
global.translationalDisplacementNormalizationValues[simulationScenarioIndex] global.translationalDisplacementNormalizationValues[simulationScenarioIndex]
= std::max(fullPatternTranslationalDisplacementNormSum[simulationScenarioIndex], = std::max(fullPatternTranslationalDisplacementNormSum[simulationScenarioIndex],
epsilon_translationalDisplacement); epsilon_translationalDisplacement);
const double epsilon_rotationalDisplacement = global.optimizationSettings const double epsilon_rotationalDisplacement = global.optimizationSettings
.rotationNormalizationEpsilon; .angularDistanceEpsilon;
global.rotationalDisplacementNormalizationValues[simulationScenarioIndex] global.rotationalDisplacementNormalizationValues[simulationScenarioIndex]
= std::max(fullPatternAngularDistance[simulationScenarioIndex], = std::max(fullPatternAngularDistance[simulationScenarioIndex],
epsilon_rotationalDisplacement); epsilon_rotationalDisplacement);
@ -1831,7 +1830,7 @@ void ReducedModelOptimizer::computeObjectiveValueNormalizationFactors()
void ReducedModelOptimizer::optimize( void ReducedModelOptimizer::optimize(
const Settings &optimizationSettings, const Settings &optimizationSettings,
ReducedPatternOptimization::Results &results, ReducedModelOptimization::Results &results,
const std::vector<BaseSimulationScenario> &desiredBaseSimulationScenarioIndices) const std::vector<BaseSimulationScenario> &desiredBaseSimulationScenarioIndices)
{ {
assert(!optimizationSettings.optimizationStrategy.empty()); assert(!optimizationSettings.optimizationStrategy.empty());
@ -1903,7 +1902,7 @@ void ReducedModelOptimizer::optimize(
constexpr bool drawFullPatternSimulationResults = false; constexpr bool drawFullPatternSimulationResults = false;
if (drawFullPatternSimulationResults) { if (drawFullPatternSimulationResults) {
global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing( global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing(
ReducedPatternOptimization::Colors::fullInitial); ReducedModelOptimization::Colors::fullInitial);
} }
#endif #endif
results.wasSuccessful = true; results.wasSuccessful = true;
@ -2002,7 +2001,7 @@ void ReducedModelOptimizer::optimize(
if (drawFullPatternSimulationResults) { if (drawFullPatternSimulationResults) {
// SimulationResults fullPatternResults_linear = linearSimulator.executeSimulation( // SimulationResults fullPatternResults_linear = linearSimulator.executeSimulation(
// pFullPatternSimulationJob); // pFullPatternSimulationJob);
fullPatternResults.registerForDrawing(ReducedPatternOptimization::Colors::fullDeformed, fullPatternResults.registerForDrawing(ReducedModelOptimization::Colors::fullDeformed,
true); true);
// fullPatternResults_linear.labelPrefix += "_linear"; // fullPatternResults_linear.labelPrefix += "_linear";
// fullPatternResults_linear.registerForDrawing(ReducedModelOptimization::Colors::fullDeformed, // fullPatternResults_linear.registerForDrawing(ReducedModelOptimization::Colors::fullDeformed,

View File

@ -65,11 +65,11 @@ public:
// }; // };
// inline constexpr static ParameterLabels parameterLabels(); // inline constexpr static ParameterLabels parameterLabels();
inline static std::array<std::string, ReducedPatternOptimization::NumberOfOptimizationVariables> inline static std::array<std::string, ReducedModelOptimization::NumberOfOptimizationVariables>
parameterLabels = {"R", "A", "I2", "I3", "J", "Theta", "R"}; parameterLabels = {"R", "A", "I2", "I3", "J", "Theta", "R"};
constexpr static std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios> constexpr static std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
simulationScenariosResolution = {11, 11, 20, 20, 20}; simulationScenariosResolution = {11, 11, 20, 20, 20};
constexpr static std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios> constexpr static std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
baseScenarioWeights = {1, 1, 2, 3, 2}; baseScenarioWeights = {1, 1, 2, 3, 2};
inline static int totalNumberOfSimulationScenarios inline static int totalNumberOfSimulationScenarios
= std::accumulate(simulationScenariosResolution.begin(), = std::accumulate(simulationScenariosResolution.begin(),
@ -79,15 +79,15 @@ public:
inline static double initialHexagonSize{0.3}; inline static double initialHexagonSize{0.3};
inline static VectorType patternPlaneNormal{0, 0, 1}; inline static VectorType patternPlaneNormal{0, 0, 1};
void optimize( void optimize(
const ReducedPatternOptimization::Settings &xRanges, const ReducedModelOptimization::Settings &xRanges,
ReducedPatternOptimization::Results &results, ReducedModelOptimization::Results &results,
const std::vector<ReducedPatternOptimization::BaseSimulationScenario> &simulationScenarios const std::vector<ReducedModelOptimization::BaseSimulationScenario> &simulationScenarios
= std::vector<ReducedPatternOptimization::BaseSimulationScenario>( = std::vector<ReducedModelOptimization::BaseSimulationScenario>(
{ReducedPatternOptimization::Axial, {ReducedModelOptimization::Axial,
ReducedPatternOptimization::Shear, ReducedModelOptimization::Shear,
ReducedPatternOptimization::Bending, ReducedModelOptimization::Bending,
ReducedPatternOptimization::Dome, ReducedModelOptimization::Dome,
ReducedPatternOptimization::Saddle})); ReducedModelOptimization::Saddle}));
double operator()(const Eigen::VectorXd &x, Eigen::VectorXd &) const; double operator()(const Eigen::VectorXd &x, Eigen::VectorXd &) const;
ReducedModelOptimizer(const std::vector<size_t> &numberOfNodesPerSlot); ReducedModelOptimizer(const std::vector<size_t> &numberOfNodesPerSlot);
@ -121,7 +121,7 @@ public:
static void visualizeResults( static void visualizeResults(
const std::vector<std::shared_ptr<SimulationJob>> &fullPatternSimulationJobs, const std::vector<std::shared_ptr<SimulationJob>> &fullPatternSimulationJobs,
const std::vector<std::shared_ptr<SimulationJob>> &reducedPatternSimulationJobs, const std::vector<std::shared_ptr<SimulationJob>> &reducedPatternSimulationJobs,
const std::vector<ReducedPatternOptimization::BaseSimulationScenario> &simulationScenarios, const std::vector<ReducedModelOptimization::BaseSimulationScenario> &simulationScenarios,
const std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex> const std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex>
&reducedToFullInterfaceViMap); &reducedToFullInterfaceViMap);
static void registerResultsForDrawing( static void registerResultsForDrawing(
@ -166,7 +166,7 @@ public:
const double &normalizationFactor_translationalDisplacement, const double &normalizationFactor_translationalDisplacement,
const double &normalizationFactor_rotationalDisplacement, const double &normalizationFactor_rotationalDisplacement,
const double &scenarioWeight, const double &scenarioWeight,
const ReducedPatternOptimization::Settings::ObjectiveWeights &objectiveWeights); const ReducedModelOptimization::Settings::ObjectiveWeights &objectiveWeights);
static void constructAxialSimulationScenario( static void constructAxialSimulationScenario(
const double &forceMagnitude, const double &forceMagnitude,
const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>> const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>>
@ -221,12 +221,11 @@ public:
static void initializeUpdateReducedPatternFunctions(); static void initializeUpdateReducedPatternFunctions();
static double objective(const double &xValue); static double objective(const double &xValue);
void initializePatterns( void initializePatterns(PatternGeometry &fullPattern,
PatternGeometry &fullPattern, PatternGeometry &reducedPattern,
PatternGeometry &reducedPattern, const std::array<ReducedModelOptimization::xRange,
const std::array<ReducedPatternOptimization::xRange, ReducedModelOptimization::NumberOfOptimizationVariables>
ReducedPatternOptimization::NumberOfOptimizationVariables> &optimizationParameters);
&optimizationParameters);
void setIntermediateResultsDirectoryPath( void setIntermediateResultsDirectoryPath(
const std::filesystem::path &newIntermediateResultsDirectoryPath); const std::filesystem::path &newIntermediateResultsDirectoryPath);
@ -236,42 +235,42 @@ private:
const SimulationResults &fullModelResults, const SimulationResults &fullModelResults,
const std::unordered_map<size_t, size_t> &displacementsReducedToFullMap, const std::unordered_map<size_t, size_t> &displacementsReducedToFullMap,
Eigen::MatrixX3d &optimalDisplacementsOfReducedModel); Eigen::MatrixX3d &optimalDisplacementsOfReducedModel);
static void runOptimization(const ReducedPatternOptimization::Settings &settings, static void runOptimization(const ReducedModelOptimization::Settings &settings,
ReducedPatternOptimization::Results &results); ReducedModelOptimization::Results &results);
void computeMaps(PatternGeometry &fullModel, PatternGeometry &reducedPattern); void computeMaps(PatternGeometry &fullModel, PatternGeometry &reducedPattern);
void createSimulationMeshes(PatternGeometry &fullModel, PatternGeometry &reducedModel); void createSimulationMeshes(PatternGeometry &fullModel, PatternGeometry &reducedModel);
static void initializeOptimizationParameters( static void initializeOptimizationParameters(
const std::shared_ptr<SimulationMesh> &mesh, const std::shared_ptr<SimulationMesh> &mesh,
const std::array<ReducedPatternOptimization::xRange, const std::array<ReducedModelOptimization::xRange,
ReducedPatternOptimization::NumberOfOptimizationVariables> ReducedModelOptimization::NumberOfOptimizationVariables>
&optimizationParamters); &optimizationParamters);
DRMSimulationModel simulator; DRMSimulationModel simulator;
void computeObjectiveValueNormalizationFactors(); void computeObjectiveValueNormalizationFactors();
static void getResults(const FunctionEvaluation &optimalObjective, static void getResults(const FunctionEvaluation &optimalObjective,
const ReducedPatternOptimization::Settings &settings, const ReducedModelOptimization::Settings &settings,
ReducedPatternOptimization::Results &results); ReducedModelOptimization::Results &results);
double computeFullPatternMaxSimulationForce( double computeFullPatternMaxSimulationForce(
const ReducedPatternOptimization::BaseSimulationScenario &scenario) const; const ReducedModelOptimization::BaseSimulationScenario &scenario) const;
#ifdef DLIB_DEFINED #ifdef DLIB_DEFINED
static double objective(const dlib::matrix<double, 0, 1> &x); static double objective(const dlib::matrix<double, 0, 1> &x);
#endif #endif
std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios> std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
getFullPatternMaxSimulationForces( getFullPatternMaxSimulationForces(
const std::vector<ReducedPatternOptimization::BaseSimulationScenario> const std::vector<ReducedModelOptimization::BaseSimulationScenario>
&desiredBaseSimulationScenarioIndices, &desiredBaseSimulationScenarioIndices,
const std::filesystem::path &intermediateResultsDirectoryPath); const std::filesystem::path &intermediateResultsDirectoryPath);
void computeScenarioWeights(const std::vector<ReducedPatternOptimization::BaseSimulationScenario> void computeScenarioWeights(const std::vector<ReducedModelOptimization::BaseSimulationScenario>
&baseSimulationScenarios); &baseSimulationScenarios);
std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios> std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
computeFullPatternMaxSimulationForces( computeFullPatternMaxSimulationForces(
const std::vector<ReducedPatternOptimization::BaseSimulationScenario> const std::vector<ReducedModelOptimization::BaseSimulationScenario>
&desiredBaseSimulationScenario) const; &desiredBaseSimulationScenario) const;
std::vector<std::shared_ptr<SimulationJob>> createFullPatternSimulationJobs( std::vector<std::shared_ptr<SimulationJob>> createFullPatternSimulationJobs(
const std::shared_ptr<SimulationMesh> &pMesh, const std::shared_ptr<SimulationMesh> &pMesh,
const std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios> const std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
&baseScenarioMaxForceMagnitudes) const; &baseScenarioMaxForceMagnitudes) const;
}; };
inline std::function<void(const double &newE, inline std::function<void(const double &newE,