예제 #1
0
        public Constraint AddBoolXor(IEnumerable <ILiteral> literals)
        {
            Constraint        ct            = new Constraint(model_);
            BoolArgumentProto bool_argument = new BoolArgumentProto();

            foreach (ILiteral lit in literals)
            {
                bool_argument.Literals.Add(lit.GetIndex());
            }
            ct.Proto.BoolXor = bool_argument;
            return(ct);
        }
예제 #2
0
        /**
         * <summary>
         * Adds <c>a ⇒ b</c>.
         * </summary>
         */
        public Constraint AddImplication(ILiteral a, ILiteral b)
        {
            BoolArgumentProto or = new BoolArgumentProto();

            or.Literals.Capacity = 2;
            or.Literals.Add(a.Not().GetIndex());
            or.Literals.Add(b.GetIndex());

            Constraint ct = new Constraint(model_);

            ct.Proto.BoolOr = or;
            return(ct);
        }
예제 #3
0
        /**
         * <summary>
         * Adds <c>And(literals) == true</c>.
         * </summary>
         */
        public Constraint AddBoolAnd(IEnumerable <ILiteral> literals)
        {
            BoolArgumentProto bool_argument = new BoolArgumentProto();

            bool_argument.Literals.TrySetCapacity(literals);
            foreach (ILiteral lit in literals)
            {
                bool_argument.Literals.Add(lit.GetIndex());
            }

            Constraint ct = new Constraint(model_);

            ct.Proto.BoolAnd = bool_argument;
            return(ct);
        }