mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 04:01:32 -06:00
Core: Speed up fill_restrictive item_pool pop loop (#4536)
* Core: Speed up fill_restrictive item_pool pop loop Items from `reachable_items` are placed in last-in-first-out order, so items being placed will be towards the end of `item_pool`, but the iteration to find the item was iterating from the start of `item_pool`. Now also uses `del` instead of `.pop()` for an additional, tiny, performance increase. It is unlikely for there to be a noticeable difference in most cases. Only generating with many worlds with a high percentage of progression items and fast access rules is likely to see a difference with this change. --skip_output generation of 400 template A Hat in Time yamls with progression balancing disabled goes from 76s to 43s (43% reduction) for me with this patch. This placed 43200 progression items out of 89974 items total (48% progression items). * Fix comment typo "be" was missing. --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
This commit is contained in:
6
Fill.py
6
Fill.py
@@ -75,9 +75,11 @@ def fill_restrictive(multiworld: MultiWorld, base_state: CollectionState, locati
|
||||
items_to_place.append(reachable_items[next_player].pop())
|
||||
|
||||
for item in items_to_place:
|
||||
for p, pool_item in enumerate(item_pool):
|
||||
# The items added into `reachable_items` are placed starting from the end of each deque in
|
||||
# `reachable_items`, so the items being placed are more likely to be found towards the end of `item_pool`.
|
||||
for p, pool_item in enumerate(reversed(item_pool), start=1):
|
||||
if pool_item is item:
|
||||
item_pool.pop(p)
|
||||
del item_pool[-p]
|
||||
break
|
||||
|
||||
maximum_exploration_state = sweep_from_pool(
|
||||
|
Reference in New Issue
Block a user