Skip to content

Commit

Permalink
test: find low cost points is now tested on all grid types
Browse files Browse the repository at this point in the history
  • Loading branch information
eladyaniv01 committed Sep 28, 2020
1 parent c127901 commit 6ec010d
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 91 deletions.
104 changes: 13 additions & 91 deletions run.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
from typing import List

from sc2.position import Point2

from loguru import logger
from MapAnalyzer.MapData import MapData
from MapAnalyzer.utils import import_bot_instance

import matplotlib.pyplot as plt

def get_random_point(minx, maxx, miny, maxy):
return (random.randint(minx, maxx), random.randint(miny, maxy))
Expand Down Expand Up @@ -39,6 +40,7 @@ def get_map_file_list() -> List[str]:
map_files = get_map_file_list()
for mf in map_files:
if 'death' in mf.lower():
mf = random.choice(map_files)
# if 'abys' in mf.lower():
with lzma.open(mf, "rb") as f:
raw_game_data, raw_game_info, raw_observation = pickle.load(f)
Expand All @@ -50,96 +52,16 @@ def get_map_file_list() -> List[str]:
p0 = Point2(reg_start.center)
p1 = Point2(reg_end.center)
influence_grid = map_data.get_air_vs_ground_grid(default_weight=50)
influence_grid = map_data.get_pyastar_grid()
# p = (50, 130)
# influence_grid = map_data.add_cost(grid=influence_grid, position=p, radius=10, initial_default_weights=50)
# influence_grid = map_data.get_pyastar_grid()
cost_point = (50, 130)
influence_grid = map_data.add_cost(position=cost_point, radius=7, grid=influence_grid)
safe_points = map_data.find_lowest_cost_points(from_pos=cost_point, radius=14, grid=influence_grid)

logger.info(safe_points)

x, y = zip(*safe_points)
plt.scatter(x, y, s=1)
map_data.plot_influenced_path(start=p0, goal=p1, weight_array=influence_grid, allow_diagonal=False)

map_data.show()
# import matplotlib.pyplot as plt
# import numpy as np
#
# print(np.unique(map_data.path_arr))
# plt.imshow(map_data.path_arr, origin="lower")
# plt.show()
# plt.imshow(map_data.placement_arr, origin="lower")
# plt.show()
# plt.imshow(influence_grid, origin="lower")
# plt.show()
break
# if 'dream' in mf.lower():
# map_file = mf
# break
#
# # noinspection PyUnboundLocalVariable
# with lzma.open(map_file, "rb") as f:
# raw_game_data, raw_game_info, raw_observation = pickle.load(f)
#
# bot = import_bot_instance(raw_game_data, raw_game_info, raw_observation)
# map_data = MapData(bot, loglevel="DEBUG")
# map_data.plot_map()
# map_data.show()
# logger = map_data.logger
# base = map_data.bot.townhalls[0]
# reg_start = map_data.where(base.position_tuple)
# reg_end = map_data.where(map_data.bot.enemy_start_locations[0].position)
# p0 = Point2(reg_start.center)
# p1 = Point2(reg_end.center)
# influence_grid = map_data.get_pyastar_grid()
# ramps = reg_end.region_ramps
# # logger.error(ramps)
# if len(ramps) > 1:
# if map_data.distance(ramps[0].top_center, reg_end.center) < map_data.distance(ramps[1].top_center,
# reg_end.center):
# ramp = ramps[0]
# else:
# ramp = ramps[1]
# else:
# ramp = ramps[0]
#
# # influence_points = [(ramp.top_center, 2), (Point2((66, 66)), 18)]
#
# influence_points = _get_random_influence(25, 5)
# # for tup in influence_points:
# # p = tup[0]
# # r = tup[1]
# # map_data.add_cost(p, r=r, arr=influence_grid)
# map_data.plot_influenced_path(start=p0, goal=p1, weight_array=influence_grid)
# map_data.show()

# get corner regions centers for start / end points
# base = map_data.bot.townhalls[0]
# reg_start = map_data.where(base.position_tuple)
# reg_end = map_data.where(map_data.bot.enemy_start_locations[0].position)
# p0 = reg_start.center
# p1 = reg_end.center
# for idx in range(8):
# """generate random points for added influence / cost """
# pts = []
# if idx > 0:
# NUM_POINTS = idx * 10
# else:
# NUM_POINTS = 1
#
# # generating random points for added influence
# for i in range(NUM_POINTS):
# pts.append(get_random_point(50, 130, 25, 175))
#
# """Requesting a grid and adding influence / cost"""
# # getting the base grid for pathing
# if NUM_POINTS / 10 % 2 == 0:
# # arr = map_data.get_air_vs_ground_grid()
# arr = map_data.get_clean_air_grid()
# grid_name = "AvG_Grid"
# else:
# arr = map_data.get_pyastar_grid(air_pathing=False)
# grid_name = "NormalGrid"
# r = 7 + idx
# # note that we use the default weight of 100, we could pass custom weights for each point though
# for p in pts:
# arr = map_data.add_cost(p, r, arr)
#
# """Plot path on weighted grid"""
# map_data.plot_influenced_path(start=p0, goal=p1, weight_array=arr,
# name=f"{grid_name}{NUM_POINTS} Points of influence")
# map_data.show()
# # map_data.close()
37 changes: 37 additions & 0 deletions tests/test_pathihng.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,43 @@ def test_handle_illegal_values(self, map_data: MapData) -> None:
path = map_data.pathfind(p0, p1, grid=arr)
assert (path is not None), f"path = {path}"

def test_find_lowest_cost_points(self, map_data: MapData):
influence_grid = map_data.get_air_vs_ground_grid()
cost_point = (50, 130)
influence_grid = map_data.add_cost(position=cost_point, radius=7, grid=influence_grid)
safe_points = map_data.find_lowest_cost_points(from_pos=cost_point, radius=14, grid=influence_grid)
cost = influence_grid[safe_points[0]]
for p in safe_points:
assert (influence_grid[
p] == cost), f"grid type = air_vs_ground_grid, p = {p}, influence_grid[p] = {influence_grid[p]}, expected cost = {cost}"

influence_grid = map_data.get_clean_air_grid()
cost_point = (50, 130)
influence_grid = map_data.add_cost(position=cost_point, radius=7, grid=influence_grid)
safe_points = map_data.find_lowest_cost_points(from_pos=cost_point, radius=14, grid=influence_grid)
cost = influence_grid[safe_points[0]]
for p in safe_points:
assert (influence_grid[
p] == cost), f"grid type = clean_air_grid, p = {p}, influence_grid[p] = {influence_grid[p]}, expected cost = {cost}"

influence_grid = map_data.get_pyastar_grid()
cost_point = (50, 130)
influence_grid = map_data.add_cost(position=cost_point, radius=7, grid=influence_grid)
safe_points = map_data.find_lowest_cost_points(from_pos=cost_point, radius=14, grid=influence_grid)
cost = influence_grid[safe_points[0]]
for p in safe_points:
assert (influence_grid[
p] == cost), f"grid type = pyastar_grid, p = {p}, influence_grid[p] = {influence_grid[p]}, expected cost = {cost}"

influence_grid = map_data.get_climber_grid()
cost_point = (50, 130)
influence_grid = map_data.add_cost(position=cost_point, radius=7, grid=influence_grid)
safe_points = map_data.find_lowest_cost_points(from_pos=cost_point, radius=14, grid=influence_grid)
cost = influence_grid[safe_points[0]]
for p in safe_points:
assert (influence_grid[
p] == cost), f"grid type = climber_grid, p = {p}, influence_grid[p] = {influence_grid[p]}, expected cost = {cost}"

def test_air_vs_ground(self, map_data: MapData) -> None:
default_weight = 99
grid = map_data.get_air_vs_ground_grid(default_weight=default_weight)
Expand Down

0 comments on commit 6ec010d

Please sign in to comment.