我正在尝试为 Planetwars 机器人创建一个热图,以指示行星受到的影响。 初始 map 如下所示:/image/VP0Fw.jpg
理想情况下,红色行星的值为 -1,蓝色行星的值为 1,标记为 1 的行星的值为 0。(或者 0 到 1,平均值为 0.5 即可)
我的初始分析代码如下,但它输出的结果在 0.13 到 7.23 之间。
for p in gameinfo.planets: #gameinfo.planets returns {pid:planet_object}
planet = gameinfo.planets[p]
own_value = 1
for q in gameinfo.my_planets.values():
if q != planet:
q_value = q.num_ships / planet.distance_to(q)
own_value = own_value + q_value
enemy_value = 1
for q in gameinfo.enemy_planets.values():
if q != planet:
q_value = q.num_ships / planet.distance_to(q)
enemy_value = enemy_value + q_value
self.heatmap[p] = own_value/enemy_value
我还尝试添加一些代码来限制从 0 到 1 的范围
highest = self.heatmap.keys()[0]
lowest = self.heatmap.keys()[0]
for p in gameinfo.planets.keys():
if self.heatmap[p] > highest:
highest = self.heatmap[p]
elif self.heatmap[p] < lowest:
lowest = self.heatmap[p]
map_range = highest-lowest
for p in gameinfo.planets.keys():
self.heatmap[p] = self.heatmap[p]/map_range
self.heatmap_mean = sum(self.heatmap.values(), 0.0) / len(self.heatmap)
最终值介于 0 和 1 之间,但平均值是 0.245? (实际上值的范围是 0.019 到 1.019)。
最佳答案
我已经解决了我的问题,这就是解决方案的样子。
#HEATMAP ANALYSIS
for p in gameinfo.planets:
ave_self_value = 0
for q in gameinfo.my_planets:
if q != p:
ave_self_value = ave_self_value + (self.planet_distances[p][q] * gameinfo.planets[q].num_ships / self.own_strength)
ave_enemy_value = 0
for q in gameinfo.enemy_planets:
if q != p:
ave_enemy_value = ave_enemy_value + (self.planet_distances[p][q] * gameinfo.planets[q].num_ships / self.enemy_strength)
self.heatmap[p] = ave_enemy_value - ave_self_value
hmin, hmax = min(self.heatmap.values()), max(self.heatmap.values())
for h in self.heatmap.keys():
self.heatmap[h] = 2 * (self.heatmap[h] - hmin) / (hmax - hmin) - 1
self.heatmap_mean = sum(self.heatmap.values(), 0.0) / len(self.heatmap)
#END HEATMAP ANALYSIS
关于python - 尝试为星球大战机器人创建一个热图,显示哪支军队最具影响力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10309856/