/** <summary> Creates <c>literal * coeff</c>.</summary> */ public static LinearExpr Term(ILiteral literal, long coeff) { if (literal is BoolVar boolVar) { return(Prod(boolVar, coeff)); } else { return(Affine(literal.NotAsExpr(), -coeff, coeff)); } }
/** <summary> Adds <c>literal * coefficient</c> to the builder.</summary> */ public LinearExprBuilder AddTerm(ILiteral literal, long coefficient) { if (literal is BoolVar boolVar) { terms_.Add(new Term(boolVar, coefficient)); } else { offset_ += coefficient; terms_.Add(new Term(literal.NotAsExpr(), -coefficient)); } return(this); }
public void LinearExprNotBoolVarOperatorTest() { Console.WriteLine("LinearExprBoolVarNotOperatorTest"); CpModel model = new CpModel(); ILiteral v = model.NewBoolVar("v"); LinearExpr e = v.NotAsExpr() * 2; Console.WriteLine(e); e = 2 * v.NotAsExpr(); Console.WriteLine(e); e = v.NotAsExpr() + 2; Console.WriteLine(e); e = 2 + v.NotAsExpr(); Console.WriteLine(e); e = v.NotAsExpr(); Console.WriteLine(e); e = -v.NotAsExpr(); Console.WriteLine(e); e = 1 - v.NotAsExpr(); Console.WriteLine(e); e = v.NotAsExpr() - 1; Console.WriteLine(e); }