diff --git a/src/main/java/org/klomp/cassowary/ClEditInfo.java b/src/main/java/org/klomp/cassowary/ClEditInfo.java index e805e44..d6338f8 100644 --- a/src/main/java/org/klomp/cassowary/ClEditInfo.java +++ b/src/main/java/org/klomp/cassowary/ClEditInfo.java @@ -22,7 +22,7 @@ * smalltalk version of the code. */ class ClEditInfo { - public ClEditInfo(ClConstraint cn_, ClSlackVariable eplus_, ClSlackVariable eminus_, double prevEditConstant_, int i_) { + public ClEditInfo(ClConstraint cn_, ClAbstractVariable eplus_, ClAbstractVariable eminus_, double prevEditConstant_, int i_) { cn = cn_; clvEditPlus = eplus_; clvEditMinus = eminus_; @@ -38,11 +38,11 @@ public ClConstraint Constraint() { return cn; } - public ClSlackVariable ClvEditPlus() { + public ClAbstractVariable ClvEditPlus() { return clvEditPlus; } - public ClSlackVariable ClvEditMinus() { + public ClAbstractVariable ClvEditMinus() { return clvEditMinus; } @@ -55,8 +55,8 @@ public void SetPrevEditConstant(double prevEditConstant_) { } private ClConstraint cn; - private ClSlackVariable clvEditPlus; - private ClSlackVariable clvEditMinus; + private ClAbstractVariable clvEditPlus; + private ClAbstractVariable clvEditMinus; private double prevEditConstant; private int i; diff --git a/src/main/java/org/klomp/cassowary/ClSimplexSolver.java b/src/main/java/org/klomp/cassowary/ClSimplexSolver.java index ac97435..1671e2a 100644 --- a/src/main/java/org/klomp/cassowary/ClSimplexSolver.java +++ b/src/main/java/org/klomp/cassowary/ClSimplexSolver.java @@ -124,7 +124,7 @@ public final ClSimplexSolver addConstraint(ClConstraint cn) throws RequiredConst if (fTraceOn) fnenterprint("addConstraint: " + cn); - List eplus_eminus = new ArrayList(2); + List eplus_eminus = new ArrayList(2); ClDouble prevEConstant = new ClDouble(); ClLinearExpression expr = newExpression(cn, eplus_eminus, prevEConstant); boolean fAddedOkDirectly = false; @@ -150,8 +150,8 @@ public final ClSimplexSolver addConstraint(ClConstraint cn) throws RequiredConst if (cn.isEditConstraint()) { int i = _editVarMap.size(); ClEditConstraint cnEdit = (ClEditConstraint) cn; - ClSlackVariable clvEplus = eplus_eminus.get(0); - ClSlackVariable clvEminus = eplus_eminus.get(1); + ClAbstractVariable clvEplus = eplus_eminus.get(0); + ClAbstractVariable clvEminus = eplus_eminus.get(1); _editVarMap.put(cnEdit.variable(), new ClEditInfo(cnEdit, clvEplus, clvEminus, prevEConstant.doubleValue(), i)); } @@ -456,7 +456,7 @@ private final ClSimplexSolver removeConstraintInternal(ClConstraint cn, ClAbstra ClEditConstraint cnEdit = (ClEditConstraint) cn; ClVariable clv = cnEdit.variable(); ClEditInfo cei = _editVarMap.get(clv); - ClSlackVariable clvEditMinus = cei.ClvEditMinus(); + ClAbstractVariable clvEditMinus = cei.ClvEditMinus(); // ClSlackVariable clvEditPlus = cei.ClvEditPlus(); // the clvEditPlus is a marker variable that is removed elsewhere removeColumn(clvEditMinus); @@ -534,8 +534,8 @@ public final ClSimplexSolver suggestValue(ClVariable v, double x) throws CLExcep System.err.println("suggestValue for variable " + v + ", but var is not an edit variable\n"); throw new CLException(); } - ClSlackVariable clvEditPlus = cei.ClvEditPlus(); - ClSlackVariable clvEditMinus = cei.ClvEditMinus(); + ClAbstractVariable clvEditPlus = cei.ClvEditPlus(); + ClAbstractVariable clvEditMinus = cei.ClvEditMinus(); double delta = x - cei.PrevEditConstant(); cei.SetPrevEditConstant(x); deltaEditConstant(delta, clvEditPlus, clvEditMinus); @@ -902,7 +902,7 @@ protected final void dualOptimize() throws CLInternalError { // Normalize if necessary so that the constant is non-negative. If // the constraint is non-required give its error variables an // appropriate weight in the objective function. - protected final ClLinearExpression newExpression(ClConstraint cn, List eplus_eminus, ClDouble prevEConstant) { + protected final ClLinearExpression newExpression(ClConstraint cn, List eplus_eminus, ClDouble prevEConstant) { if (fTraceOn) fnenterprint("newExpression: " + cn); if (fTraceOn) @@ -917,6 +917,7 @@ protected final ClLinearExpression newExpression(ClConstraint cn, List cnTerms = cnExpr.terms(); + for (Map.Entry entry : cnTerms.entrySet()) { final ClAbstractVariable v = entry.getKey(); double c = entry.getValue().doubleValue(); @@ -947,6 +948,11 @@ protected final ClLinearExpression newExpression(ClConstraint cn, List