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
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);

View File

@ -14,7 +14,7 @@
//#define USE_SCENARIO_WEIGHTS
using namespace ReducedPatternOptimization;
using namespace ReducedModelOptimization;
struct GlobalOptimizationVariables
{
@ -31,17 +31,17 @@ struct GlobalOptimizationVariables
std::vector<double> objectiveValueHistory;
std::vector<double> plotColors;
std::array<double,
ReducedPatternOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
parametersInitialValue;
std::array<double,
ReducedPatternOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
ReducedModelOptimization::OptimizationParameterIndex::NumberOfOptimizationVariables>
optimizationInitialValue;
std::vector<int> simulationScenarioIndices;
double minY{DBL_MAX};
std::vector<double> minX;
int numOfSimulationCrashes{false};
int numberOfFunctionCalls{0};
ReducedPatternOptimization::Settings optimizationSettings;
ReducedModelOptimization::Settings optimizationSettings;
vcg::Triangle3<double> baseTriangle;
//Variables for finding the full pattern simulation forces
std::shared_ptr<SimulationMesh> pFullPatternSimulationMesh;
@ -60,7 +60,7 @@ struct GlobalOptimizationVariables
std::vector<double> xMin;
std::vector<double> xMax;
std::vector<double> scenarioWeights;
std::vector<ReducedPatternOptimization::Settings::ObjectiveWeights> objectiveWeights;
std::vector<ReducedModelOptimization::Settings::ObjectiveWeights> objectiveWeights;
} global;
double ReducedModelOptimizer::computeDisplacementError(
@ -662,9 +662,8 @@ void ReducedModelOptimizer::initializeUpdateReducedPatternFunctions()
void ReducedModelOptimizer::initializeOptimizationParameters(
const std::shared_ptr<SimulationMesh> &mesh,
const std::array<ReducedPatternOptimization::xRange,
ReducedPatternOptimization::NumberOfOptimizationVariables>
&optimizationParameters)
const std::array<ReducedModelOptimization::xRange,
ReducedModelOptimization::NumberOfOptimizationVariables> &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<SimulationMesh> &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<BaseSimulationScenario> &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,

View File

@ -65,11 +65,11 @@ public:
// };
// 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"};
constexpr static std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios>
constexpr static std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
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};
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<ReducedPatternOptimization::BaseSimulationScenario> &simulationScenarios
= std::vector<ReducedPatternOptimization::BaseSimulationScenario>(
{ReducedPatternOptimization::Axial,
ReducedPatternOptimization::Shear,
ReducedPatternOptimization::Bending,
ReducedPatternOptimization::Dome,
ReducedPatternOptimization::Saddle}));
const ReducedModelOptimization::Settings &xRanges,
ReducedModelOptimization::Results &results,
const std::vector<ReducedModelOptimization::BaseSimulationScenario> &simulationScenarios
= std::vector<ReducedModelOptimization::BaseSimulationScenario>(
{ReducedModelOptimization::Axial,
ReducedModelOptimization::Shear,
ReducedModelOptimization::Bending,
ReducedModelOptimization::Dome,
ReducedModelOptimization::Saddle}));
double operator()(const Eigen::VectorXd &x, Eigen::VectorXd &) const;
ReducedModelOptimizer(const std::vector<size_t> &numberOfNodesPerSlot);
@ -121,7 +121,7 @@ public:
static void visualizeResults(
const std::vector<std::shared_ptr<SimulationJob>> &fullPatternSimulationJobs,
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>
&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<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>>
@ -221,12 +221,11 @@ public:
static void initializeUpdateReducedPatternFunctions();
static double objective(const double &xValue);
void initializePatterns(
PatternGeometry &fullPattern,
PatternGeometry &reducedPattern,
const std::array<ReducedPatternOptimization::xRange,
ReducedPatternOptimization::NumberOfOptimizationVariables>
&optimizationParameters);
void initializePatterns(PatternGeometry &fullPattern,
PatternGeometry &reducedPattern,
const std::array<ReducedModelOptimization::xRange,
ReducedModelOptimization::NumberOfOptimizationVariables>
&optimizationParameters);
void setIntermediateResultsDirectoryPath(
const std::filesystem::path &newIntermediateResultsDirectoryPath);
@ -236,42 +235,42 @@ private:
const SimulationResults &fullModelResults,
const std::unordered_map<size_t, size_t> &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<SimulationMesh> &mesh,
const std::array<ReducedPatternOptimization::xRange,
ReducedPatternOptimization::NumberOfOptimizationVariables>
const std::array<ReducedModelOptimization::xRange,
ReducedModelOptimization::NumberOfOptimizationVariables>
&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<double, 0, 1> &x);
#endif
std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios>
std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
getFullPatternMaxSimulationForces(
const std::vector<ReducedPatternOptimization::BaseSimulationScenario>
const std::vector<ReducedModelOptimization::BaseSimulationScenario>
&desiredBaseSimulationScenarioIndices,
const std::filesystem::path &intermediateResultsDirectoryPath);
void computeScenarioWeights(const std::vector<ReducedPatternOptimization::BaseSimulationScenario>
void computeScenarioWeights(const std::vector<ReducedModelOptimization::BaseSimulationScenario>
&baseSimulationScenarios);
std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios>
std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
computeFullPatternMaxSimulationForces(
const std::vector<ReducedPatternOptimization::BaseSimulationScenario>
const std::vector<ReducedModelOptimization::BaseSimulationScenario>
&desiredBaseSimulationScenario) const;
std::vector<std::shared_ptr<SimulationJob>> createFullPatternSimulationJobs(
const std::shared_ptr<SimulationMesh> &pMesh,
const std::array<double, ReducedPatternOptimization::NumberOfBaseSimulationScenarios>
const std::array<double, ReducedModelOptimization::NumberOfBaseSimulationScenarios>
&baseScenarioMaxForceMagnitudes) const;
};
inline std::function<void(const double &newE,