如何在 minizinc 程序的输出中编写条件表达式?
How can I write conditional expression in output of a minizinc program?
我有以下代码:
output["\(w) \(l)\n\(n)\n"] ++ [if rotation[i] then "\(x[i]) \(y[i]) \(p_x[i]) \(p_y[i]) R\n" else "\(x[i]) \(y[i]) \(p_x[i]) \(p_y[i])\n" endif |i in CIRCUITS];
我的目的是打印每一行和值“R”是否 rotation[i] 为真,否则为假。
例如:
w l
n
x[1] y[1] p_x[1] p_y[1] "R"
x[2] y[2] p_x[2] p_y[2]
在此示例中,旋转[1]为真,旋转[2]为假
您的示例 MiniZinc 代码就快完成了。如果使用内置函数“fix”强制“旋转”变量获取其“解决方案值”,则必须进行重要更改。
output ["\(w) \(l)\n\(n)\n"]
++ ["\(x[i]) \(y[i]) \(p_x[i]) \(p_y[i])"
++ if fix(rotation[i]) then " R" else "" endif
++ "\n"
| i in index_set(rotation)];
此外,我建议尝试使条件部分尽可能小以提高可读性,如上述代码片段中所包含的那样。
我有以下代码:
output["\(w) \(l)\n\(n)\n"] ++ [if rotation[i] then "\(x[i]) \(y[i]) \(p_x[i]) \(p_y[i]) R\n" else "\(x[i]) \(y[i]) \(p_x[i]) \(p_y[i])\n" endif |i in CIRCUITS];
我的目的是打印每一行和值“R”是否 rotation[i] 为真,否则为假。 例如:
w l
n
x[1] y[1] p_x[1] p_y[1] "R"
x[2] y[2] p_x[2] p_y[2]
在此示例中,旋转[1]为真,旋转[2]为假
您的示例 MiniZinc 代码就快完成了。如果使用内置函数“fix”强制“旋转”变量获取其“解决方案值”,则必须进行重要更改。
output ["\(w) \(l)\n\(n)\n"]
++ ["\(x[i]) \(y[i]) \(p_x[i]) \(p_y[i])"
++ if fix(rotation[i]) then " R" else "" endif
++ "\n"
| i in index_set(rotation)];
此外,我建议尝试使条件部分尽可能小以提高可读性,如上述代码片段中所包含的那样。