コード例 #1
0
 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);
     }
 }
コード例 #2
0
 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();
 }
コード例 #3
0
        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();
            }
        }