Minizinc - 可变值等于 0、0.5 或 1

Minizinc - variable value equal 0, 0.5 or 1

我有数组 array[1..num_compute_nodes,1..num_access_nodes,1..num_request] of var 0..1: assignment;。我需要确保此数组中的值为 0、0.5 或 1,而不是 0 或 1.

1.I 试图通过使用 set of float: domain_cn = { 0, 0.5, 1};array[1..num_compute_nodes,1..num_access_nodes,1..num_request] of domain_cn: assignment; 来改变它,但这不起作用(MiniZinc:算术错误:对无限值的算术运算)。

  1. 我试着用 constraint forall(m in 1..num_compute_nodes)(forall(req in 1..num_request )((assignment[m,request_loc[req],req]) = 1 \/(assignment[m,request_loc[req],req]) = 0)\/ ssignment[m,request_loc[req],req]) = 0.5) ));float 代替 var 0..1 但它也不起作用(MiniZinc:展平错误)

还有其他方法可以解决我的问题吗?

编辑: 完整代码: EDIT2:删除代码

正如@hakank 发布的那样,在我的示例中乘以 10 常量,有效!谢谢。我会在我的代码中显示它,但我不得不删除它。

[这最初是作为评论,但作为答案移动。]

一种方法是乘以一些常数,例如10(得到 0、5、10),但您的代码中可能还有其他浮点变量?