Refactoring
This commit is contained in:
parent
06e95b0e02
commit
f598d6a46e
|
@ -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})
|
||||
|
|
12
src/main.cpp
12
src/main.cpp
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue