AMPL运行报错x1 already defined的问题排查求助
AMPL变量重复定义报错解决方案
核心原因
- 同一会话重复加载模型:AMPL运行时会持久化存储所有已定义的变量、目标、约束对象,无自动清空逻辑。如果之前已经运行过一次当前模型定义了
x1,再次加载时就会触发重定义报错,这是该类报错的最高发诱因。 - 模型文件内重复定义:可排查完整
AMPLPrac.mod文件是否存在多处var x1声明,你公开的代码片段无重复定义,需确认完整文件内容。
修复方案
方案1:修改模型文件(推荐,一劳永逸)
在模型文件开头添加reset命令,每次运行自动清空之前的会话内容,修改后完整代码如下:
reset; var x1>=0; var x2>=0; maximize z: 2*x1 + 3*x2; subject to c1: 2*x1 + x2 <=4; c2: x1 + 2*x2 <=5; solve;
方案2:交互模式手动操作
如果在AMPL命令行交互模式运行,不需要修改模型文件,每次加载模型前先执行清空命令即可:
reset; model AMPLPrac.mod; solve;
方案3:排查文件重复声明
如果上述操作后仍报错,逐行扫描完整模型文件,删除多余的x1变量声明即可。
内容的提问来源于stack exchange,提问作者Daniel Rabinovitch
相关产品推荐
相关产品推荐

