def _compare_actions( first_reach: GeneratorReach, second_reach: GeneratorReach, ) -> Tuple[List[ResourceNode], List[ResourceNode]]: first_actions = get_collectable_resource_nodes_of_reach(first_reach) second_actions = get_collectable_resource_nodes_of_reach(second_reach) assert set(first_actions) == set(second_actions) return first_actions, second_actions
def _calculate_potential_actions(self): progression_pickups = _calculate_progression_pickups(self.pickups_left, self.reach) print_retcon_loop_start(self.game, self.pickups_left, self.reach, self.index) uncollected_resource_nodes = get_collectable_resource_nodes_of_reach(self.reach) self._unfiltered_potential_actions = list(progression_pickups) self._unfiltered_potential_actions.extend(uncollected_resource_nodes)
def print_actions_of_reach(reach: GeneratorReach): if _DEBUG_LEVEL <= 1: return game = reach.game actions = get_collectable_resource_nodes_of_reach(reach) for action in actions: print("++ Safe? {1} -- {0} -- Dangerous? {2}".format( game.world_list.node_name(action), reach.is_safe_node(action), action.resource() in game.dangerous_resources))
def _calculate_potential_actions(self): uncollected_resource_nodes = get_collectable_resource_nodes_of_reach( self.reach) if self.configuration.multi_pickup_placement: get_pickups = get_pickups_that_solves_unreachable else: get_pickups = get_pickups_with_interesting_resources pickups = get_pickups(self.pickups_left, self.reach, uncollected_resource_nodes) print_retcon_loop_start(self.game, self.pickups_left, self.reach, self.index) self._unfiltered_potential_actions = list(pickups) self._unfiltered_potential_actions.extend(uncollected_resource_nodes)
def _calculate_potential_actions(reach: GeneratorReach, progression_pickups: Tuple[PickupEntry, ...], current_uncollected: UncollectedState, free_starting_items_spots: int, status_update: Callable[[str], None]): actions_weights: Dict[Action, float] = {} uncollected_resource_nodes = get_collectable_resource_nodes_of_reach(reach) total_options = len(uncollected_resource_nodes) options_considered = 0 def update_for_option(): nonlocal options_considered options_considered += 1 status_update("Checked {} of {} options.".format( options_considered, total_options)) usable_progression_pickups = [ progression for progression in progression_pickups if _items_for_pickup(progression) <= len(current_uncollected.indices) or (not uncollected_resource_nodes and _items_for_pickup(progression) <= free_starting_items_spots) ] total_options += len(usable_progression_pickups) for progression in usable_progression_pickups: actions_weights[progression] = _calculate_weights_for( _calculate_reach_for_progression(reach, progression), current_uncollected, progression.name) + progression.probability_offset update_for_option() for resource in uncollected_resource_nodes: actions_weights[resource] = _calculate_weights_for( advance_to_with_reach_copy(reach, reach.state.act_on_node(resource)), current_uncollected, resource.name) update_for_option() if debug.debug_level() > 1: for action, weight in actions_weights.items(): print("{} - {}".format(action.name, weight)) return actions_weights
def _calculate_potential_actions(self): current_uncollected = UncollectedState.from_reach(self.reach) progression_pickups = _calculate_progression_pickups( self.pickups_left, self.reach) print_retcon_loop_start(current_uncollected, self.game, self.pickups_left, self.reach, self.index) free_starting_items_spots = ( self.configuration.maximum_random_starting_items - self.num_random_starting_items_placed) uncollected_resource_nodes = get_collectable_resource_nodes_of_reach( self.reach) result: List[Action] = [ progression for progression in progression_pickups if _items_for_pickup(progression) <= len(current_uncollected.indices) or (not uncollected_resource_nodes and _items_for_pickup(progression) <= free_starting_items_spots) ] result.extend(uncollected_resource_nodes) self.potential_actions = result