如何修复Minizinc模型数据文件中数组型集合变量的部分取值?
MiniZinc固定变量数组部分取值的正确方式
错误原因
你用b2p[b0] = {p1};的写法不符合MiniZinc的语法规则:
- 变量的取值约束不能用单等号
=直接赋值,必须通过constraint关键字声明 - MiniZinc里的相等比较要用双等号
==
正确解法
在模型的约束区域添加对应的约束语句,把固定b2p[b0]取值的逻辑写进去:
enum pieces; enum beams; array[beams] of var set of pieces: b2p; % 新增约束:固定b0对应的集合为{p1} constraint b2p[b0] == {p1}; % 你的其他原有约束 (constraints)
额外说明
如果是要导入外部求解得到的部分解来固定变量,也可以使用fix函数明确指定要固定的变量:
constraint fix(b2p[b0]) == {p1};
这个写法和上面的约束效果完全一致,只是更强调“固定变量取值”的意图。
内容的提问来源于stack exchange,提问作者Emilie Picard-Cantin
相关产品推荐
相关产品推荐

