The problem there is that it's very easy to create a situation where list D would require terabytes of RAM (+insane amount of CPU power and that is only for one citizen). That wouldn't even solve the issue, our algorithm already finds the optimal solution in terms of travel time / comfort and cost. However, it uses average times for waiting, not the actual timetable. This would make the calculation much more complex (You need to realize that on a large city at max speed we are doing several thousand pathfind requests per second).
First, thanks for replying. Its good to see the programmer(s) are aware of this discussion.
I can see your argument about the CPU/RAM overheads with generating list D. Your pathfinder currently would do something similar to List D currently, so what about this...
With the method of pathfinding you are using, I presume you are traversing a node tree thats permanently stored (each node represents a stop and branches between nodes represent walk/mode of travel to adjacent stops). The weightings used in the node tree you say are for travel time/comfort/cost. The algorithm finds a single solution based on the best outcome on these weightings.
So how about this;
1. Weighting should solely be on travel distance (aka, walk distance, the distance between two stops which are stored permanently in the node tree), not travel time, comfort or cost.
2. Modify the pathfinder to find the first '5' best weighted paths, and then doing a more detailed lookup on these top 5 paths that analyse the travel time using the other permanently stored lists I suggested against these paths, they could also track the comfort and zones traversed in this process. The quickest delivery (based on schedueling) is selected from this top 5, and if conditions are met (cost, comfort if you feel it a must, travel time vs avg car travel distance between start-end) the CIM is spawned to travel.
Note that I say top 5, and the argument on this would be, you may not find the appropriate route. How about storing this variable in a advanced setting so users that are willing to sacrifice more cpu/memory can increase this value appropriate to their system speed. You could also have your standard pathfinding set by default and let users change to this style of pathfinding if they elect and with a 'use at your own risk' that it may slow/crash the game (out of memory) if used.
I dont see huge amounts of memory required for this suggestion, only some additional permanent lists to be used as lookup tables.
The CPU overhead is dependant on how far you want to dig in route path possibilities.
The only obstacle I see is creating the implementation and doing it efficiently. Thats why I suggested letting the community brainstorm on the code/obstacles in the code that may present limitations.
The other thing is I am active with other open source game communities, and know some coders that actively work on Pathfinding AI, such as OpenTTD. If you were to share that portion of code and what interfaces existed external to that code (ie the classes and exposed variables/functions) with other objects in the game world, they would jump at the opportunity to use their skill to propagate a solution.
Let us know your thoughts.