From 1245d875a3c8b8119b4f591dfe4168c414ebc96c Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Thu, 14 Jul 2011 07:13:35 +0000 Subject: [PATCH] Search for the correct constraint when removing an inequality constraint. This finally deletes the slack variable and the helper constraint. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42422 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/libs/linprog/QPSolverInterface.cpp | 3 ++- src/libs/linprog/QPSolverInterface.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/linprog/QPSolverInterface.cpp b/src/libs/linprog/QPSolverInterface.cpp index a9f7bf7db5..74cd8e5973 100644 --- a/src/libs/linprog/QPSolverInterface.cpp +++ b/src/libs/linprog/QPSolverInterface.cpp @@ -45,6 +45,7 @@ QPSolverInterface::ConstraintAdded(Constraint* constraint) data.minSlackConstraint = fLinearSpec->AddConstraint(1., data.slack->Var(), kEQ, 0., constraint->PenaltyNeg(), constraint->PenaltyPos()); + data.constraint = constraint; fInEqSlackConstraints.push_back(data); SummandList* leftSide = constraint->LeftSide(); @@ -63,7 +64,7 @@ QPSolverInterface::ConstraintRemoved(Constraint* constraint) for (unsigned int i = 0; i < fInEqSlackConstraints.size(); i++) { SoftInEqData& data = fInEqSlackConstraints[i]; - if (data.minSlackConstraint != constraint) + if (data.constraint != constraint) continue; SummandList* leftSide = constraint->LeftSide(); diff --git a/src/libs/linprog/QPSolverInterface.h b/src/libs/linprog/QPSolverInterface.h index e7233bfe2a..7713a26291 100644 --- a/src/libs/linprog/QPSolverInterface.h +++ b/src/libs/linprog/QPSolverInterface.h @@ -27,6 +27,7 @@ public: private: struct SoftInEqData { Summand* slack; + Constraint* constraint; Constraint* minSlackConstraint; };