Compiles on windows. Cannot be parallelized currently due to the global variables of ReducedModelOptimizer. Each thread needs to have its own copy but dynamic instantiation cannot be used for initializing it..

This commit is contained in:
iasonmanolas 2021-02-04 16:38:52 +02:00
parent 6012b1ef5a
commit 89bd63d2b5
2 changed files with 5 additions and 8 deletions

View File

@ -121,15 +121,14 @@ int main(int argc, char *argv[]) {
ReducedModelOptimizer optimizer(numberOfNodesPerSlot);
optimizer.initializePatterns(*patternPairs[patternPairIndex].first,
*patternPairs[patternPairIndex].second,
optimizationSpaceSamplingDisplacements,
optimizationExcludedEi);
optimizationExcludedEi);
// optimizer.optimize({ReducedModelOptimizer::Axial});
ReducedModelOptimizer::Results optimizationResults =
optimizer.optimize(settings);
totalError += optimizationResults.objectiveValue;
resultsPerPattern[patternPairIndex] =
std::make_pair(pPattern->getLabel(), optimizationResults);
std::make_pair(patternPairs[patternPairIndex].first->getLabel(), optimizationResults);
totalNumberOfSimulationCrashes +=
optimizationResults.numberOfSimulationCrashes;
// std::cout << "Have optimized " << ++patternsOptimized << "/"

View File

@ -8,7 +8,6 @@
#include <dlib/optimization.h>
struct GlobalOptimizationVariables {
const bool gShouldDraw = true;
std::vector<Eigen::MatrixX3d> g_optimalReducedModelDisplacements;
std::vector<SimulationJob> g_fullPatternSimulationJob;
std::vector<std::shared_ptr<SimulationJob>> g_reducedPatternSimulationJob;
@ -20,22 +19,21 @@ struct GlobalOptimizationVariables {
std::vector<double> gObjectiveValueHistory;
Eigen::Vector2d g_initialX;
std::unordered_set<size_t> g_reducedPatternExludedEdges;
// double g_initialParameters;
Eigen::VectorXd g_initialParameters;
std::vector<ReducedModelOptimizer::SimulationScenario>
g_simulationScenarioIndices;
std::vector<VectorType> g_innerHexagonVectors{6, VectorType(0, 0, 0)};
double g_innerHexagonInitialPos = 0;
double g_innerHexagonInitialPos{0};
bool g_optimizeInnerHexagonSize{false};
std::vector<SimulationResults> firstOptimizationRoundResults;
int g_firstRoundIterationIndex{0};
double minY{std::numeric_limits<double>::max()};
double minY{DBL_MAX};
std::vector<double> minX;
std::vector<std::vector<double>> failedSimulationsXRatio;
int numOfSimulationCrashes{false};
int numberOfFunctionCalls{0};
} global;
#pragma omp threadprivate(global)
//#pragma omp threadprivate(global)
// struct OptimizationCallback {
// double operator()(const size_t &iterations, const Eigen::VectorXd &x,
// const double &fval, Eigen::VectorXd &gradient) const {