I hope this email finds you well. I am currently working on a mathematical optimization problem and using AMPL for programming. However, I have encountered syntax errors while trying to translate certain mathematical constraints into AMPL code. I would greatly appreciate your guidance on resolving this issue.
Here is a brief description of the mathematical constraints I am working with:
The code I wrote in AMPL is as follows:
set I := {1…10 by 1}; # Signal cycles
set J := {0…4 by 1}; # Signal phases
var g{i in I, j in J} >= 10, <= 25 integer; # Decision variable for green light duration in phase j of signal cycle i
var C_{I}; # Start time of cycle i
var cycle_length{i in I} = sum{j in 1…4} g[i, j]; # Length of cycle i
var in_cycle{k in K, i in I} binary; # Binary variable indicating if vehicle k arrives at the intersection during cycle i
Calculate the start time of signal cycle i
subject to Cycle_Start_Time_Constraint{i in 2…10}:
C_[i] = sum{j in 1…4} g[i-1, j] + C_[i-1];
Initial condition
subject to Cycle_Start_Time_Constraint_0:
C_[1] = 0; # The first cycle starts at time 0
Determine in which signal cycle each vehicle arrives
subject to Car_In_Cycle{k in K, i in I}:
t[k] >= C_[i] and t[k] <= C_[i] + cycle_length[i] * in_cycle[k, i] ;
param p{k in K}; # Phase at which vehicle k enters the intersection
var delay{k in K}; # Vehicle delay
If the vehicle can enter the intersection in the current cycle
subject to delay_1{k in K, i in I}:
t[k] <= C_[i* in_cycle[k, i]] + sum {1…p[k]} g[i, p[k]]
==> d[k] = max(0, C_[i* in_cycle[k, i] ] + sum {1…p[k]-1} g[in_cycle[k, i] * i, p[k]]-t[k]) ;
If the vehicle needs to enter the intersection in the next cycle
subject to delay_2{k in K, i in I}:
t[k] >= C_[in_cycle[k, i] * i] + sum {1…p[k]} g[in_cycle[k, i] * i, p[k]]
==> d[k] = C_[in_cycle[k, i] * i + 1] + sum {1…p[k]-1} g[in_cycle[k, i] * i + 1, p[k]]-t[k];
Minimize the total delay of all vehicles
minimize:
sum{k in K} d[k];
The syntax error message I encountered is as follows:
Variables in subscripts are not yet allowed.
context: t[k] >= >>> C_[in_cycle[k,i]*i] <<< + sum {1…p[k]} g[in_cycle[k,i]*i,p[k]]
variable in index expression
context: t[k] >= >>> C_[in_cycle[k,i]*i] <<< + sum {1…p[k]} g[in_cycle[k,i]*i,p[k]]
k is not defined
context: t[k] >= C_r[in_cycle[k,i]*i]+ sum >>> {1…p[k]} g[in_cycle[k,i]*i,p[k]]