Formulating multi-class user equilibrium using mixed-integer linear programming