From 1a1bb359d2f3ac749ec57b76eb7b44ed5aee0784 Mon Sep 17 00:00:00 2001 From: iasonmanolas Date: Tue, 11 Jan 2022 13:41:51 +0200 Subject: [PATCH] Added reduced model evaluation --- src/main.cpp | 42 ++++++++++++++++++++++++++--------- src/reducedmodeloptimizer.cpp | 41 +++++++++++++++++++--------------- 2 files changed, 54 insertions(+), 29 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 57ccb2d..e9355a4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,7 @@ #include "csvfile.hpp" #include "drmsimulationmodel.hpp" #include "edgemesh.hpp" +#include "reducedmodelevaluator.hpp" #include "reducedmodeloptimizer.hpp" #include "simulationhistoryplotter.hpp" #include "trianglepattterntopology.hpp" @@ -21,6 +22,17 @@ #endif int main(int argc, char *argv[]) { + // ReducedPatternOptimization::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 " + // "patterns/ReducedModelOptimization/Results/OptimizationResults/" + // "objectiveFunction/ConvergedJobs/testSet/7#12"); + // optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/" + // "singlePattern_dlib_23_12/12@single_reduced(100000_1.20)"); + // optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/" + // "singlePattern_ensmallen_AllVars_optParameters/7#12"); + // ReducedModelEvaluator::evaluateReducedModel(optResults); if (argc <= 5) { std::cerr << "Wrong number of input parameters. Expects at least 4 input parameters." "Usage:\n" @@ -31,6 +43,8 @@ int main(int argc, char *argv[]) "5)[optional]Intermediate results directory path\n" "Exiting.." << std::endl; + std::cerr << "Input arguments are:" << std::endl; + std::copy(argv + 1, argv + argc, std::ostream_iterator(std::cout, "\n")); return 1; } @@ -53,15 +67,18 @@ int main(int argc, char *argv[]) << optimizationSettingsFilePath << std::endl; } ReducedPatternOptimization::Settings settings_optimization; +#ifdef POLYSCOPE_DEFINED +// settings_optimization.save(optimizationSettingsFilePath.parent_path()); +// std::cout << "Save settings to:" << optimizationSettingsFilePath << std::endl; +#else settings_optimization.load(optimizationSettingsFilePath); +#endif + // settings_optimization.setDefault(); + // settings_optimization.rotationNormalizationEpsilon = 0; // Optimize pairthere - const std::string pairName = std::to_string(fullPattern.EN()) + "#" - + fullPattern.getLabel(); // + "@" + reducedPattern.getLabel(); - const std::string optimizationName = pairName /* + "_" - + std::to_string( - settings_optimization.numberOfFunctionCalls)*/ - ; + const std::string optimizationName = std::to_string(fullPattern.EN()) + "#" + + fullPattern.getLabel(); const std::string optimizationResultsDirectory = argv[4]; std::string resultsOutputDir; bool optimizationResultFolderExists = false; @@ -128,8 +145,8 @@ int main(int argc, char *argv[]) settings_optimization.writeHeaderTo(csv_results); csv_results << endrow; csv_resultsLocalFile << endrow; - csv_results << std::to_string(fullPattern.EN()) + "#" + pairName; - csv_resultsLocalFile << std::to_string(fullPattern.EN()) + "#" + pairName; + csv_results << optimizationName; + csv_resultsLocalFile << optimizationName; optimizationResults.writeResultsTo(csvVector); settings_optimization.writeSettingsTo(csv_results); csv_results << endrow; @@ -184,9 +201,12 @@ int main(int argc, char *argv[]) .append("perScenarioObjectiveValues.png")); // optimizationResults.saveMeshFiles(); std::cout << "Saved results to:" << resultsOutputDir << std::endl; - optimizationResults.draw(); - -#endif + // optimizationResults.draw(); + // ReducedPatternOptimization::Results optResults; + // optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/" + // "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)"); + ReducedModelEvaluator::evaluateReducedModel(optimizationResults); +#endif return 0; } diff --git a/src/reducedmodeloptimizer.cpp b/src/reducedmodeloptimizer.cpp index 4cff233..a5a30ac 100644 --- a/src/reducedmodeloptimizer.cpp +++ b/src/reducedmodeloptimizer.cpp @@ -1,4 +1,5 @@ #include "reducedmodeloptimizer.hpp" +#include "hexagonremesher.hpp" #include "linearsimulationmodel.hpp" #include "simulationhistoryplotter.hpp" #include "trianglepatterngeometry.hpp" @@ -17,7 +18,6 @@ using namespace ReducedPatternOptimization; struct GlobalOptimizationVariables { - // int totalNumberOfSimulationScenarios; std::vector fullPatternResults; std::vector translationalDisplacementNormalizationValues; std::vector rotationalDisplacementNormalizationValues; @@ -41,7 +41,6 @@ struct GlobalOptimizationVariables std::vector minX; int numOfSimulationCrashes{false}; int numberOfFunctionCalls{0}; - int numberOfOptimizationParameters{5}; ReducedPatternOptimization::Settings optimizationSettings; vcg::Triangle3 baseTriangle; //Variables for finding the full pattern simulation forces @@ -187,14 +186,16 @@ struct EnsmallenOptimizationObjective //#ifdef POLYSCOPE_DEFINED // std::cout << "Out of range" << std::endl; //#endif - return std::numeric_limits::max(); - // x[xi] = global.xMax[xi]; + // return std::numeric_limits::max(); + // return 1000; + x[xi] = global.xMax[xi]; } else if (x[xi] < global.xMin[xi]) { //#ifdef POLYSCOPE_DEFINED // std::cout << "Out of range" << std::endl; //#endif - return std::numeric_limits::max(); - // x[xi] = global.xMin[xi]; + // return std::numeric_limits::max(); + // return 1000; + x[xi] = global.xMin[xi]; } } return ReducedModelOptimizer::objective(x); @@ -617,7 +618,6 @@ void ReducedModelOptimizer::initializeUpdateReducedPatternFunctions() global.functions_updateReducedPatternParameter[E] = [](const double &newE, std::shared_ptr &pReducedPatternSimulationMesh) { - // std::cout << "Updating E with new value:" << newE << std::endl; for (EdgeIndex ei = 0; ei < pReducedPatternSimulationMesh->EN(); ei++) { Element &e = pReducedPatternSimulationMesh->elements[ei]; e.setMaterial(ElementMaterial(e.material.poissonsRatio, newE)); @@ -666,7 +666,6 @@ void ReducedModelOptimizer::initializeOptimizationParameters( ReducedPatternOptimization::NumberOfOptimizationVariables> &optimizationParameters) { - global.numberOfOptimizationParameters = NumberOfOptimizationVariables; for (int optimizationParameterIndex = 0; optimizationParameterIndex < optimizationParameters.size(); @@ -1394,10 +1393,10 @@ double fullPatternMaxSimulationForceRotationalObjective(const double &forceMagni DRMSimulationModel simulator; DRMSimulationModel::Settings settings; - settings.totalExternalForcesNormPercentageTermination = 1e-2; - settings.totalTranslationalKineticEnergyThreshold = 1e-8; - settings.viscousDampingFactor = 1e-2; - settings.useKineticDamping = true; + // settings.totalExternalForcesNormPercentageTermination = 1e-2; + settings.totalTranslationalKineticEnergyThreshold = 1e-10; + // settings.viscousDampingFactor = 1e-2; + // settings.useKineticDamping = true; settings.shouldDraw = false; settings.debugModeStep = 200; // settings.averageResidualForcesCriterionThreshold = 1e-5; @@ -1569,7 +1568,7 @@ double ReducedModelOptimizer::computeFullPatternMaxSimulationForce( case Bending: break; case Dome: - global.desiredMaxRotationAngle = vcg::math::ToRad(25.0); + global.desiredMaxRotationAngle = vcg::math::ToRad(35.0); objectiveFunction = &fullPatternMaxSimulationForceRotationalObjective; forceMagnitudeEpsilon *= 1e-2; objectiveEpsilon = vcg::math::ToRad(3.0); @@ -1617,7 +1616,7 @@ double ReducedModelOptimizer::computeFullPatternMaxSimulationForce( SimulationJob job; job.pMesh = global.pFullPatternSimulationMesh; global.constructScenarioFunction(forceMagnitude, global.fullPatternInterfaceViPairs, job); - std::cout << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] + std::cerr << ReducedPatternOptimization::baseSimulationScenarioNames[scenario] + " max scenario magnitude was not succefully determined." << std::endl; std::filesystem::path outputPath( @@ -1883,10 +1882,16 @@ void ReducedModelOptimizer::optimize( results.baseTriangle = global.baseTriangle; DRMSimulationModel::Settings simulationSettings; - simulationSettings.maxDRMIterations = 200000; - simulationSettings.totalTranslationalKineticEnergyThreshold = 1e-10; - simulationSettings.viscousDampingFactor = 5e-3; - simulationSettings.useKineticDamping = true; +// simulationSettings.maxDRMIterations = 200000; +// simulationSettings.totalTranslationalKineticEnergyThreshold = 1e-10; +// simulationSettings.viscousDampingFactor = 5e-3; +// simulationSettings.useKineticDamping = true; +// simulationSettings.save(std::filesystem::path(std::string(__FILE__)) +// .parent_path() +// .parent_path() +// .append("DefaultSettings") +// .append("DRMSettings") +// .append("defaultDRMSimulationSettings.json")); // simulationSettings.averageResidualForcesCriterionThreshold = 1e-5; // simulationSettings.viscousDampingFactor = 1e-3;