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
This commit is contained in:
@@ -45,6 +45,7 @@ QPSolverInterface::ConstraintAdded(Constraint* constraint)
|
|||||||
data.minSlackConstraint = fLinearSpec->AddConstraint(1.,
|
data.minSlackConstraint = fLinearSpec->AddConstraint(1.,
|
||||||
data.slack->Var(), kEQ, 0., constraint->PenaltyNeg(),
|
data.slack->Var(), kEQ, 0., constraint->PenaltyNeg(),
|
||||||
constraint->PenaltyPos());
|
constraint->PenaltyPos());
|
||||||
|
data.constraint = constraint;
|
||||||
fInEqSlackConstraints.push_back(data);
|
fInEqSlackConstraints.push_back(data);
|
||||||
|
|
||||||
SummandList* leftSide = constraint->LeftSide();
|
SummandList* leftSide = constraint->LeftSide();
|
||||||
@@ -63,7 +64,7 @@ QPSolverInterface::ConstraintRemoved(Constraint* constraint)
|
|||||||
|
|
||||||
for (unsigned int i = 0; i < fInEqSlackConstraints.size(); i++) {
|
for (unsigned int i = 0; i < fInEqSlackConstraints.size(); i++) {
|
||||||
SoftInEqData& data = fInEqSlackConstraints[i];
|
SoftInEqData& data = fInEqSlackConstraints[i];
|
||||||
if (data.minSlackConstraint != constraint)
|
if (data.constraint != constraint)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
SummandList* leftSide = constraint->LeftSide();
|
SummandList* leftSide = constraint->LeftSide();
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
struct SoftInEqData {
|
struct SoftInEqData {
|
||||||
Summand* slack;
|
Summand* slack;
|
||||||
|
Constraint* constraint;
|
||||||
Constraint* minSlackConstraint;
|
Constraint* minSlackConstraint;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user