static void CollectVariables(Request.Expr e, Dictionary <string, Variable> vars, GLS.Solver solver) { if (e.variable != null && !vars.ContainsKey(e.variable)) { vars[e.variable] = solver.MakeNumVar(0.0, double.PositiveInfinity, e.variable); } if (e.left != null) { CollectVariables(e.left, vars, solver); } if (e.right != null) { CollectVariables(e.right, vars, solver); } }
static LinearExpr ToLinearExpr(Request.Expr e, Dictionary <string, Variable> vars) { if (e.variable != null) { return(vars[e.variable]); } if (e.value != null) { return(vars[identityConstant] * e.value.Value); } if (e.op != null) { return(ToLinearExpr(ToLinearExpr(e.left, vars), ToLinearExpr(e.right, vars), e.op)); } throw new ArgumentException(); }
static LinearConstraint ToLinearConstraint(Request.Expr e, Dictionary <string, Variable> vars) { if (e.op == null) { throw new ArgumentException(); } var l = ToLinearExpr(e.left, vars); var r = ToLinearExpr(e.right, vars); switch (e.op) { case "get": return(l >= r); case "let": return(l <= r); case "eq": return(l == r); default: throw new ArgumentException(); } }