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

2024-05-19 17:03:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图为一个行星机器人创建一个热图,它能显示出一颗行星受到的影响。 初始映射如下:http://imgur.com/a/rPVnl#0

理想情况下,红色行星的值应为-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的范围

^{pr2}$

数值最终在0和1之间,但平均值是0.245?(实际值也在0.019到1.019之间)。在


Tags: 代码inforifvalue行星num平均值
2条回答
for p in foo:
    ...
    ...
    for q in bar:
        ...
        if q != p:
            q_value = some_value / another_value
            own_value = own_value + q_value

为粗俗的简化道歉。假设foo[1, 2, 3, 4, 5],条是{}。在

第一次通过,p1q1,所以q==p。接下来,q5,现在q!=pown_value累加q_value,我假设它是一个小于1的正数。在

但第二次通过时,p是{}。q1,所以q!=p,所以{}增加了一的分数。然后q5,所以q!=p仍然,所以{}又增加了相同的分数。这就是问题所在:(some_value / another_value) + (some_value / another_value)打破了-1比1的比例。有时得到7.23,因为这是q不等于p的次数。在

里面什么都没有

^{pr2}$

关心规范化for x in foo的构造-仅for q in bar。在

我已经解决了我的问题,这就是解决方案。在

#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

相关问题 更多 >