You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MiniZinc中String转Enum类型转换及JSON数据传入问题咨询

MiniZinc JSON输入:字符串转枚举类型及数据传递解决方案

错误原因

出现MiniZinc: type error: cannot determine coercion from type string to type tasks的核心问题:

  • Record类型的字段名与JSON中的键不匹配,且字段类型声明逻辑错误
  • 开放枚举与record数据的映射关系未对齐

修正后的MiniZinc代码

enum tasks;

// 无需手动传入,MiniZinc会从taskDataList的长度自动推导
int : recordNumberOfTaskData = length(taskDataList);

// 修正字段定义:字段名task对应JSON的key,类型为tasks枚举
type taskDataType = record(int: id, task: tasks, int: data);

array[1..recordNumberOfTaskData] of taskDataType : taskDataList;
 
solve satisfy;

output
["tasks=" ++ show(tasks)++"\n"]
++
["taskData=" ++ show(taskDataList)++"\n"]

正确的JSON输入文件

保持原结构即可,MiniZinc会自动将tasks数组初始化枚举类型,并将taskDataList中的字符串转换为枚举值:

{
  "tasks": ["a1", "a2"],
  "taskDataList": [
    {"id": 1, "task": "a1", "data": 1},
    {"id": 2, "task": "a2", "data": 2}
  ]
}

关键说明

  1. 字段匹配:Record的字段名必须与JSON中的键完全一致(如task对应JSON的"task"),字段类型需指定为枚举类型tasks。
  2. 开放枚举初始化:enum tasks;是开放枚举,JSON中的tasks数组会自动填充枚举值,无需在模型中硬编码。
  3. 自动类型转换:只要JSON中的字符串与枚举值完全匹配,MiniZinc会自动完成字符串到枚举类型的转换,无需手动编写转换逻辑。

内容的提问来源于stack exchange,提问作者qin cubism

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:05:24