Minizinc - 变量值等于 0、0.5 或 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.我试图通过使用 set of float: domain_cn = { 0,0.5,1};array[1..num_compute_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,req]) = 0)\/ ssignment[m,req]) = 0.5) ));float 而不是 var 0..1 但它也不起作用(MiniZinc:扁平化错误

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

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

解决方法

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

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

,

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