I need some help modelling the following logic as a mixed integer linear programming constraints for a vehicle routing problem.
The Variables involved are the following:
- Xij, SDVlmj, and MDVhkbj are binary decision variables. They equal to 1 when a certain link (ij) or route/path (lmj or hkbj) is passed.
- SOCLi and SOCjR are both system variables and are continuous between 0 and 100, that represent the state of charge of a vehicle which determines its travelling range at a particular node.
Indices
All indices (i,j,l,m,h,k,b) pertain to nodes in a network and refer to distinct nodes when used within a particular constraint. indices i and j will be the focus of my problem.
Logic
IF (Xij = 1 AND (SDVlmj = MDVhkbj = 0) THEN (SOCLi = SOCjR).
When this logic does not hold true, I want the values for SOCLi and SOCjR to be non-binding.
Additional notes on other current constraints that might shed more light (no need for help on these).
- SDVlmj + MDVhkbj <= 1 for all j
- SDVlmj or MDVhkbj can only be = 1 if Xij = 1 for all nodes j. But Xij can be = 1 even if both SDVlmj and MDVhkbj are = 0. (I have this down already. Just providing more context for the logic im trying to achieve)
What I have so far...
(1) SOCLi <= SOCjR + BigM(1-Xij)
(2) SOCLi => SOCjR - BigM(1-Xij)
(3) SDVlmj+MDVhkbj<=1
(4) SDVlmj+MDVhkbj<= Xij
The problem with this current formulation however, is that when (SDVlmj + MDVhkbj) = 1, Xij must be equal to 1 based on constraint (4), which multiplies the BigM in constraints (1) and (2) by zero, effectively binding the values SOCLi to equal SOCjR which I am trying to avoid.
Any help would be much appreciated.