The Problem with Multistop Logistics Trips

I’m almost tempted to post this in the bugs section because, although the current behaviour is intentional, it’s highly undesirable.

For a lot of logistics carrying jobs in the game, villagers don’t just take some from A to X. They want to get as much stuff to X as possible in one trip; so they visit A, B, and C and then go to X. Examples including grocers visiting multiple cellars when stocking the market, smokers visiting multiple hunters when stocking the smokehouse, and traders visiting multiple forager huts when stocking herbs. This is generally good, this kind of round-robin trip is often more efficient than A->X->B->X->C->X, especially if A, B, C are close together.

BUT, sometimes it isn’t. If A, B, and X are all close together and C is both miles away and has a small quantity of good to pick up, I’d rather the villager went A->B->X and then did a separate trip C->X so that I don’t have to wait forever for the goods at A and B to get used (and, who knows, maybe someone else closer to C will pick those up anyway). As an extreme example of this being a problem, see this screenshot, where a grocer is taking the entire food supply of the village on a walk to the opposite corner of the map in order to pick up 10 smoked meat from a salvage. In the meantime, everyone at home is starving.

How could this be fixed? Say the villager is currently carrying x amounts of goods from A and B, and has y left to pick up at C. If the distance to C is greater than y/x the distance to X, the villager should not go to C this trip and instead return to X first.

I doubt this is perfect, but it encapsulates the idea that walking a long distance to pick up a small amount when already carrying a lot is not worth it. It might have unintended consequences of distance places being visited less but, as the local stockpiles build up it will eventually become more desirable to visit it, so it ought to balance itself out. I also don’t think it should be too expensive to compute: it only needs to be done once after visiting every building in the A->B->C chain (or in advance when reserving goods to pick up), and if the Euclidean distance (rather than true-path distance) is used then it’s a cheap check too.

5 Likes

In addition to this, logistics for farmers is very problematic. If there are multiple fields distant from each other farmers tend to move all together from one group of fields to another wasting a lot of time on walking. It’s resulting into massive rots so it makes pointless to have fields in different locations which seems unreasonable.

I suggest limit with certain radius where farmer can work so they still will help other farmers to process their fields but prefer to stick to his “native” field, and totally ignore distant fields.
Same can be applied to grocers, smokers and other workers except labourers - just limit their work with certain radius with their workplace as a center. So smokers won’t walk to the distant cabin to grab 2 units of meat and grocers won’t walk across whole map to grab a few units there.

1 Like

A hard limit might work some of the time, but I think it’s very likely to lead to other problems. For example, a smokers hut just slightly too far from the market might never get picked up by the grocers and so always rot. If the smoker has nothing to do and the only meat anywhere on the map is 2 units far away, then they should go and pick it up regardless of distance. That’s why the formula I proposed intrinsically weighs carrying opportunity against time cost.

1 Like

There is where labourers and storage hubs should do the work. At least a player will have ways to optimise things.

Maybe the game can have a slider, where the player can limit/extend the amount of spokes (N) that a multi-pickup is allowed to merge. That how it is set in software for Distribution Requirement Planning software.