8 #include "../Output/OutputQueue.hpp"
14 void NOMAD::Subproblem::init()
16 if (
nullptr == _refPbParams)
18 throw NOMAD::Exception(__FILE__, __LINE__,
19 "A valid PbParameters must be provided to the Subproblem constructor.");
23 auto nbFixed = _fixedVariable.nbDefined();
24 const size_t refDimension = _refPbParams->getAttributeValue<
size_t>(
"DIMENSION");
25 _dimension = refDimension - nbFixed;
27 std::string s =
"FIXED_VARIABLE set to " + _fixedVariable.display();
28 NOMAD::OutputQueue::Add(s, NOMAD::OutputLevel::LEVEL_INFO);
30 setupProblemParameters();
34 NOMAD::Subproblem::~Subproblem()
39 void NOMAD::Subproblem::setupProblemParameters()
45 const size_t refDimension = _refPbParams->getAttributeValue<
size_t>(
"DIMENSION");
46 size_t n = _dimension;
48 _subPbParams = std::make_shared<NOMAD::PbParameters>();
49 _subPbParams->setAttributeValue(
"DIMENSION", n);
53 const auto refLowerBound = _refPbParams->getAttributeValue<NOMAD::ArrayOfDouble>(
"LOWER_BOUND");
54 const auto refUpperBound = _refPbParams->getAttributeValue<NOMAD::ArrayOfDouble>(
"UPPER_BOUND");
56 const auto refInitMeshSize = _refPbParams->getAttributeValue<NOMAD::ArrayOfDouble>(
"INITIAL_MESH_SIZE");
57 const auto refInitFrameSize = _refPbParams->getAttributeValue<NOMAD::ArrayOfDouble>(
"INITIAL_FRAME_SIZE");
58 const auto refMinMeshSize = _refPbParams->getAttributeValue<NOMAD::ArrayOfDouble>(
"MIN_MESH_SIZE");
59 const auto refMinFrameSize = _refPbParams->getAttributeValue<NOMAD::ArrayOfDouble>(
"MIN_FRAME_SIZE");
60 const auto refGranularity = _refPbParams->getAttributeValue<NOMAD::ArrayOfDouble>(
"GRANULARITY");
64 for (
size_t x0index = 0; x0index < refX0s.size(); x0index++)
69 NOMAD::ArrayOfDouble lb(n), ub(n);
71 NOMAD::ArrayOfDouble initialMeshSize(n), initialFrameSize(n), minMeshSize(n), minFrameSize(n);
72 NOMAD::ArrayOfDouble granularity(n);
77 for (
size_t refIndex = 0; refIndex < refDimension; refIndex++)
79 if (_fixedVariable[refIndex].isDefined())
84 for (
size_t x0index = 0; x0index < refX0s.size(); x0index++)
86 auto refX0 = refX0s[x0index];
87 x0s[x0index][i] = refX0[refIndex];
89 lb[i] = refLowerBound[refIndex];
90 ub[i] = refUpperBound[refIndex];
91 bbInputType.push_back(refBBInputType[refIndex]);
92 initialMeshSize[i] = refInitMeshSize[refIndex];
93 initialFrameSize[i] = refInitFrameSize[refIndex];
94 minMeshSize[i] = refMinMeshSize[refIndex];
95 minFrameSize[i] = refMinFrameSize[refIndex];
96 granularity[i] = refGranularity[refIndex];
102 _subPbParams->setAttributeValue(
"X0", x0s);
103 _subPbParams->setAttributeValue(
"LOWER_BOUND", lb);
104 _subPbParams->setAttributeValue(
"UPPER_BOUND", ub);
105 _subPbParams->setAttributeValue(
"BB_INPUT_TYPE", bbInputType);
106 _subPbParams->setAttributeValue(
"INITIAL_MESH_SIZE", initialMeshSize);
107 _subPbParams->setAttributeValue(
"INITIAL_FRAME_SIZE", initialFrameSize);
108 _subPbParams->setAttributeValue(
"MIN_MESH_SIZE", minMeshSize);
109 _subPbParams->setAttributeValue(
"MIN_FRAME_SIZE", minFrameSize);
110 _subPbParams->setAttributeValue(
"GRANULARITY", granularity);
113 _subPbParams->checkAndComply();
std::vector< Point > ArrayOfPoint
Representation of a vector of points.
Subproblem of lesser dimension than the original problem.