示例#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);
            }
        }
示例#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);
            }
        }