Exemplo n.º 1
0
        public static LinearExpr RebuildLinearExprFromLinearExpressionProto(LinearExpressionProto proto,
                                                                            CpModelProto model)
        {
            int  numElements = proto.Vars.Count;
            long offset      = proto.Offset;

            if (numElements == 0)
            {
                return(LinearExpr.Constant(offset));
            }
            else
            if (numElements == 1)
            {
                IntVar var   = new IntVar(model, proto.Vars[0]);
                long   coeff = proto.Coeffs[0];
                return(LinearExpr.Affine(var, coeff, offset));
            }
            else
            {
                LinearExpr[] exprs = new LinearExpr[numElements];
                for (int i = 0; i < numElements; ++i)
                {
                    IntVar var   = new IntVar(model, proto.Vars[i]);
                    long   coeff = proto.Coeffs[i];
                    exprs[i] = Prod(var, coeff);
                }
                SumArray sum = new SumArray(exprs);
                sum.Offset = sum.Offset + offset;
                return(sum);
            }
        }
Exemplo n.º 2
0
        internal static LinearExpr RebuildLinearExprFromLinearExpressionProto(LinearExpressionProto proto,
                                                                              CpModelProto model)
        {
            int  numElements = proto.Vars.Count;
            long offset      = proto.Offset;

            if (numElements == 0)
            {
                return(LinearExpr.Constant(offset));
            }
            else if (numElements == 1)
            {
                IntVar var   = new IntVar(model, proto.Vars[0]);
                long   coeff = proto.Coeffs[0];
                return(LinearExpr.Affine(var, coeff, offset));
            }
            else
            {
                LinearExprBuilder builder = LinearExpr.NewBuilder(numElements);
                for (int i = 0; i < numElements; ++i)
                {
                    builder.AddTerm(new IntVar(model, proto.Vars[i]), proto.Coeffs[i]);
                }
                builder.Add(offset);
                return(builder);
            }
        }
Exemplo n.º 3
0
 internal LinearExpr GetLinearExpr <X>(X x)
 {
     if (typeof(X) == typeof(IntVar))
     {
         return((IntVar)(Object)x);
     }
     if (typeof(X) == typeof(long) || typeof(X) == typeof(int) || typeof(X) == typeof(short))
     {
         return(LinearExpr.Constant(Convert.ToInt64(x)));
     }
     if (typeof(X) == typeof(LinearExpr))
     {
         return((LinearExpr)(Object)x);
     }
     throw new ArgumentException("Cannot convert argument to LinearExpr");
 }