导入患者日程仿真时,基于类型设置服务时间报错求助
解决方案
1. 修复核心语法错误(当前报错的直接原因)
你写的代码里A、B被识别为未定义的变量,所以才会报无法解析的错误,根据数据库中patType的实际存储类型修改即可:
- 如果数据库中
patType存储的是"A"、"B"这类字符串:
给A、B加上双引号,修正后的延迟代码:(agent.patType == "A" ? 59.5+46*beta(0.331,1.44) : (agent.patType == "B" ? poisson(42.1) : triangular(9.5, 20, 29.5))) - 如果
patType是你在仿真工具中定义的枚举类型(比如自定义了PatType枚举,包含A、B选项):
要使用枚举的完整引用,示例如下:(agent.patType == PatType.A ? 59.5+46*beta(0.331,1.44) : (agent.patType == PatType.B ? poisson(42.1) : triangular(9.5, 20, 29.5)))
2. 验证患者类型参数的映射正确性
- 检查数据库导入环节,确认
patType字段已正确映射到agent的patType参数,数据类型必须匹配(比如数据库文本类型对应仿真中的字符串类型,枚举类型对应仿真中的枚举) - 添加调试输出(比如打印每个患者的
patType值),确认取值是预期的"A"/"B"或枚举值,避免出现空值或不匹配的异常取值
3. 备选方案:用查表方式替代硬编码判断
如果不想在代码里写死类型逻辑,可以利用你导入的服务时长-患者类型表:
- 确保表中
patType的取值与患者的类型完全一致 - 在服务模块中,根据当前患者的
patType从表中匹配对应的分布参数,再生成延迟时间。示例代码(以常见仿真工具语法为例):// 假设serviceTimeTable是导入的表,包含patType、distribution、相关参数列 ServiceTimeRow matchRow = findFirst(serviceTimeTable, row -> row.patType == agent.patType); if(matchRow != null) { switch(matchRow.distribution) { case "beta": return matchRow.base + matchRow.scale*beta(matchRow.alpha, matchRow.beta); case "poisson": return poisson(matchRow.mean); default: return triangular(9.5, 20, 29.5); } } else { return triangular(9.5, 20, 29.5); // 处理未匹配到类型的默认情况 }
内容的提问来源于stack exchange,提问作者Simran
相关产品推荐
相关产品推荐

