Added reduced model evaluation

This commit is contained in:
iasonmanolas 2022-01-11 13:41:51 +02:00
parent ace84d3a85
commit 1a1bb359d2
2 changed files with 54 additions and 29 deletions

View File

@ -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<const char *>(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;
}

View File

@ -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<SimulationResults> fullPatternResults;
std::vector<double> translationalDisplacementNormalizationValues;
std::vector<double> rotationalDisplacementNormalizationValues;
@ -41,7 +41,6 @@ struct GlobalOptimizationVariables
std::vector<double> minX;
int numOfSimulationCrashes{false};
int numberOfFunctionCalls{0};
int numberOfOptimizationParameters{5};
ReducedPatternOptimization::Settings optimizationSettings;
vcg::Triangle3<double> 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<double>::max();
// x[xi] = global.xMax[xi];
// return std::numeric_limits<double>::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<double>::max();
// x[xi] = global.xMin[xi];
// return std::numeric_limits<double>::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<SimulationMesh> &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;