# Dimensions of the problem
let n_airports:=3;
let n_sectors:=4;
let n_flights:=3;
let time_intervals:= 40;
# Definition of the sets of the problem
let T:={1..time_intervals};
let F:={“f1”,”f2”,”f3”};
let K:={"A","B","C"};
let S:={"I","II","III","IV"};
let C:={"f2","f3"}; # continued flights
# Departure capacity of airport K at time t
let {i in T} D_k["A",i]:=1;
let {i in T} D_k["B",i]:=1;
let {i in T} D_k["C",i]:=1;
# Arrival capacity of airport K at time t
let {i in T} A_k["A",i]:=1;
let {i in T} A_k["B",i]:=1;
let {i in T} A_k["C",i]:=1;
# Capacity of sector j at time t
let {i in T} S_j["I",i]:=4;
let {i in T} S_j["II",i]:=4;
let {i in T} S_j["III",i]:=4;
let {i in T} S_j["IV",i]:=4;
# Scheduled departure times
let d_f["f1"]:=1;
let d_f["f2"]:=1;
let d_f["f3"]:=17;
# Scheduled arrivals times
let a_f["f1"]:=15;
let a_f["f2"]:=13;
let a_f["f3"]:=23;
# Turnaround times
let s_f["f1"]:=5;
let s_f["f2"]:=5;
let s_f["f3"]:=5;
# Origin and Destination Airport
let origin_f["f1"]:={"A"};
let origin_f["f2"]:={"A"};
let origin_f["f3"]:={"B"};
let destination_f["f1"]:={"C"};
let destination_f["f2"]:={"B"};
let destination_f["f3"]:={"C"};
# Nodes and arcs for flight f
let N_f["f1"]:={"A","q(A)","a","b","C"};
let N_f["f2"]:={"A","q(A)","e","B"};
let N_f["f3"]:={"B","q(B)","f","C"};
let arcs["f1"]:={"(A,q(A))","(q(A),a)","(a,b)","(b,C)"};
let arcs["f2"]:={"(A,q(A))","(q(A),e)","(e,B)"};
let arcs["f3"]:={"(B,q(B))","(q(B),f)","(f,C)"};
# Number of time units that flight f must spend in arc m,n
let l_fnm["f1","(A,q(A))"]:=0;
let l_fnm["f1","(q(A),a)"]:=5;
let l_fnm["f1","(a,b)"]:=8;
let l_fnm["f1","(b,C)"]:=1;
let l_fnm["f2","(A,q(A))"]:=0;
let l_fnm["f2","(q(A),e)"]:=5;
let l_fnm["f2","(e,B)"]:=7;
let l_fnm["f3","(B,q(B))"]:=0;
let l_fnm["f3","(q(B),f)"]:=3;
let l_fnm["f3","(f,C)"]:=3;
# Scheduled time of arrival of flight f to arrive at node n (not considering possible delays)
let {k in F, i1 in N_f[k]} r_fn[k,i1] := (sum{i2 in arcs[k]: ord(i2) < ord(i1)} l_fnm[k,i2])+d_f[k];
# maximum ground holding time units delay per flight f
let G["f1"]:=2;
let G["f2"]:=3;
let G["f3"]:=3;
# maximum airborne unit delays for flight f
let A["f1"]:=5;
let A["f2"]:=4;
let A["f3"]:=4;
# Smallest time interval for flight f to arrive at node n
let {k in F, i in N_f[k]: ord(i)<=2} T_fn[k,i]:={r_fn[k,i] .. min(r_fn[k,i]+G[k],time_intervals)};
let {k in F, i in N_f[k]: ord(i)>2} T_fn[k,i]:={r_fn[k,i] .. min(r_fn[k,i]+G[k]+A[k],time_intervals)};
# Unit cost for air and ground delay
let ca["f1"]:=3;
let ca["f2"]:=2.5;
let ca["f3"]:=2.5;
let cg["f1"]:=1.5;
let cg["f2"]:=1.5;
let cg["f3"]:=1.5;
# Nodes and arcs belonging to Sector j that are overflown by Fligh k
# [Note that N_S denotes what in the statement is N_{jf}]
let N_S["f1","I"]:={"A", "q(A)", "a"};
let N_S["f1","II"]:={"a","b"};
let N_S["f1","III"]:={};
let N_S["f1","IV"]:={"b","C"};
let arc_S["f1","I"]:={"(A,q(A))","(q(A),a)"};
let arc_S["f1","II"]:={"(a,b)"};
let arc_S["f1","III"]:={};
let arc_S["f1","IV"]:={"(b,C)"};
let N_S["f2","I"]:={"A", "q(A)", "e"};
let N_S["f2","II"]:={};
let N_S["f2","III"]:={"e", "B"};
let N_S["f2","IV"]:={};
let arc_S["f2","I"]:={"(A,q(A))","(q(A),e)"};
let arc_S["f2","II"]:={};
let arc_S["f2","III"]:={"(e,B)"};
let arc_S["f2","IV"]:={};
let N_S["f3","I"]:={};
let N_S["f3","II"]:={};
let N_S["f3","III"]:={"B","q(B)","f"};
let N_S["f3","IV"]:={"f","C"};
let arc_S["f3","I"]:={};
let arc_S["f3","II"]:={};
let arc_S["f3","III"]:={"(B,q(B))","(q(B),f)"};
let arc_S["f3","IV"]:={"(f,C)"};