Hi,

I am trying to solve a train timetable optimization problem using AMPL. I am new to it. The code is returning an incorrect answer. There are a few issues in this code

- Constraint #MustDepart becomes infeasible for i > D[n] but if I don’t inlclude it it results in zero for all trains.
- PB should be integer but then it doesn’t run saying that it is non-linear problem and the demo cannot solve more than 300 variables and constraint. I am not sure how does it become a nonlinear problem.
- D[n] for each n must have the optimal value but that’s not the case. It gives values such that the difference of D[n] is equal to minimum headway. I have included an >= costrain so it should work. if the reduce the minimum headway to 4 minutes, D[n] becomes 18 and the waiting time increase which is not the optimal solution.

I would really appreciate some help!

#Sets

set N ordered; #No. of trains

set A ordered; #No. of upcoming trains

set LS ordered; #No. of loading stations

set US ordered; #No. of unloading stations

#Parameters

param T = 1; #Size of time interval in miuntes

param C = 1500; # Total Capacity of each train

param I >=0; #No. of intervals

param PE{i in 1…I,s in LS}; #No. of Passengers entering station s at interval i

param PA{i in 1…I,s in US}; #No. of Passengers alighting from train n at station s

#Independent Variables

var D {n in N} >=0 , integer;#Departure time of train n

var X {n in N,i in 1…I}, binary; #Varible for max time step for train n

var PB {n in N,i in 1…I,s in LS} >=0; #Ratio of boarding passengers to arriving passengers

#Dependent Variables

var Y {n in N,i in 1…I,s in LS} = X[n,i]*PE[i,s]; #Passenegers arriving at station s, in interval i, assigned to service n

var AC{n in N,s in LS} = if s = 1 then C else min(C,AC[n,s-1]+ sum{i in 1…I}(X[n,i]*PA[i,s]) - sum{i in 1…I}PB[n,i,s-1]); #Available capacity of service n at station s before the passengers board

var PL {n in N,i in 1…I,s in LS}= Y[n,i,s]-PB[n,i,s]; #No. of passengers left after service n departs

var W {n in N,i in 1…I,s in LS} = (Y[n,i,s]*(D[n]-(i-0.5)) + if n = 1 then 0 else PL[n-1,i,s]*(D[n]-D[n-1]))*T ; #Waiting time of p passengers, at station n and interval i, for train n

#Objective function

maximize TotalWaitingTime: #Total waiting time of all passengers

sum {n in N,i in 1…I,s in LS}W[n,i,s];

#Constraints

subject to MustDepart{n in N,i in 1…I}: #Train always departs

D[n] -(i-0.5) >= 0.5 ;

subject to MinHeadway{n in A}: #To maintain minimum headway between two trains

D[n+1] - D[n] >=6;

subject to MaxHeadway{n in A}: #To maintain minimum headway between two trains

D[n+1] - D[n] <=15;

subject to LastDeparture{i in 1…I,n in N}: #Every train must departs within the time horizon

D[n]<= I;

subject to Imin_Imax{n in N,i in 1…I}: #To update the no. of passengers arriving after train n from departs station s

X[n,i] = if n = 1 then (if i <= D[n] then 1 else 0) else if i > D[n-1] and i <= D[n] then 1 else 0;

subject to C2{n in N,i in 1…I,s in LS}: # No. of passengers boarding service n at station s should not exceed its available capacity

PB[n,i,s] = min(Y[n,i,s],(if s = 1 then C else AC[n,s])/(D[n] - if n=1 then 0 else D[n-1]));

subject to C6: # Total of passengers boarding should not exceed total passengers arriving

sum{n in N, i in 1…I, s in LS}PB[n,i,s] = sum{i in 1…I, s in LS}PE[i,s];

subject to C3 {n in N,s in LS}: # non-negativity

AC[n,s] >=0;

subject to C4 {n in N,s in LS}: # non-negativity

AC[n,s] <=C;

subject to C5{n in N,i in 1…I,s in LS}: # non negativity

W[n,i,s] >= 0;

set N:=1,2,3,4,5,6,7;

set A:= 1,2,3,4,5,6;

set LS:=1,2,3,4,5,6,7,8,9,10,11;

set US:=2,3,4,5,6,7,8,9,10,11,12;

param I:= 42;

param PE: 1 2 3 4 5 6 7 8 9 10 11:=

1 0 210 123 63 54 0 0 108 54 40 40

2 0 210 123 63 54 0 0 108 54 40 40

3 0 210 123 63 54 0 0 108 54 40 40

4 0 210 123 63 54 0 0 108 54 40 40

5 0 210 123 63 54 0 0 108 54 40 40

6 0 210 123 63 54 0 0 108 54 40 40

7 0 210 123 63 63 0 0 108 54 40 40

8 0 210 123 63 63 0 0 108 54 45 58

9 0 161 123 63 63 0 0 108 54 45 58

10 0 161 123 63 63 0 0 108 54 45 58

11 0 161 143 63 63 0 0 123 87 45 58

12 0 161 143 63 63 0 0 123 87 45 58

13 0 161 143 63 63 0 0 123 87 45 58

14 0 161 143 78 63 0 0 123 87 45 58

15 0 161 143 78 63 0 0 123 87 45 58

16 0 161 143 78 54 0 0 123 87 45 58

17 0 161 143 78 54 0 0 123 87 45 58

18 0 161 143 78 54 0 0 123 87 45 58

19 0 172 143 78 54 0 0 123 87 45 58

20 0 172 143 78 54 0 0 123 87 45 58

21 0 172 136 78 54 0 0 112 87 45 58

22 0 172 136 78 54 0 0 112 87 45 58

23 0 172 136 78 63 0 0 112 87 45 58

24 0 172 136 78 63 0 0 112 87 45 58

25 0 172 136 78 63 0 0 112 87 45 58

26 0 172 136 78 63 0 0 112 87 45 58

27 0 172 136 78 63 0 0 112 87 45 58

28 0 172 136 78 63 0 0 112 87 45 58

29 0 172 136 78 63 0 0 112 87 45 58

30 0 172 136 78 63 0 0 112 87 45 58

31 0 172 136 78 63 0 0 112 87 45 58

32 0 172 136 78 63 0 0 112 87 45 58

33 0 172 136 78 63 0 0 112 87 45 58

34 0 172 136 78 63 0 0 112 87 45 58

35 0 172 136 78 63 0 0 112 87 45 58

36 0 172 136 78 63 0 0 112 87 45 58

37 0 172 136 78 63 0 0 112 87 45 58

38 0 172 136 78 63 0 0 112 87 45 58

39 0 172 136 78 63 0 0 112 87 45 58

40 0 172 136 78 63 0 0 112 87 45 58

41 0 172 136 78 63 0 0 112 87 45 58

42 0 172 136 78 63 0 0 112 87 45 58

;

param PA: 2 3 4 5 6 7 8 9 10 11 12:=

1 0 36 71 117 125 0 0 71 74 73 125

2 0 36 71 117 125 0 0 71 74 73 125

3 0 36 71 117 125 0 0 71 74 73 125

4 0 36 71 117 125 0 0 71 74 73 125

5 0 36 71 117 125 0 0 71 74 73 125

6 0 36 71 117 125 0 0 71 74 73 125

7 0 36 71 117 134 0 0 71 74 73 125

8 0 36 71 125 141 0 0 71 74 74 132

9 0 26 62 125 132 0 0 62 69 76 123

10 0 26 62 125 132 0 0 62 69 76 123

11 0 26 72 139 149 0 0 62 74 90 131

12 0 26 72 139 149 0 0 62 74 90 131

13 0 26 72 139 149 0 0 62 74 90 131

14 0 26 72 144 154 0 0 62 74 90 136

15 0 26 72 144 154 0 0 62 74 90 136

16 0 26 72 144 145 0 0 62 74 90 136

17 0 26 72 144 145 0 0 62 74 90 136

18 0 26 72 144 145 0 0 62 74 90 136

19 0 26 62 144 154 0 0 62 73 103 136

20 0 26 62 144 154 0 0 62 73 103 136

21 0 26 43 149 145 0 0 72 80 100 127

22 0 26 43 149 145 0 0 72 80 100 127

23 0 26 43 149 154 0 0 72 80 100 127

24 0 26 43 149 154 0 0 72 80 100 127

25 0 26 43 149 154 0 0 72 80 100 127

26 0 26 43 149 154 0 0 72 80 100 127

27 0 26 43 149 154 0 0 72 80 100 127

28 0 26 43 149 154 0 0 72 80 100 127

29 0 26 43 149 154 0 0 72 80 100 127

30 0 26 43 149 154 0 0 72 80 100 127

31 0 26 43 149 154 0 0 72 80 100 127

32 0 26 43 149 154 0 0 72 80 100 127

33 0 26 43 149 154 0 0 72 80 100 127

34 0 26 43 149 154 0 0 72 80 100 127

35 0 26 43 149 154 0 0 72 80 100 127

36 0 26 43 149 154 0 0 72 80 100 127

37 0 26 43 149 154 0 0 72 80 100 127

38 0 26 43 149 154 0 0 72 80 100 127

39 0 26 43 149 154 0 0 72 80 100 127

40 0 26 43 149 154 0 0 72 80 100 127

41 0 26 43 149 154 0 0 72 80 100 127

42 0 26 43 149 154 0 0 72 80 100 127

;