在AMPL中为Tupple索引集的便捷方法

问题描述

我正在处理完整图形上的离散数学优化问题。我的变量是弧,但是我想删除“花费太多”的弧。我有n个节点,这意味着我有n²弧。 我在AMPL上定义了以下设置

ARCS:={i in 1..n,j in 1..n : i!=j && d[i,j]<= R}

其中d [i,j]是弧上的成本(i,j),R是我要施加的极限。

我的问题是我现在不知道如何索引变量。我知道我会写

sum{ i in 1..n,j in 1..n : (i,j) in ARCS} blablabla[i,j]

但是我认为这是一种乏味的工作方式。 我以为我可以这样写 sum{e in ARCS} blablabla[e[0],e[1]]

谢谢

解决方法

我不确定AMPL是否支持您按照上面的方式通过位置编号引用三元元素。 (我怀疑不是,因为我不记得AMPL曾经对零索引和一索引建立立场,为了以这种方式引用它们,必须这样做。)

相反,您可以执行以下操作:

from datetime import datetime

startDate,endDate = "0131","1231"

startDate,endDate = (datetime.strptime(startDate,"%m%d").replace(year=2020),datetime.strptime(endDate,"%m%d").replace(year=2020))

deltaDays = (endDate-startDate).days
# 335

更简洁的是,对于ARCS成员仅占可能的(i,j)组合的一小部分的情况,这也可能更有效,因为它避免了生成和测试非'元组的需要。 t在ARCS中。