【问题标题】:AMPL: A big set within the set and specification of dataAMPL:数据集和规范中的一个大集
【发布时间】:2014-10-03 06:57:46
【问题描述】:

我现在正在做一个模型,我需要进行相当大的调整。基本上我需要扩展我当前的集合 V,它是一组城市,成为一组城市和时间。例如,V 中的元素 Kir 必须从简单的 "Kir" 扩展到 "Kir1"、"Kir2"、...、"Kir72" 以表示城市 Kir 以及由数字指定的时间范围。

我已经开始将其定义为(在 .mod 文件中): 设置V; 在V内设置K;

在 .dat 文件中,我很不确定如何写这个。如果没有简单的方法在集合 K 中包含“字符串”Kir,我猜我会写:

set V := 1 2 3 4 5;
set K := 1 2;

例如。我的问题是我该怎么做?我可以包括城市名称 Kir 吗?具体来说,我已经定义了原始 V 集中城市之间距离的数据透视表。例如,城市 Kir 和 Sto 之间的原始集合 V 中的距离必须与扩展集合中 Kir1 和 Sto1 之间的距离相同。 Kir1 和 Sto72 之间的距离也必须相同。原始距离必须相同,即与它所处的时间范围无关。在 AMPL 中是否有一种简单的方法来执行此操作?

编辑:添加标签 Python。我想这也可以在 Python 中实现。我已经设法定义了新的集合,使用:

text = 'Kir'
string2 = [i for i in range(1,49)]
for i in string2:
    print (text+str(i))

例如。不过,我对距离矩阵感到困惑

【问题讨论】:

    标签: python ampl neos-server


    【解决方案1】:

    虽然你可以通过连接城市名称和时间来构建一个集合,但我认为最好使用一个二维集合,第一个索引代表城市,第二个索引:

    set K dimen 2;
    
    data;
    
    set K :=
    Kir 1
    Kir 2
    Kir 3;
    

    集合 K 将包含对 ('Kir', 1)('Kir', 2)('Kir', 3)

    【讨论】:

    • 谢谢!不知道这种可能性!显然比使用另一个程序 Python 指定集合更方便!
    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 2020-05-29
    • 2019-03-27
    • 2010-10-06
    • 2023-03-26
    • 2021-03-09
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多