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); } }
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); } }