Refactoring

This commit is contained in:
iasonmanolas 2021-11-15 11:28:12 +02:00
parent 06e95b0e02
commit f598d6a46e
3 changed files with 24 additions and 26 deletions

View File

@ -2,7 +2,9 @@ cmake_minimum_required(VERSION 2.8)
project(ReducedModelOptimization)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
message(STATUS "The compiler ${CMAKE_CXX_COMPILER}")
message(STATUS "The compiler ${CMAKE_CXX_COMPILER}")
SET(CMAKE_SYSTEM_NAME Windows)
#Add the project cmake scripts to the module path
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
@ -42,7 +44,7 @@ download_project(PROJ POLYSCOPE
add_subdirectory(${POLYSCOPE_SOURCE_DIR} ${POLYSCOPE_BINARY_DIR})
add_compile_definitions(POLYSCOPE_DEFINED)
endif()
set(MYSOURCES_STATIC_LINK NOT ${USE_POLYSCOPE})
set(MYSOURCES_SOURCE_DIR "/home/iason/Coding/Libraries/MySources")
if (EXISTS ${MYSOURCES_SOURCE_DIR})

View File

@ -48,20 +48,20 @@ int main(int argc, char *argv[]) {
ReducedPatternOptimization::xRange innerHexagonAngle{"HexAngle", -30.0, 30.0};
ReducedPatternOptimization::Settings settings_optimization;
settings_optimization.xRanges
= {beamE, beamA, beamI2, beamI3, beamJ, innerHexagonSize, innerHexagonAngle};
= {/*beamE,*/ beamA, beamI2, beamI3, beamJ, innerHexagonSize, innerHexagonAngle};
const bool input_numberOfFunctionCallsDefined = argc >= 4;
settings_optimization.numberOfFunctionCalls = input_numberOfFunctionCallsDefined
? std::atoi(argv[3])
: 100;
settings_optimization.normalizationStrategy
= ReducedPatternOptimization::Settings::NormalizationStrategy::Epsilon;
settings_optimization.splitGeometryMaterialOptimization = false;
settings_optimization.translationNormalizationParameter = 1e-3;
settings_optimization.rotationNormalizationParameter = vcg::math::ToRad(3.0);
// settings_optimization.translationNormalizationParameter = 1e-15;
// settings_optimization.rotationNormalizationParameter = vcg::math::ToRad(1e-15);
// settings_optimization.solverAccuracy = 1e-3;
settings_optimization.solverAccuracy = 1e-3;
settings_optimization.solverAccuracy = 1e-1;
settings_optimization.objectiveWeights.translational = std::atof(argv[4]);
settings_optimization.objectiveWeights.rotational = 2 - std::atof(argv[4]);
@ -129,7 +129,6 @@ int main(int argc, char *argv[]) {
if (optimizationResults.wasSuccessful) {
resultsOutputDir = convergedJobsDirPath.string();
csvFile csv_results({}, false);
// csvFile csv_results(std::filesystem::path(resultsOutputDir).append("optimizationDistances.csv"), false);
csv_results << "Name";
optimizationResults.writeHeaderTo(csv_results);
settings_optimization.writeHeaderTo(csv_results);
@ -146,11 +145,6 @@ int main(int argc, char *argv[]) {
#ifdef POLYSCOPE_DEFINED
// optimizationResults.saveMeshFiles();
std::cout << "E:"
<< optimizationResults.reducedPatternSimulationJobs[0]
->pMesh->elements[0]
.material.youngsModulus
<< std::endl;
optimizationResults.draw();
#endif

View File

@ -20,10 +20,9 @@ struct GlobalOptimizationVariables {
std::vector<std::pair<FullPatternVertexIndex, FullPatternVertexIndex>>
fullPatternInterfaceViPairs;
matplot::line_handle gPlotHandle;
std::vector<double> objectiveValueHistoryY;
std::vector<double> objectiveValueHistoryX;
std::vector<size_t> objectiveValueHistory_iteration;
std::vector<double> objectiveValueHistory;
std::vector<double> plotColors;
size_t iterationOfMinima{0};
Eigen::VectorXd initialParameters;
std::vector<int> simulationScenarioIndices;
double minY{DBL_MAX};
@ -259,7 +258,8 @@ double ReducedModelOptimizer::objective(const dlib::matrix<double, 0, 1> &x)
++global.numberOfFunctionCalls;
if (totalError < global.minY) {
global.minY = totalError;
global.iterationOfMinima = global.numberOfFunctionCalls;
global.objectiveValueHistory.push_back(totalError);
global.objectiveValueHistory_iteration.push_back(global.numberOfFunctionCalls);
// std::cout << "New best:" << totalError << std::endl;
// // global.minX.assign(x.begin(), x.begin() + n);
// std::cout.precision(17);
@ -961,7 +961,8 @@ void ReducedModelOptimizer::getResults(const dlib::function_evaluation &optimiza
// global.reducedPatternSimulationJobs[simulationScenarioIndex]->pMesh->registerForDrawing();
// global.reducedPatternSimulationJobs[simulationScenarioIndex]->pMesh->setLabel(temp);
}
results.iterationOfMinima = global.iterationOfMinima;
results.objectiveValueHistory = global.objectiveValueHistory;
results.objectiveValueHistory_iteration = global.objectiveValueHistory_iteration;
// results.draw();
}
@ -1029,16 +1030,17 @@ ReducedModelOptimizer::getFullPatternMaxSimulationForces(
void ReducedModelOptimizer::runOptimization(const Settings &settings,
ReducedPatternOptimization::Results &results)
{
global.objectiveValueHistory.clear();
global.objectiveValueHistory_iteration.clear();
global.objectiveValueHistory.reserve(settings.numberOfFunctionCalls / 100);
global.objectiveValueHistory_iteration.reserve(settings.numberOfFunctionCalls / 100);
#if POLYSCOPE_DEFINED
global.objectiveValueHistoryY.clear();
global.objectiveValueHistoryY.reserve(settings.numberOfFunctionCalls);
global.objectiveValueHistoryX.reserve(settings.numberOfFunctionCalls);
global.plotColors.reserve(settings.numberOfFunctionCalls);
#endif
double (*objF)(const dlib::matrix<double, 0, 1> &) = &objective;
dlib::function_evaluation optimalResult;
constexpr bool shouldJointlyOptimizeGeometryAndMaterial = false;
const auto hexAngleParameterIt = std::find_if(settings.xRanges.begin(),
settings.xRanges.end(),
[](const xRange &x) {
@ -1058,7 +1060,7 @@ void ReducedModelOptimizer::runOptimization(const Settings &settings,
- numberOfGeometryOptimizationParameters;
const bool hasGeometryAndMaterialParameters = hasBothGeometricalParameters
&& numberOfMaterialOptimizationParameters != 0;
if (!shouldJointlyOptimizeGeometryAndMaterial && hasGeometryAndMaterialParameters) {
if (settings.splitGeometryMaterialOptimization && hasGeometryAndMaterialParameters) {
//Geometry optimization of the reduced pattern
dlib::matrix<double, 0, 1> xGeometryMin(numberOfGeometryOptimizationParameters);
dlib::matrix<double, 0, 1> xGeometryMax(numberOfGeometryOptimizationParameters);
@ -1145,11 +1147,11 @@ void ReducedModelOptimizer::runOptimization(const Settings &settings,
std::copy(result_dlib_geometry.x.begin(),
result_dlib_geometry.x.end(),
optimalResult.x.begin() + numberOfMaterialOptimizationParameters);
std::cout << "opt x:";
for (const auto optx : optimalResult.x) {
std::cout << optx << " ";
}
std::cout << std::endl;
// std::cout << "opt x:";
// for (const auto optx : optimalResult.x) {
// std::cout << optx << " ";
// }
// std::cout << std::endl;
function_updateReducedPattern =
[&](const dlib::matrix<double, 0, 1> &x,
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh) {