Solving the travel schedule puzzle using optimisation