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:算术错误:对无限值的算术运算)。
- 我试着用
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),但您的代码中可能还有其他浮点变量?
我有数组 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:算术错误:对无限值的算术运算)。
- 我试着用
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),但您的代码中可能还有其他浮点变量?