Moved global variable to struct when ensmallen is used. And left the global variable when dlib is used for optimization. Added the S scenario. Removed static keyword from several functions
This commit is contained in:
parent
5c4f8c0bd5
commit
96807c3b85
File diff suppressed because it is too large
Load Diff
|
|
@ -25,6 +25,52 @@ using ReducedPatternVertexIndex = VertexIndex;
|
||||||
|
|
||||||
class ReducedModelOptimizer
|
class ReducedModelOptimizer
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
struct OptimizationState
|
||||||
|
{
|
||||||
|
std::vector<SimulationResults> fullPatternResults;
|
||||||
|
std::vector<double> translationalDisplacementNormalizationValues;
|
||||||
|
std::vector<double> rotationalDisplacementNormalizationValues;
|
||||||
|
std::vector<std::shared_ptr<SimulationJob>> fullPatternSimulationJobs;
|
||||||
|
std::vector<std::shared_ptr<SimulationJob>> reducedPatternSimulationJobs;
|
||||||
|
std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex>
|
||||||
|
reducedToFullInterfaceViMap;
|
||||||
|
std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>>
|
||||||
|
fullPatternOppositeInterfaceViPairs;
|
||||||
|
matplot::line_handle gPlotHandle;
|
||||||
|
std::vector<size_t> objectiveValueHistory_iteration;
|
||||||
|
std::vector<double> objectiveValueHistory;
|
||||||
|
std::vector<double> plotColors;
|
||||||
|
std::array<double,
|
||||||
|
ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
|
||||||
|
parametersInitialValue;
|
||||||
|
std::array<double,
|
||||||
|
ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
|
||||||
|
optimizationInitialValue;
|
||||||
|
std::vector<int> simulationScenarioIndices;
|
||||||
|
double minY{DBL_MAX};
|
||||||
|
std::vector<double> minX;
|
||||||
|
int numOfSimulationCrashes{false};
|
||||||
|
int numberOfFunctionCalls{0};
|
||||||
|
//Variables for finding the full pattern simulation forces
|
||||||
|
std::shared_ptr<SimulationMesh> pFullPatternSimulationMesh;
|
||||||
|
std::array<std::function<void(const double &newValue,
|
||||||
|
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh)>,
|
||||||
|
7>
|
||||||
|
functions_updateReducedPatternParameter;
|
||||||
|
std::vector<double> xMin;
|
||||||
|
std::vector<double> xMax;
|
||||||
|
std::vector<double> scenarioWeights;
|
||||||
|
std::vector<ReducedModelOptimization::Settings::ObjectiveWeights> objectiveWeights;
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
OptimizationState optimizationState;
|
||||||
|
vcg::Triangle3<double> baseTriangle;
|
||||||
|
std::function<void(const double &,
|
||||||
|
const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>> &,
|
||||||
|
SimulationJob &)>
|
||||||
|
constructScenarioFunction;
|
||||||
std::shared_ptr<SimulationMesh> m_pReducedPatternSimulationMesh;
|
std::shared_ptr<SimulationMesh> m_pReducedPatternSimulationMesh;
|
||||||
std::shared_ptr<SimulationMesh> m_pFullPatternSimulationMesh;
|
std::shared_ptr<SimulationMesh> m_pFullPatternSimulationMesh;
|
||||||
std::unordered_map<FullPatternVertexIndex, ReducedPatternVertexIndex>
|
std::unordered_map<FullPatternVertexIndex, ReducedPatternVertexIndex>
|
||||||
|
|
@ -34,15 +80,17 @@ class ReducedModelOptimizer
|
||||||
std::unordered_map<size_t, size_t> nodeToSlot;
|
std::unordered_map<size_t, size_t> nodeToSlot;
|
||||||
std::unordered_map<size_t, std::unordered_set<size_t>> slotToNode;
|
std::unordered_map<size_t, std::unordered_set<size_t>> slotToNode;
|
||||||
std::string optimizationNotes;
|
std::string optimizationNotes;
|
||||||
std::vector<std::function<
|
std::array<std::function<void(
|
||||||
void(const double &,
|
const double &,
|
||||||
const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>> &,
|
const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>> &,
|
||||||
SimulationJob &)>>
|
SimulationJob &)>,
|
||||||
|
ReducedModelOptimization::NumberOfBaseSimulationScenarios>
|
||||||
constructBaseScenarioFunctions;
|
constructBaseScenarioFunctions;
|
||||||
std::vector<bool> scenarioIsSymmetrical;
|
std::vector<bool> scenarioIsSymmetrical;
|
||||||
int fullPatternNumberOfEdges;
|
int fullPatternNumberOfEdges;
|
||||||
constexpr static double youngsModulus{1 * 1e9};
|
constexpr static double youngsModulus{1 * 1e9};
|
||||||
std::string fullPatternLabel;
|
std::string fullPatternLabel;
|
||||||
|
// ReducedModelOptimization::Settings optimizationSettings;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
struct FunctionEvaluation
|
struct FunctionEvaluation
|
||||||
|
|
@ -69,7 +117,7 @@ public:
|
||||||
inline static std::array<std::string, ReducedModelOptimization::NumberOfOptimizationVariables>
|
inline static std::array<std::string, ReducedModelOptimization::NumberOfOptimizationVariables>
|
||||||
parameterLabels = {"E", "A", "I2", "I3", "J", "Theta", "R"};
|
parameterLabels = {"E", "A", "I2", "I3", "J", "Theta", "R"};
|
||||||
constexpr static std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
|
constexpr static std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
|
||||||
simulationScenariosResolution = {11, 11, 20, 20, 20};
|
simulationScenariosResolution = {11, 11, 21, 21, 21, 21};
|
||||||
constexpr static std::array<double, ReducedModelOptimization::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
|
||||||
|
|
@ -100,15 +148,15 @@ public:
|
||||||
PatternGeometry &reducedModel,
|
PatternGeometry &reducedModel,
|
||||||
std::shared_ptr<SimulationMesh> &pFullPatternSimulationMesh,
|
std::shared_ptr<SimulationMesh> &pFullPatternSimulationMesh,
|
||||||
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh);
|
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh);
|
||||||
static void computeMaps(const std::unordered_map<size_t, std::unordered_set<size_t>> &slotToNode,
|
void computeMaps(const std::unordered_map<size_t, std::unordered_set<size_t>> &slotToNode,
|
||||||
PatternGeometry &fullPattern,
|
PatternGeometry &fullPattern,
|
||||||
PatternGeometry &reducedPattern,
|
PatternGeometry &reducedPattern,
|
||||||
std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex>
|
std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex>
|
||||||
&reducedToFullInterfaceViMap,
|
&reducedToFullInterfaceViMap,
|
||||||
std::unordered_map<FullPatternVertexIndex, ReducedPatternVertexIndex>
|
std::unordered_map<FullPatternVertexIndex, ReducedPatternVertexIndex>
|
||||||
&fullToReducedInterfaceViMap,
|
&fullToReducedInterfaceViMap,
|
||||||
std::vector<std::pair<FullPatternVertexIndex, ReducedPatternVertexIndex>>
|
std::vector<std::pair<FullPatternVertexIndex, ReducedPatternVertexIndex>>
|
||||||
&fullPatternOppositeInterfaceViMap);
|
&fullPatternOppositeInterfaceViMap);
|
||||||
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,
|
||||||
|
|
@ -134,10 +182,6 @@ public:
|
||||||
&reducedToFullInterfaceViMap,
|
&reducedToFullInterfaceViMap,
|
||||||
const double &normalizationFactor);
|
const double &normalizationFactor);
|
||||||
|
|
||||||
static double objective(double E,
|
|
||||||
double A,
|
|
||||||
double innerHexagonSize,
|
|
||||||
double innerHexagonRotationAngle);
|
|
||||||
static double computeRawRotationalError(
|
static double computeRawRotationalError(
|
||||||
const std::vector<Eigen::Quaterniond> &rotatedQuaternion_fullPattern,
|
const std::vector<Eigen::Quaterniond> &rotatedQuaternion_fullPattern,
|
||||||
const std::vector<Eigen::Quaterniond> &rotatedQuaternion_reducedPattern,
|
const std::vector<Eigen::Quaterniond> &rotatedQuaternion_reducedPattern,
|
||||||
|
|
@ -187,6 +231,11 @@ public:
|
||||||
const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>>
|
const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>>
|
||||||
&oppositeInterfaceViPairs,
|
&oppositeInterfaceViPairs,
|
||||||
SimulationJob &job);
|
SimulationJob &job);
|
||||||
|
static void constructSSimulationScenario(
|
||||||
|
const double &forceMagnitude,
|
||||||
|
const std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>>
|
||||||
|
&oppositeInterfaceViPairs,
|
||||||
|
SimulationJob &job);
|
||||||
static std::function<void(const std::vector<double> &x,
|
static std::function<void(const std::vector<double> &x,
|
||||||
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh)>
|
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh)>
|
||||||
function_updateReducedPattern;
|
function_updateReducedPattern;
|
||||||
|
|
@ -209,20 +258,22 @@ public:
|
||||||
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh)>
|
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh)>
|
||||||
function_updateReducedPattern_material_J;
|
function_updateReducedPattern_material_J;
|
||||||
static double objective(const std::vector<double> &x);
|
static double objective(const std::vector<double> &x);
|
||||||
static void initializeUpdateReducedPatternFunctions();
|
void initializeUpdateReducedPatternFunctions();
|
||||||
static double objective(const double &xValue);
|
// static double objective(const double &xValue);
|
||||||
|
|
||||||
ReducedModelOptimization::Results optimize(
|
ReducedModelOptimization::Results optimize(
|
||||||
ConstPatternGeometry &fullPattern,
|
ConstPatternGeometry &fullPattern,
|
||||||
const ReducedModelOptimization::Settings &optimizationSettings);
|
const ReducedModelOptimization::Settings &optimizatifullyonSettings);
|
||||||
|
|
||||||
void optimize(ConstPatternGeometry &fullPattern,
|
void optimize(ConstPatternGeometry &fullPattern,
|
||||||
const ReducedModelOptimization::Settings &optimizationSettings,
|
ReducedModelOptimization::Settings &optimizationSettings,
|
||||||
ReducedModelOptimization::Results &optimizationResults);
|
ReducedModelOptimization::Results &optimizationResults);
|
||||||
|
static double objective(const std::vector<double> &x,
|
||||||
|
ReducedModelOptimizer::OptimizationState &optimizationState);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void optimize(
|
void optimize(
|
||||||
const ReducedModelOptimization::Settings &xRanges,
|
ReducedModelOptimization::Settings &optimizationSettings,
|
||||||
ReducedModelOptimization::Results &results,
|
ReducedModelOptimization::Results &results,
|
||||||
const std::vector<ReducedModelOptimization::BaseSimulationScenario> &simulationScenarios
|
const std::vector<ReducedModelOptimization::BaseSimulationScenario> &simulationScenarios
|
||||||
= std::vector<ReducedModelOptimization::BaseSimulationScenario>(
|
= std::vector<ReducedModelOptimization::BaseSimulationScenario>(
|
||||||
|
|
@ -230,7 +281,8 @@ private:
|
||||||
ReducedModelOptimization::Shear,
|
ReducedModelOptimization::Shear,
|
||||||
ReducedModelOptimization::Bending,
|
ReducedModelOptimization::Bending,
|
||||||
ReducedModelOptimization::Dome,
|
ReducedModelOptimization::Dome,
|
||||||
ReducedModelOptimization::Saddle}));
|
ReducedModelOptimization::Saddle,
|
||||||
|
ReducedModelOptimization::S}));
|
||||||
|
|
||||||
void initializePatterns(PatternGeometry &fullPattern,
|
void initializePatterns(PatternGeometry &fullPattern,
|
||||||
PatternGeometry &reducedPattern,
|
PatternGeometry &reducedPattern,
|
||||||
|
|
@ -241,30 +293,29 @@ 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 ReducedModelOptimization::Settings &settings,
|
void runOptimization(const ReducedModelOptimization::Settings &settings,
|
||||||
ReducedModelOptimization::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(
|
void initializeOptimizationParameters(
|
||||||
const std::shared_ptr<SimulationMesh> &mesh,
|
const std::shared_ptr<SimulationMesh> &mesh,
|
||||||
const std::array<ReducedModelOptimization::xRange,
|
const std::array<ReducedModelOptimization::xRange,
|
||||||
ReducedModelOptimization::NumberOfOptimizationVariables>
|
ReducedModelOptimization::NumberOfOptimizationVariables>
|
||||||
&optimizationParamters);
|
&optimizationParamters);
|
||||||
|
|
||||||
DRMSimulationModel simulator;
|
DRMSimulationModel simulator;
|
||||||
void computeObjectiveValueNormalizationFactors();
|
void computeObjectiveValueNormalizationFactors(
|
||||||
|
const ReducedModelOptimization::Settings &optimizationSettings);
|
||||||
|
|
||||||
static void getResults(const FunctionEvaluation &optimalObjective,
|
void getResults(const FunctionEvaluation &optimalObjective,
|
||||||
const ReducedModelOptimization::Settings &settings,
|
const ReducedModelOptimization::Settings &settings,
|
||||||
ReducedModelOptimization::Results &results);
|
ReducedModelOptimization::Results &results);
|
||||||
double computeFullPatternMaxSimulationForce(
|
double computeFullPatternMaxSimulationForce(
|
||||||
const ReducedModelOptimization::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
|
||||||
void computeScenarioWeights(const std::vector<ReducedModelOptimization::BaseSimulationScenario>
|
|
||||||
&baseSimulationScenarios);
|
|
||||||
std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
|
std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
|
||||||
computeFullPatternMaxSimulationForces(
|
computeFullPatternMaxSimulationForces(
|
||||||
const std::vector<ReducedModelOptimization::BaseSimulationScenario>
|
const std::vector<ReducedModelOptimization::BaseSimulationScenario>
|
||||||
|
|
@ -281,6 +332,9 @@ private:
|
||||||
const bool &recomputeForceMagnitudes);
|
const bool &recomputeForceMagnitudes);
|
||||||
std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
|
std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
|
||||||
getFullPatternMaxSimulationForces();
|
getFullPatternMaxSimulationForces();
|
||||||
|
void computeScenarioWeights(
|
||||||
|
const std::vector<ReducedModelOptimization::BaseSimulationScenario> &baseSimulationScenarios,
|
||||||
|
const ReducedModelOptimization::Settings &optimizationSettings);
|
||||||
};
|
};
|
||||||
inline std::function<void(const double &newE,
|
inline std::function<void(const double &newE,
|
||||||
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh)>
|
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh)>
|
||||||
|
|
@ -303,7 +357,6 @@ inline std::function<void(const double &newJ,
|
||||||
inline std::function<void(const std::vector<double> &x, std::shared_ptr<SimulationMesh> &m)>
|
inline std::function<void(const std::vector<double> &x, std::shared_ptr<SimulationMesh> &m)>
|
||||||
ReducedModelOptimizer::function_updateReducedPattern;
|
ReducedModelOptimizer::function_updateReducedPattern;
|
||||||
|
|
||||||
struct GlobalOptimizationVariables;
|
extern ReducedModelOptimizer::OptimizationState global;
|
||||||
extern GlobalOptimizationVariables global;
|
|
||||||
|
|
||||||
#endif // REDUCEDMODELOPTIMIZER_HPP
|
#endif // REDUCEDMODELOPTIMIZER_HPP
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue