-
- void consider_best() override
- {
-
- int possibilities = 0;
- // Consider only valid actors
- // If some actor are already considered as todo, skip
- for (auto const& [aid, actor] : actors_to_run_) {
- if (valuation.count(aid) == 0)
- for (auto& [aid, _] : actors_to_run_)
- valuation[aid] = rand() % 1000;
- if (actor.is_todo())
- return;
- if (actor.is_enabled() and not actor.is_done())
- possibilities++;
- }
-
- int chosen;
- if (possibilities == 0)
- return;
- if (possibilities == 1)
- chosen = 0;
- else
- chosen = rand() % possibilities;
-
- for (auto& [aid, actor] : actors_to_run_) {
- if (not actor.is_enabled() or actor.is_done())
- continue;
- if (chosen == 0) {
- actor.mark_todo();
- return;
- }
- chosen--;
- }
- THROW_IMPOSSIBLE; // One actor should be marked as todo before
- }