Another thought too is to use wait commands to give the AI a chance to load in the tasks. I found this out the hard way when I had lots of drivers. They would wander off down branches, going to places that they weren't even scheduled to go to. Why would a passenger train go down to the dock instead of heading into the passenger terminal still amazes me! There was nothing blocking the driver's route, and other drivers followed the route properly into the terminal, but no, this one driver insisted on going to the dock even though he was instructed to go to Track 6 in the terminal.
 
After a few other random events like this, I tried a wait command added at the beginning of each of the driver's instructions. Choose wait and pick some time in seconds or minutes. I chose 20 secs and this seemed to work. For some reason the the drivers needed time to settle down before they ran, and the 20 seconds gave them a chance to read their schedules.
 
I have also found when switching cars that it's sometimes necessary to add in a wait command between the switching moves (10 secs seems to work) to give the driver a chance to calculate his route.
 
This seemed to work for me, but as we've found with AI drivers, past performance does not guarantee future results.
 
John