Added reduced model evaluation
This commit is contained in:
parent
ace84d3a85
commit
1a1bb359d2
42
src/main.cpp
42
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<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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue