Pool evaluation outcome order
Iterative algorithm for "bad" direction
I ended up implementing the iterative algorithm.
The "bad" direction does have the advantage of allowing dynamic skips. Expressing this might be a pain though; in most cases I expect the effort spent in signaling dynamic skip is better spent in supporting the more favorable direction.
Available directions
If we send direction
to next_state()
:
- In theory we could even change direction dynamically for homogenous pools if the eval doesn't care about order. Though the only reason to do this is if there's a bunch of zero counts in the center, which is rare, and only when eval doesn't care about order at all, which is yet another signal that can be set erroneously. Also computing direction all the time might be costly?
- The use case seems very narrow:
- The eval would have to care about direction to begin with.
- If there is no
max_outcomes
ormin_outcomes
, then the eval can always use their favored direction. - With the iterative algorithm, the eval can simply fix a direction at some computational penalty.
- It may be possible to write the eval to handle both directions.
- Unless the first outcome is important, the direction can be determined from the previous outcome. And, if there is only one outcome period, the direction shouldn't matter.
If we don't:
-
next_state()
is forced to keep track of direction using state if they are interested.- If the first outcome wants to know the direction, this won't work.
- In this case I'd probably still guarantee all outcomes get visited.
Rejected:
- Separate
next_state()
for each direction. Too verbose. - Remove
min_outcomes
entirely and only allow ascending direction. Tempting but allowing skips for keep-lowest is probably compelling enough. - Force each
EvalPool
subclass to fix a direction. They can make their own decision.
Default direction
Pros of ascending:
- Probably less confusing than auto.
- Ascending is clearly better than descending, since ascending is better for
max_outcomes
which is more common thanmin_outcomes
, and it follows default sorts.
Pros of auto:
- Higher efficiency.
I went back to ascending as the default.
Edited by HighDiceRoller