我正在使用eplex
和ic
库并尝试解决问题。我看到eplex
和ic
为addition,multiplication
和subtraction
提供了明确的支持,但没有为modulo
或division
提供支持。
更准确地说,我有以下代码:
FirstResult #= (Result[I] mod Val), % Here it gives error because Result[I] is not instantiated.
NewVal is Val+1,
SecondResult #= (Result[I] mod NewVal)
和mod
要求其两个自变量为基,但是Result[I]
未被实例化,而是具有值的范围。因此,我的问题是如何延迟涉及mod
操作的约束。
答案 0 :(得分:1)
您通常可以重新配制
R #= X mod Y
为
0 #=< R, R #=< Y-1, % R is between 0 and Y-1
X #= _*Y + R, % X is some multiple of Y, plus a remainder R
这假定您正在使用library(ic)
,并且对带有负参数的行为没有特殊要求。
对于使用MILP求解器的library(eplex)
,您可以执行几乎相同的操作(只要Y是一个整数参数),但是您必须更加明确地了解完整性:
0 $=< R, R $=< Y-1,
integers([K,R]),
X $= K*Y + R,