diff --git a/src/main.cpp b/src/main.cpp index e9355a4..d0fd56e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,7 +22,7 @@ #endif int main(int argc, char *argv[]) { - // ReducedPatternOptimization::Results optResults; + // ReducedModelOptimization::Results optResults; // optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/" // "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)"); // 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:" << optimizationSettingsFilePath << std::endl; } - ReducedPatternOptimization::Settings settings_optimization; + ReducedModelOptimization::Settings settings_optimization; #ifdef POLYSCOPE_DEFINED // settings_optimization.save(optimizationSettingsFilePath.parent_path()); // std::cout << "Save settings to:" << optimizationSettingsFilePath << std::endl; @@ -99,7 +99,7 @@ int main(int argc, char *argv[]) optimizationResultFolderExists = true; } - ReducedPatternOptimization::Results optimizationResults; + ReducedModelOptimization::Results optimizationResults; constexpr bool shouldReoptimize = true; bool optimizationAlreadyComputed = false; if (!shouldReoptimize && optimizationResultFolderExists) { @@ -203,7 +203,7 @@ int main(int argc, char *argv[]) std::cout << "Saved results to:" << resultsOutputDir << std::endl; // optimizationResults.draw(); - // ReducedPatternOptimization::Results optResults; + // ReducedModelOptimization::Results optResults; // optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/" // "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)"); ReducedModelEvaluator::evaluateReducedModel(optimizationResults); diff --git a/src/reducedmodeloptimizer.cpp b/src/reducedmodeloptimizer.cpp index e9e5898..2f681dd 100644 --- a/src/reducedmodeloptimizer.cpp +++ b/src/reducedmodeloptimizer.cpp @@ -14,7 +14,7 @@ //#define USE_SCENARIO_WEIGHTS -using namespace ReducedPatternOptimization; +using namespace ReducedModelOptimization; struct GlobalOptimizationVariables { @@ -31,17 +31,17 @@ struct GlobalOptimizationVariables std::vector objectiveValueHistory; std::vector plotColors; std::array + ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables> parametersInitialValue; std::array + ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables> optimizationInitialValue; std::vector simulationScenarioIndices; double minY{DBL_MAX}; std::vector minX; int numOfSimulationCrashes{false}; int numberOfFunctionCalls{0}; - ReducedPatternOptimization::Settings optimizationSettings; + ReducedModelOptimization::Settings optimizationSettings; vcg::Triangle3 baseTriangle; //Variables for finding the full pattern simulation forces std::shared_ptr pFullPatternSimulationMesh; @@ -60,7 +60,7 @@ struct GlobalOptimizationVariables std::vector xMin; std::vector xMax; std::vector scenarioWeights; - std::vector objectiveWeights; + std::vector objectiveWeights; } global; double ReducedModelOptimizer::computeDisplacementError( @@ -662,9 +662,8 @@ void ReducedModelOptimizer::initializeUpdateReducedPatternFunctions() void ReducedModelOptimizer::initializeOptimizationParameters( const std::shared_ptr &mesh, - const std::array - &optimizationParameters) + const std::array &optimizationParameters) { for (int optimizationParameterIndex = 0; @@ -765,7 +764,7 @@ void ReducedModelOptimizer::computeDesiredReducedModelDisplacements( void ReducedModelOptimizer::getResults(const FunctionEvaluation &optimalObjective, const Settings &settings, - ReducedPatternOptimization::Results &results) + ReducedModelOptimization::Results &results) { std::shared_ptr &pReducedPatternSimulationMesh = global.reducedPatternSimulationJobs[global.simulationScenarioIndices[0]]->pMesh; @@ -1007,7 +1006,7 @@ ReducedModelOptimizer::getFullPatternMaxSimulationForces( } void ReducedModelOptimizer::runOptimization(const Settings &settings, - ReducedPatternOptimization::Results &results) + ReducedModelOptimization::Results &results) { global.objectiveValueHistory.clear(); global.objectiveValueHistory_iteration.clear(); @@ -1595,7 +1594,7 @@ double ReducedModelOptimizer::computeFullPatternMaxSimulationForce( // ForceMagnitudeOptimization f(objectiveFunction); // Create function to be optimized. // arma::mat forceMagnitude_mat({forceMagnitude}); // minimumError = optimizer.Optimize(f, forceMagnitude_mat); - // std::cout << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] << ": " + // std::cout << ReducedModelOptimization::baseSimulationScenarioNames[scenario] << ": " // << optimalObjective << std::endl; // forceMagnitude = forceMagnitude_mat(0, 0); @@ -1610,20 +1609,20 @@ double ReducedModelOptimizer::computeFullPatternMaxSimulationForce( wasSuccessful = minimumError < objectiveEpsilon; #ifdef POLYSCOPE_DEFINED - std::cout << "Max " << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] + std::cout << "Max " << ReducedModelOptimization::baseSimulationScenarioNames[scenario] << " magnitude:" << forceMagnitude << std::endl; if (!wasSuccessful) { SimulationJob job; job.pMesh = global.pFullPatternSimulationMesh; global.constructScenarioFunction(forceMagnitude, global.fullPatternInterfaceViPairs, job); - std::cerr << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] + std::cerr << ReducedModelOptimization::baseSimulationScenarioNames[scenario] + " max scenario magnitude was not succefully determined." << std::endl; std::filesystem::path outputPath( std::filesystem::path("../nonConvergingJobs") .append(m_pFullPatternSimulationMesh->getLabel()) .append("magFinal_" - + ReducedPatternOptimization::baseSimulationScenarioNames[scenario])); + + ReducedModelOptimization::baseSimulationScenarioNames[scenario])); std::filesystem::create_directories(outputPath); job.save(outputPath); std::terminate(); @@ -1813,12 +1812,12 @@ void ReducedModelOptimizer::computeObjectiveValueNormalizationFactors() if (global.optimizationSettings.normalizationStrategy == Settings::NormalizationStrategy::Epsilon) { const double epsilon_translationalDisplacement = global.optimizationSettings - .translationNormalizationEpsilon; + .translationEpsilon; global.translationalDisplacementNormalizationValues[simulationScenarioIndex] = std::max(fullPatternTranslationalDisplacementNormSum[simulationScenarioIndex], epsilon_translationalDisplacement); const double epsilon_rotationalDisplacement = global.optimizationSettings - .rotationNormalizationEpsilon; + .angularDistanceEpsilon; global.rotationalDisplacementNormalizationValues[simulationScenarioIndex] = std::max(fullPatternAngularDistance[simulationScenarioIndex], epsilon_rotationalDisplacement); @@ -1831,7 +1830,7 @@ void ReducedModelOptimizer::computeObjectiveValueNormalizationFactors() void ReducedModelOptimizer::optimize( const Settings &optimizationSettings, - ReducedPatternOptimization::Results &results, + ReducedModelOptimization::Results &results, const std::vector &desiredBaseSimulationScenarioIndices) { assert(!optimizationSettings.optimizationStrategy.empty()); @@ -1903,7 +1902,7 @@ void ReducedModelOptimizer::optimize( constexpr bool drawFullPatternSimulationResults = false; if (drawFullPatternSimulationResults) { global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing( - ReducedPatternOptimization::Colors::fullInitial); + ReducedModelOptimization::Colors::fullInitial); } #endif results.wasSuccessful = true; @@ -2002,7 +2001,7 @@ void ReducedModelOptimizer::optimize( if (drawFullPatternSimulationResults) { // SimulationResults fullPatternResults_linear = linearSimulator.executeSimulation( // pFullPatternSimulationJob); - fullPatternResults.registerForDrawing(ReducedPatternOptimization::Colors::fullDeformed, + fullPatternResults.registerForDrawing(ReducedModelOptimization::Colors::fullDeformed, true); // fullPatternResults_linear.labelPrefix += "_linear"; // fullPatternResults_linear.registerForDrawing(ReducedModelOptimization::Colors::fullDeformed, diff --git a/src/reducedmodeloptimizer.hpp b/src/reducedmodeloptimizer.hpp index cdc1e22..7271256 100644 --- a/src/reducedmodeloptimizer.hpp +++ b/src/reducedmodeloptimizer.hpp @@ -65,11 +65,11 @@ public: // }; // inline constexpr static ParameterLabels parameterLabels(); - inline static std::array + inline static std::array parameterLabels = {"R", "A", "I2", "I3", "J", "Theta", "R"}; - constexpr static std::array + constexpr static std::array simulationScenariosResolution = {11, 11, 20, 20, 20}; - constexpr static std::array + constexpr static std::array baseScenarioWeights = {1, 1, 2, 3, 2}; inline static int totalNumberOfSimulationScenarios = std::accumulate(simulationScenariosResolution.begin(), @@ -79,15 +79,15 @@ public: inline static double initialHexagonSize{0.3}; inline static VectorType patternPlaneNormal{0, 0, 1}; void optimize( - const ReducedPatternOptimization::Settings &xRanges, - ReducedPatternOptimization::Results &results, - const std::vector &simulationScenarios - = std::vector( - {ReducedPatternOptimization::Axial, - ReducedPatternOptimization::Shear, - ReducedPatternOptimization::Bending, - ReducedPatternOptimization::Dome, - ReducedPatternOptimization::Saddle})); + const ReducedModelOptimization::Settings &xRanges, + ReducedModelOptimization::Results &results, + const std::vector &simulationScenarios + = std::vector( + {ReducedModelOptimization::Axial, + ReducedModelOptimization::Shear, + ReducedModelOptimization::Bending, + ReducedModelOptimization::Dome, + ReducedModelOptimization::Saddle})); double operator()(const Eigen::VectorXd &x, Eigen::VectorXd &) const; ReducedModelOptimizer(const std::vector &numberOfNodesPerSlot); @@ -121,7 +121,7 @@ public: static void visualizeResults( const std::vector> &fullPatternSimulationJobs, const std::vector> &reducedPatternSimulationJobs, - const std::vector &simulationScenarios, + const std::vector &simulationScenarios, const std::unordered_map &reducedToFullInterfaceViMap); static void registerResultsForDrawing( @@ -166,7 +166,7 @@ public: const double &normalizationFactor_translationalDisplacement, const double &normalizationFactor_rotationalDisplacement, const double &scenarioWeight, - const ReducedPatternOptimization::Settings::ObjectiveWeights &objectiveWeights); + const ReducedModelOptimization::Settings::ObjectiveWeights &objectiveWeights); static void constructAxialSimulationScenario( const double &forceMagnitude, const std::vector> @@ -221,12 +221,11 @@ public: static void initializeUpdateReducedPatternFunctions(); static double objective(const double &xValue); - void initializePatterns( - PatternGeometry &fullPattern, - PatternGeometry &reducedPattern, - const std::array - &optimizationParameters); + void initializePatterns(PatternGeometry &fullPattern, + PatternGeometry &reducedPattern, + const std::array + &optimizationParameters); void setIntermediateResultsDirectoryPath( const std::filesystem::path &newIntermediateResultsDirectoryPath); @@ -236,42 +235,42 @@ private: const SimulationResults &fullModelResults, const std::unordered_map &displacementsReducedToFullMap, Eigen::MatrixX3d &optimalDisplacementsOfReducedModel); - static void runOptimization(const ReducedPatternOptimization::Settings &settings, - ReducedPatternOptimization::Results &results); + static void runOptimization(const ReducedModelOptimization::Settings &settings, + ReducedModelOptimization::Results &results); void computeMaps(PatternGeometry &fullModel, PatternGeometry &reducedPattern); void createSimulationMeshes(PatternGeometry &fullModel, PatternGeometry &reducedModel); static void initializeOptimizationParameters( const std::shared_ptr &mesh, - const std::array + const std::array &optimizationParamters); DRMSimulationModel simulator; void computeObjectiveValueNormalizationFactors(); static void getResults(const FunctionEvaluation &optimalObjective, - const ReducedPatternOptimization::Settings &settings, - ReducedPatternOptimization::Results &results); + const ReducedModelOptimization::Settings &settings, + ReducedModelOptimization::Results &results); double computeFullPatternMaxSimulationForce( - const ReducedPatternOptimization::BaseSimulationScenario &scenario) const; + const ReducedModelOptimization::BaseSimulationScenario &scenario) const; #ifdef DLIB_DEFINED static double objective(const dlib::matrix &x); #endif - std::array + std::array getFullPatternMaxSimulationForces( - const std::vector + const std::vector &desiredBaseSimulationScenarioIndices, const std::filesystem::path &intermediateResultsDirectoryPath); - void computeScenarioWeights(const std::vector + void computeScenarioWeights(const std::vector &baseSimulationScenarios); - std::array + std::array computeFullPatternMaxSimulationForces( - const std::vector + const std::vector &desiredBaseSimulationScenario) const; std::vector> createFullPatternSimulationJobs( const std::shared_ptr &pMesh, - const std::array + const std::array &baseScenarioMaxForceMagnitudes) const; }; inline std::function