【问题标题】:how I can initialize a parameter in AMPL when it is defined on multiple sets?当在多个集合上定义参数时,如何在 AMPL 中初始化参数?
【发布时间】:2019-06-20 16:55:48
【问题描述】:

假设我有

param m; #number of modes
 param n; #number of individual
param a; #number of alternatives
param f; #number of household
set M, default{1..m}; #set of modes
set N, default{1..n}; #set of individuals
set A, default{1..a}; #set of alternatives
set F, default{1..f}; #set of family
set E, within F cross N

如何初始化参数 X{E,M,A} ?

假设

a:=2 , m:=3 , n:= 4 f:=2;

并且定义了集合 E:

 set E:= 1 1   1 2    2 3    2 4 ; 

【问题讨论】:

    标签: optimization ampl


    【解决方案1】:

    您可以按照您的建议声明参数:

    param X{E,M,A};
    

    现在,如果您想提供一个默认值(我假设这就是您所要求的),您可以按照通常的方式进行:

    param X{E,M,A} default 0;
    

    然后在.dat文件中提供一些非默认值,例如:

    param: X :=
        1 1 1 2   5
        2 3 2 1   6;
    

    请注意,在您调用 solve 之前,AMPL 不会将默认值填充到参数中。来自AMPL book,p。 120:

    仅在第一次需要参数值时才评估给出参数默认值的表达式,例如当使用该参数的目标或约束由solve 命令处理时。

    因此,如果您在发出modeldata 命令之后但在发出solve 命令之前输入display X;,您将只能获得非默认值,例如:

    X :=
    1 1 1 2   5
    2 3 2 1   6
    ;
    

    但是如果你在调用solve 之后使用display X;,你会得到完整的列表:

    X [1,*,*,1] (tr)
    :   1   2    :=
    1   0   0
    2   0   0
    3   0   0
    
     [1,*,*,2] (tr)
    :   1   2    :=
    1   5   0
    2   0   0
    3   0   0
    
     [2,*,*,1] (tr)
    :   3   4    :=
    1   0   0
    2   6   0
    3   0   0
    
     [2,*,*,2] (tr)
    :   3   4    :=
    1   0   0
    2   0   0
    3   0   0
    ;
    

    为了完整起见,这里是我用于此答案的 .mod.dat 文件:

    .mod:

    param m; #number of modes
    param n; #number of individual
    param a; #number of alternatives
    param f; #number of household
    set M, default{1..m}; #set of modes
    set N, default{1..n}; #set of individuals
    set A, default{1..a}; #set of alternatives
    set F, default{1..f}; #set of family
    set E, within F cross N;
    
    param X{E,M,A} default 0;
    var myVar{E,M,A} >= 0;
    
    minimize Obj: sum {(i,j) in E, mm in M, aa in A} X[i,j,mm,aa] * myVar[i,j,mm,aa];
    

    .dat:

    param a:=2;
    param m:=3;
    param n:= 4;
    param f:=2;
    set E:= 1 1   1 2    2 3    2 4 ; 
    
    param: X :=
        1 1 1 2   5
        2 3 2 1   6;
    

    【讨论】:

    • 对不起,我的意思是 X{E,M,A},对不起
    • 你的参数 X 是 4 维的?
    • 它是三维的,但其中一个维度 (E) 有 2 个维度。
    • 我无法理解 param X 是如何定义的!它的 3 个维度如何?我的意思是哪些指标适用于什么集合?
    • 5 和 6 是 X 的值。换句话说,X[1,1,1,2] = 5X[2,3,2,1] = 6
    猜你喜欢
    • 2014-08-30
    • 2015-08-21
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多