python - 尝试为星球大战机器人创建一个热图,显示哪支军队最具影响力

标签 python python-2.7 pygame pydev

我正在尝试为 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/

相关文章:

python - 通过套接字连接将图像从客户端发送到服务器

python - 如何创建一个类似范围的函数,其中参数由输入数据控制

python pygame 背景图像随屏幕大小变化

python - 长时间闲置后pygame混音器音乐ogg播放失真

Python,如果它已经运行了最后 5 分钟,则函数退出

python - 如何使用 sys.path.append 在 python 中导入文件?

python - Django 告诉最后一个项目是否具有双重排序中的某些属性(order_by)

python - 如何根据计数器标记输出?

python - Python 3 中的 writerow 总是在原始行之间写一个空行,Python2 工作得很好。为什么?

python - Python 2.7 中基于基数的求和