AMPL中如何编写矩阵相邻元素后位不小于前位的约束
语法错误核心原因
- 你写的
PROD-1属于非法的集合索引表达式,AMPL不支持直接对集合做减法来获取去掉最后一位的子集 - 约束的多维度索引需要放在同一个大括号内,用逗号分隔,不允许在冒号后单独再加索引大括号
修正方案
分两种常见场景选择对应写法即可:
场景1:PROD是从1开始的连续整数集合(最常见的定义方式)
直接使用card(PROD)获取PROD的元素总数,遍历1到总数-1即可:
subject to prioridade{i in SEM, j in 1..card(PROD)-1}: d[i,j] <= d[i,j+1];
场景2:PROD是任意有序非连续集合
用AMPL内置的集合操作函数保证兼容性:
# ord(j, PROD) 获取j在PROD集合中的顺序位置 # next(j, PROD) 获取PROD集合中j的下一个元素 subject to prioridade{i in SEM, j in PROD: ord(j, PROD) < card(PROD)}: d[i,j] <= d[i, next(j, PROD)];
内容的提问来源于stack exchange,提问作者MATHEUS HENRIQUE NASCIMENTO DA
相关产品推荐
相关产品推荐

