AMPL中set path_intersections重复成员错误的修复方法咨询
修复AMPL中集合
path_intersections的重复成员错误 问题原因
你当前在.mod文件中声明的set path_intersections;是单元素集合,AMPL会将.dat文件每行里的两个数字拆分成两个独立的单元素存入集合。比如第一行的1439 5会被解析为成员1439和5,当后续行再次出现1439时,就会触发“重复成员”的错误——这和你实际想存储「路径-交叉口」二元组的需求不匹配。
修复方案
需要将path_intersections声明为二元集合,让AMPL识别每行的两个数字是一个整体的二元组成员,具体有两种实现方式:
方式1:基于基础集合的笛卡尔积子集
如果你的模型中需要单独管理路径和交叉口的全集,可以先声明两个基础集合,再定义它们的笛卡尔积子集:
# 先声明基础集合 set PATHS; set INTERSECTIONS; # 定义路径-交叉口的关联集合,为两个基础集合的笛卡尔积子集 set path_intersections within PATHS cross INTERSECTIONS;
方式2:直接声明二维集合
如果不需要单独的基础集合,可直接指定集合的维度为2:
set path_intersections dimen 2;
验证
修改.mod文件的集合声明后,原.dat文件的内容无需改动,AMPL会正确将每行的两个数字识别为一个二元组成员,不会再触发重复成员错误。
内容的提问来源于stack exchange,提问作者Ares
相关产品推荐
相关产品推荐

