Constraint Programming
OpenHi, i need to program this constraint and i have this code line:
-
As the error suggests, your code attempts to access variable \(\texttt{X[0, 25, 0]}\), which does not exist. I suspect the issue is as follows:
- The outer \(\texttt{for}\) loop of the \(\texttt{R4}\) constraints iterates over \( \texttt{t} \) in \(\texttt{range(1, len(T) - 2)}\). Consequently, a constraint will be added for \( \texttt{t = len(T) - 3} \).
- The inner \(\texttt{for}\) loop sums over \(\texttt{X[e, t_prima, s]}\) for \(\texttt{t_prima} = \texttt{t}\), \(\texttt{t+1}\), \(\texttt{t+2}\), and \(\texttt{t+3}\). When \( \texttt{t = len(T) - 3} \), this means the code attempts to access \(\texttt{x[e, len(T), s]}\), which does not exist in Python's zero-based indexing.
Try changing your outer \(\texttt{for}\) loop to stop at \( \texttt{t} = \texttt{len(T) - 4} \):
for t in range(1, len(T) - 3)
(EDIT: or possibly \(\texttt{range(len(T) - 3)}\), as Michel suggests below.)
Once the code is working, you can inspect the model for correctness by writing an LP file to disk with Model.write():
model.write("model.lp")
Lastly, the mathematical formulation of the constraint isn't totally clear. There are constraints for all \( t \in \{1, \ldots, T-3\} \), but \( t \) is also used as the summation index in the constraint. From your code, it looks like the summation should instead sum over \(t'\): \( \sum_{t'=t}^{t+3} x_{e,t,s} \leq 3 \).
0 -
It seems to me like there is a small confusion between the modelling (1-indexed) and the code (python is 0-indexed). It might make more sense to use range(0, len(T)-3) in your constraint.
0
Please sign in to leave a comment.
Comments
2 comments