55 std::vector<std::string> _colNames;
59 raw_standard_lp_data _data;
60 static size_t appendCNT;
65 initialise_int_values_with_zeros();
66 initialise_int_vectors();
67 initialise_char_vectors();
68 initialise_dbl_vectors();
79 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS] = ncols;
80 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NROWS] = nrows;
81 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NELES] = nelems;
85 std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MSTART].clear();
86 std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MSTART].resize(nrows + 1);
88 std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MINDEX].clear();
89 std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MINDEX].resize(nelems);
91 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::COLTYPE].clear();
92 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::COLTYPE].resize(ncols);
94 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::ROWTYPE].clear();
95 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::ROWTYPE].resize(nrows);
97 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::MVALUE].clear();
98 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::MVALUE].resize(nelems);
100 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::RHS].clear();
101 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::RHS].resize(nrows);
104 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::RANGE].clear();
105 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::RANGE].resize(nrows);
107 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::OBJ].clear();
108 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::OBJ].resize(ncols);
110 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::LB].clear();
111 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::LB].resize(ncols);
113 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::UB].clear();
114 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::UB].resize(ncols);
116 solver_getrows(solver_p,
117 std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MSTART],
118 std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MINDEX],
119 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::MVALUE],
121 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NROWS] - 1);
123 solver_getrowtype(solver_p,
124 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::ROWTYPE],
126 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NROWS] - 1);
128 solver_getrhs(solver_p,
129 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::RHS],
131 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NROWS] - 1);
133 solver_getcolinfo(solver_p,
134 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::COLTYPE],
135 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::LB],
136 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::UB],
138 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS] - 1);
140 solver_get_obj_func_coeffs(solver_p,
141 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::OBJ],
143 std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS] - 1);
145 assert(std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MSTART].size()
146 == 1 + std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NROWS]);
148 assert(std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::COLTYPE].size()
149 == std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS]);
150 assert(std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::ROWTYPE].size()
151 == std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NROWS]);
153 assert(std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::MVALUE].size()
154 == std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NELES]);
155 assert(std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::RHS].size()
156 == std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NROWS]);
158 assert(std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::OBJ].size()
159 == std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS]);
160 assert(std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::LB].size()
161 == std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS]);
162 assert(std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::UB].size()
163 == std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS]);
166 int append_in(
SolverAbstract::Ptr containingSolver_p,
const std::string& prefix_p =
"")
const
169 IntVector newmindex(std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MINDEX]);
170 int nbExistingCols(containingSolver_p->get_ncols());
171 for (
auto& i: newmindex)
177 std::string prefix_l = (prefix_p !=
"") ? prefix_p : (
"prob" + std::to_string(appendCNT));
178 std::vector<std::string> newNames;
179 newNames.resize(_colNames.size());
180 std::transform(_colNames.begin(),
183 [&prefix_l](std::string varName_p) -> std::string
184 { return prefix_l + varName_p; });
186 std::vector<int> mstart(std::get<Attribute::INT_VALUE>(_data)[IntAttribute::NCOLS], 0);
187 solver_addcols(*containingSolver_p,
188 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::OBJ],
192 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::LB],
193 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::UB],
194 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::COLTYPE],
197 solver_addrows(*containingSolver_p,
198 std::get<Attribute::CHAR_VECTOR>(_data)[CharVectorAttribute::ROWTYPE],
199 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::RHS],
201 std::get<Attribute::INT_VECTOR>(_data)[IntVectorAttribute::MSTART],
203 std::get<Attribute::DBL_VECTOR>(_data)[DblVectorAttribute::MVALUE]);
207 return nbExistingCols;
211 void initialise_int_values_with_zeros()
213 std::get<Attribute::INT_VALUE>(_data).assign(IntAttribute::MAX_INT_ATTRIBUTE, 0);
216 void initialise_int_vectors()
218 std::get<Attribute::INT_VECTOR>(_data).assign(IntVectorAttribute::MAX_INT_VECTOR_ATTRIBUTE,
222 void initialise_char_vectors()
224 std::get<Attribute::CHAR_VECTOR>(_data)
225 .assign(CharVectorAttribute::MAX_CHAR_VECTOR_ATTRIBUTE, CharVector());
228 void initialise_dbl_vectors()
230 std::get<Attribute::DBL_VECTOR>(_data).assign(DblVectorAttribute::MAX_DBL_VECTOR_ATTRIBUTE,