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