我可以使用 Alloy 来解决类似线性规划的问题吗?
Can I use Alloy to solve linear programming like problems?
我想找到一组数值方程的解,我想知道是否可以使用 Alloy。
我发现关于 alloy 的有限信息似乎表明(至少对我而言)可以做到,但我没有发现类似问题的例子。
这当然不容易,所以在投入时间和金钱之前,我想知道这是否可行。
简化示例:
(1) a + b = c, (2) a > b, (3) a > 0, (4) b > 0, (5) c > 0
一个解决方案是
a = 2, b = 1, c = 3
任何关于 Alloy 或更好的工具/解决方案的可用性的见解将不胜感激。
亲切的问候,
保罗.
Alloy 专门用作关系约束求解器。虽然它可以执行非常简单的线性规划,但您可能需要查看像 MiniZinc 这样的专用工具。
Daniel Jackson 不鼓励使用 Alloy 来解决数字问题。原因是 Alloy 使用 SAT 求解器,这不能很好地扩展,因为它严重限制了可用整数的范围。默认情况下 Alloy 使用 4 位整数:-8..7。 (这可以用 运行 命令放大,但当然会减慢找到答案的速度。)不使用数字的心态也影响了语法,没有很好的数字运算符。 IE。添加是 5.plus[6].
也就是说,您的问题看起来像:
pred f[a,b,c : Int] {
a.plus[b] = c
a > b
a > 0
b > 0
c > 0
}
run f for 4 int
答案可以在评估器或文本视图中找到。我得到的第一个答案是 a=4, b=1, c=5
.
Alloy 是在 2010 年左右开发的,从那时起,SMT 求解器的工作方式类似于 SAT 求解器,但也可以处理数值问题。 Alloy 可以使用我认为的那些求解器。会很好,因为这种语言非常好用,缺少数字是一个真正的问题。
更新 在 https://github.com/AlloyTools/models/blob/master/puzzle/einstein/einstein-wikipedia.als
添加了约束拼图
我想找到一组数值方程的解,我想知道是否可以使用 Alloy。
我发现关于 alloy 的有限信息似乎表明(至少对我而言)可以做到,但我没有发现类似问题的例子。
这当然不容易,所以在投入时间和金钱之前,我想知道这是否可行。
简化示例:
(1) a + b = c, (2) a > b, (3) a > 0, (4) b > 0, (5) c > 0
一个解决方案是
a = 2, b = 1, c = 3
任何关于 Alloy 或更好的工具/解决方案的可用性的见解将不胜感激。
亲切的问候,
保罗.
Alloy 专门用作关系约束求解器。虽然它可以执行非常简单的线性规划,但您可能需要查看像 MiniZinc 这样的专用工具。
Daniel Jackson 不鼓励使用 Alloy 来解决数字问题。原因是 Alloy 使用 SAT 求解器,这不能很好地扩展,因为它严重限制了可用整数的范围。默认情况下 Alloy 使用 4 位整数:-8..7。 (这可以用 运行 命令放大,但当然会减慢找到答案的速度。)不使用数字的心态也影响了语法,没有很好的数字运算符。 IE。添加是 5.plus[6].
也就是说,您的问题看起来像:
pred f[a,b,c : Int] {
a.plus[b] = c
a > b
a > 0
b > 0
c > 0
}
run f for 4 int
答案可以在评估器或文本视图中找到。我得到的第一个答案是 a=4, b=1, c=5
.
Alloy 是在 2010 年左右开发的,从那时起,SMT 求解器的工作方式类似于 SAT 求解器,但也可以处理数值问题。 Alloy 可以使用我认为的那些求解器。会很好,因为这种语言非常好用,缺少数字是一个真正的问题。
更新 在 https://github.com/AlloyTools/models/blob/master/puzzle/einstein/einstein-wikipedia.als
添加了约束拼图