Copy on write for fixed variables.

This commit is contained in:
chriseth 2022-03-24 01:45:46 +01:00
parent e4ad6ef39f
commit 0b6e16983a
2 changed files with 4 additions and 4 deletions

View File

@ -815,7 +815,7 @@ LPResult LPSolver::setState(SolvingState _state)
// We do not need to store reasons because at this point, we do not have any reasons yet.
// We can add this and just need to store the reasons together with the variables.
m_fixedVariables = std::get<decltype(m_fixedVariables)>(modelOrReasonSet);
m_fixedVariables = make_shared<std::map<size_t, rational>>(std::get<std::map<size_t, rational>>(modelOrReasonSet));
//cout << "Splitting..." << endl;
ProblemSplitter splitter(*m_state);
@ -848,11 +848,11 @@ void LPSolver::addConstraint(Constraint _constraint)
for (auto const& [index, entry]: _constraint.data.enumerateTail())
if (entry)
{
if (m_fixedVariables.count(index))
if (m_fixedVariables->count(index))
{
// This can directly lead to a conflict. We will check it later during the
// simplify run on the split problems.
_constraint.data[0] -= _constraint.data[index] * m_fixedVariables.at(index);
_constraint.data[0] -= _constraint.data[index] * m_fixedVariables->at(index);
_constraint.data[index] = {};
}
else if (m_subProblemsPerVariable[index] != static_cast<size_t>(-1))

View File

@ -284,7 +284,7 @@ private:
SolvingState stateFromSubProblem(size_t _index) const;
ReasonSet reasonSetForSubProblem(SubProblem const& _subProblem);
std::map<size_t, rational> m_fixedVariables;
std::shared_ptr<std::map<size_t, rational>> m_fixedVariables;
/// These use "copy on write".
std::vector<std::shared_ptr<SubProblem>> m_subProblems;
std::vector<size_t> m_subProblemsPerVariable;