Jump to content

'Manual Priorities' function.


Recommended Posts

Rimworld has a 'Manual Priorities' function whereby the player can manage colonists priorities by giving each type of task a priority number between 1 and 4. This is an *alternative* to the default checkboxes, which are very similar to ONI's sytem.
         
qsMW1Dy.png
         
Colonist job selection then moves from left to right, doing the first priority 1 task available. If there are no priority 1 tasks available, the colonist does the first priority 2 task available, and so on. (obviously, priority numbers would be inverted in ONI)
         
Understanding this system gives mid-to-high-end players of the game *vastly* superior control over their colonists behaviour. A colonist can be tasked to attend to emergency jobs like firefighting first (Priority 1), then fall back to their primary job (generally something they have high aptitude for, Priority 2), then given a series of backup jobs for when/if they complete their primary task and have nothing further (Priorities 3 & 4).
         
It seems like a more-accessible version of this system was the goal of the occupational upgrade, but I would suggest this is an area where accessibility is unecessary. Individual priorities are a high-end feature for skilled players who will take the time to understand the system: beginner players will be and have been satisfied simply with enable/disable buttons in the jobs matrix.

I think devs are well aware of this system and want to find a different way. There have been calls for it ever since the alpha.

1 hour ago, clickrush said:

This or the 1-5* system would be much better than the flat 1-9 one.

I think both are about equally bad. Even if the 1-5* was extended to 1-9* (which is just adding some numbers), its absolute priority of job tasks over other tasks or absolute lack of it (depending on whether the star is used) causes problems in certain situations.

Current 1-9 ... there is 0.5 priority point preference for job tasks over other tasks

1-9* ... there is 9 priority points preference for job tasks over other tasks (or none if star is used).

Good solution lies somewhere in between IMO. I believe good solution would be if the default preference gap was about 2 to 4 priority points and if it was possible to change it for individual tasks together with the priority level.

I hope devs will come up with some good system eventually.

 

I think the source of problems is less in the priority system and more in the task scheduler which doesn't plan well.

Is the task scheduler would just look a bit forward, just few seconds, like calculate "which dupe can get to the site after finishing their current task _and_ finish the task first given their traits" then the schedule would make a big jump towards optimum. Taking into account available time before a break (bio, lunch, sleeping) ... it would be practically perfect!

(It is not possible to find the optimum schedule in polynomial time, and any guaranteed optimization grade is likely too expensive in CPU time. But one can still get very good scheduling with acceptable CPU load. And multi-threaded programming...)

2 hours ago, Master Miner said:

I think the source of problems is less in the priority system and more in the task scheduler which doesn't plan well.

There is no planning whatsoever. When a duplicant gets free, it picks closest highest priority reachable job and goes to do it.

Even as is, the task picking takes long enough for duplicants to go visibly idle in late large colonies.

2 hours ago, Master Miner said:

Is the task scheduler would just look a bit forward, just few seconds, like calculate "which dupe can get to the site after finishing their current task _and_ finish the task first given their traits" then the schedule would make a big jump towards optimum. Taking into account available time before a break (bio, lunch, sleeping) ... it would be practically perfect!

What would be needed... I have it in my head. It would practically mean going through all available tasks by priority and assign them duplicants as they become available over time until we find a task for the duplicant that just got idle.

Step 0: A duplicant goes idle.

Step 1: calculate for all duplicants when they will be available (finish their current task).

Step 2: collect all tasks all around the map and sort them by priority. For job-related tasks, have them twice in the set, once at their job preference priority for corresponding jobs only, once at their normal priority for other jobs.

Step 3: for each duplicant figure out accessibility and transfer time to each task. This can be pre-computed with updates applied when a duplicant changes position or when change in map layout occurs

Step 4: figure out highest priority level of all accessible tasks and take all tasks of that priority level

Step 5: remove the task with shortest access time (duplicant's end-of-current-task time + transfer time).

Step 6: if the duplicant selected with the removed task was the duplicant from step 0, assign him the task and we're done.

Step 7: Update the duplicant's new time available to after finishing this task.

Step 8: continue from Step 5 until the set of highest priority tasks is empty

Step 9: continue from Step 4 until the list of all available tasks is empty

Step 10: the duplicant stays idle

It would not find optimum assignments but it would assign tasks much better than it happens now. The only major problem is step 3 which is very performance hungry. Occasional updates would not be a problem but the update would need to be done after each dug out tile and that's very often. Still it could possibly be done if there was a way to make such small updates without re-running complete flood fill. There are also other optimizations possible with this system.

 

Archived

This topic is now archived and is closed to further replies.

Please be aware that the content of this thread may be outdated and no longer applicable.

×
  • Create New...