Pyomo: reading a three dimensional parameter from a .dat file

39 Views Asked by At

When reading AMPL type .dat files in Pyomo, I encounter a problem dealing with two- and three-dimensional parameters. Following is a MWE:

The Pyomo file is:

from pyomo.environ import *

data = DataPortal()
data.load(filename="lp_test.dat")

mod         = ConcreteModel()
mod.T       = Set(initialize = data["T"])
mod.I       = Set(initialize = data["I"])
mod.J       = Set(mod.T, initialize = data["J"])
mod.TJ      = Set(dimen =2, initialize = data["TJ"])

mod.V0      = Param(mod.I,              initialize = data["V0"])
mod.VMAX    = Param(mod.I,              initialize = data["VMAX"])
mod.QMAX    = Param(mod.I,              initialize = data["QMAX"])
mod.RHO     = Param(mod.I,              initialize = data["RHO"])
mod.A_1     = Param(mod.I, mod.T,       initialize = data["A1"])
mod.A_2     = Param(mod.I, mod.T,       initialize = data["A2"])
mod.B       = Param(mod.I, mod.TJ,      initialize = data["B"])

And the .dat file is:

set T   := 1 2      ; 
set I   := 1 2 3    ; 
set J[1]:= 1        ; 
set J[2]:= 1 2      ; 
set TJ  := (1,1) (2,1) (2,2);

param: VMAX  QMAX   RHO  V0:=
1      500   100    0.8  50
2      400   140    0.8  40
3      500   100    0.8  50;


param A1:  1   2:=
1        0.5  0.5
2        0.3  0.18
3        0.15 0.25;


param A2:=
[1,*] 1 0.5  2 0.5
[2,*] 1 0.3  2 0.18
[3,*] 1 0.15 2 0.25;

param B := 
[*,1,1] 1 10  2 12  3 10     
[*,2,1] 1  8  2 6   3  4   
[*,2,2] 1  7  2 5   3  2 ;

One dimensional parameters VMAX, QMAX, RHO and V0 are properly load. 2-Dimensional parameter A1 is also properly load, but not A2, which is equivalent to A1 in AMPL format, and according to the Pyomo book, it can be defined in this way. Parameter B is not read.

The following error appears for A2 and B:

"Index '1' is not valid for indexed component 'A_2'"
0

There are 0 best solutions below