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'"