MCPcopy Create free account
hub / github.com/ERGO-Code/HiGHS / buildFrom

Method buildFrom

highs/mip/HighsCliqueTable.cpp:2206–2242  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2204}
2205
2206void HighsCliqueTable::buildFrom(const HighsLp* origModel,
2207 const HighsCliqueTable& init) {
2208 assert(init.colsubstituted.size() == colsubstituted.size());
2209 HighsInt ncols = init.colsubstituted.size();
2210 HighsCliqueTable newCliqueTable(ncols);
2211 newCliqueTable.setPresolveFlag(inPresolve);
2212 newCliqueTable.setMinEntriesForParallelism(minEntriesForParallelism);
2213 HighsInt ncliques = init.cliques.size();
2214 std::vector<CliqueVar> clqBuffer;
2215 clqBuffer.reserve(2 * static_cast<size_t>(origModel->num_col_));
2216 for (HighsInt i = 0; i != ncliques; ++i) {
2217 if (init.cliques[i].start == -1) continue;
2218 if (init.cliques[i].numActive() <= 1) continue;
2219
2220 clqBuffer.assign(init.cliqueentries.begin() + init.cliques[i].start,
2221 init.cliqueentries.begin() + init.cliques[i].end);
2222 clqBuffer.erase(std::remove_if(clqBuffer.begin(), clqBuffer.end(),
2223 [origModel](CliqueVar v) {
2224 return origModel->col_lower_[v.col] !=
2225 0.0 ||
2226 origModel->col_upper_[v.col] != 1.0;
2227 }),
2228 clqBuffer.end());
2229 if (clqBuffer.size() <= 1) continue;
2230
2231 HighsInt origin = init.cliques[i].origin != kHighsIInf ? -1 : kHighsIInf;
2232 newCliqueTable.doAddClique(clqBuffer.data(),
2233 static_cast<HighsInt>(clqBuffer.size()), false,
2234 origin);
2235 }
2236
2237 newCliqueTable.colsubstituted = init.colsubstituted;
2238 newCliqueTable.substitutions = init.substitutions;
2239 // Currently assume buildFrom is always used for sub-mips
2240 newCliqueTable.setAllowParallel(false);
2241 *this = std::move(newCliqueTable);
2242}

Callers 1

initMethod · 0.45

Calls 11

setPresolveFlagMethod · 0.80
reserveMethod · 0.80
numActiveMethod · 0.80
doAddCliqueMethod · 0.80
dataMethod · 0.80
setAllowParallelMethod · 0.80
sizeMethod · 0.45
beginMethod · 0.45
eraseMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected