问题描述
我有数组 array[1..num_compute_nodes,1..num_access_nodes,1..num_request] of var 0..1: assignment;
。我需要确保该数组中的值是 0、0.5 或 1,而不是 0 或 1。
1.我试图通过使用 set of float: domain_cn = { 0,0.5,1};
和 array[1..num_compute_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,req]) = 0)\/ ssignment[m,req]) = 0.5) ));
和float
而不是var 0..1
但它也不起作用(MiniZinc:扁平化错误)
解决方法
[这最初是作为评论,但作为答案移动了。]
一种方法是乘以一些常数,例如10(获得 0、5、10),但您的代码中可能还有其他浮点变量?
,正如@hakank 发布的那样,在我的示例中,乘以常数,乘以 10
是有效的!谢谢。我会在我的代码中显示它,但我不得不删除它。