如何在JSON中定义空集以传入MiniZinc的集合数组?
MiniZinc中用JSON输入集合类型数组的正确方式
你在mzn文件里定义了如下数组:
array[1..14] of set of 1..100 : stationCalendarOffPeriod ;
之前尝试的两种JSON写法都不符合MiniZinc的JSON输入规范,错误原因和解法如下:
错误原因分析
- 用
{}表示集合:MiniZinc无法识别普通空对象为集合,必须明确标记类型; - 用
[]表示集合:JSON数组会被MiniZinc解析为数组类型,但你的数组元素要求是集合,所以类型不匹配。
正确写法
MiniZinc的JSON输入中,集合类型需要用包含"set"键的对象来表示,键对应的值是集合元素组成的数组:
- 空集合写为
{"set": []}; - 非空集合比如包含元素1、5、10,写为
{"set": [1,5,10]}。
对应你定义的14元素数组,正确的JSON示例(全为空集合)如下:
{"stationCalendarOffPeriod": [ {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []} ]}
如果需要给部分集合赋值,比如第一个集合包含3和7,第三个集合包含20,只需修改对应位置的对象即可:
{"stationCalendarOffPeriod": [ {"set": [3,7]}, {"set": []}, {"set": [20]}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []}, {"set": []} ]}
内容的提问来源于stack exchange,提问作者qin cubism
相关产品推荐
相关产品推荐

