我正在尝试训练一个 NEAT 算法来玩一个名为“curvefever”的简单游戏。我能够创建 pygame 版本的 curvefever,现在我想训练 AI 来玩它。因此,AI 必须学会避开障碍物:围绕游戏的边界并跟踪每个玩家留下的痕迹,就像在 Snake 中一样。
目前我正在通过以下方式执行此操作:
问题是这很慢!运行 'python -m cProfile -s cumtime ai.py' 我认为是检测障碍物导致脚本变慢,占总运行时间的 50% 左右。
请参阅下面我如何创建视线的一些代码:
posx = 玩家的 x 位置
posy = 玩家的 y 位置
dir = 玩家前进的方向
dangle = 是视线之间的度数间距
角度 = 视线的总范围(以度为单位)
def create_lines_of_sight(posx, posy, dir, dangle, angle, length):
dirs = [xdir for xdir in np.ceil(np.arange(dir-angle,dir+angle,dangle))]
d_posx = np.cos(np.deg2rad(dir))
d_posy = np.sin(np.deg2rad(dir))
return list(map(functools.partial(f_lrects,posx,posy,length), dirs))
def create_rects(posx, posy, d_posx, d_posy, i):
return f_rect(posx+i*d_posx,posy+i*d_posy,1,1,0,curvefever.WHITE)
f_create_rect …Run Code Online (Sandbox Code Playgroud) 我试图用最接近的值填充二维 xarray (lat, lon) 中的 NaN。
我有以下示例代码,其中应用了陆地-海洋掩模。然后我想用它们各自最接近的陆地点值填充海洋点。
我知道 bfill 和 ffill 会按照这些思路做一些事情,但不完全是我想要的。
理想情况下,所有海洋点应在最后填充。
有任何想法吗?
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import regionmask
def mask_ocean(arr, maskValue=np.nan):
land = regionmask.defined_regions.natural_earth.land_110.mask(arr)
masked = xr.where(land==0, arr, maskValue)
return masked
# Create sample data
lon = np.arange(129.4, 153.75+0.05, 0.25)
lat = np.arange(-43.75, -10.1+0.05, 0.25)
data = 10 * np.random.rand(len(lat), len(lon))
ds = xr.Dataset({"DC": (["lat", "lon"], data)}, coords={"lon": lon,"lat": lat})
#< Mask ocean
ds = mask_ocean(ds) …Run Code Online (Sandbox Code Playgroud)