wesnoth/data/ai/formula/lib/map_evaluation.fai

107 lines
2.1 KiB
Plaintext

fai 'ai/formula/lib/map_evaluation.fai' #===== Evaluation how good unit is on a map ===== #
# filter out important locations #
# creates a 'map' data type that assigns terrain to location #
def location_to_terrain_map(ai*)
tomap( map(map.terrain, loc), map.terrain );
# creates a 'map' data type that assigns location to terrain#
def id_to_location_map(ai*)
map( tomap( map(map.terrain, id)), find(map.terrain, id=key).loc);
#this function returns all input hexes and hexes within some radius of them#
def get_locations_surroundings(ai*, input_locs, range)
sum(
map(input_locs,
locations_in_radius( self, range)
)
);
#this function returns all keeps and hexes within some radius#
def get_keeps_with_surroundings(ai*, range)
sum(map(keeps, locations_in_radius( self, range)));
# evaluate average defense #
#gives map where key is id of terrain, and value is number of hexes of that terrain on a gamemap#
def locations_map(ai*)
tomap(
map(
map.terrain,
id
)
);
#
filters terrain map,
min_percent it minimal % of map that terrain has to occupy to be considered in later evaluations
#
def filtered_locations_map(ai*, min_percent)
filter(
locations_map(ai) ,
value > (map.w * map.h) / ( 100 / min_percent )
);
#returns average defense of the unit #
def unit_average_defense(ai*, unit, terrain_min_percent )
sum(
values(
map(
filtered_locations_map(ai,terrain_min_percent),
defense_on(
unit,
find(map.terrain,id=key).loc
) *
value
)
)
) /
sum(
values(
filtered_locations_map(
ai,
terrain_min_percent
)
)
);
#returns map of units from units_list and their average defense (more -> better) #
def map_units_average_defense(ai*, units_list, terrain_min_percent)
tomap(
map(
units_list,
id
),
map(
units_list, 'unit',
unit_average_defense(
ai,
unit,
terrain_min_percent
)
)
);
def units_average_defense(ai*, units_list, terrain_min_percent)
sum(
map(
units_list, 'unit',
unit_average_defense(
ai,
unit,
terrain_min_percent
)
)
) /
size(
units_list
);
faiend