简单用代码计算了下新活动存活的概率
本帖最后由 469MAPabu 于 2025-3-5 23:07 编辑期待已久的新活动规则终于发布了
对于发帖困难户而言不用发帖真是太好了
初看了下规则,感觉挺难活的,出于对最终存活概率的好奇,利用AI生成的代码简单计算了下概率,居然可以达到0.56!??比心里预期着实高了不少。
其实冷静下想想也是,过载的情况其实挺难触发的,1/3概率可以选到人最多的不扣血,1/3概率选到15,还有1/3选到25,只要6天扣15,1天不扣就可以存活,好像也不是很难(才怪)
所以战略就是随大流,混几天不扣血的日子,跟着大多数总是好的~
以下是代码以及预设的条件,有兴趣的可以进一步优化一下,把场地的随机性也考虑进去哟~
预设条件:
1、假设场地一直是【对战广场】无特殊规则。
2、玩家为1000人,玩家随机选择没有倾向
3、模拟次数为10000次
以下是代码(感谢kimi的贡献,AI真是太好用了)import numpy as np
def simulate():
days = 7 # 活动天数
initial_health = 100 # 初始血量
players = 1000 # 玩家人数
simulations = 10000 # 模拟次数
survive_count = 0
for _ in range(simulations):
health = initial_health
for _ in range(days):
# 每个玩家随机选择一个属性
choices = np.random.choice(['grass', 'fire', 'water'], size=players)
# 统计每个属性的数量
grass_count = np.sum(choices == 'grass')
fire_count = np.sum(choices == 'fire')
water_count = np.sum(choices == 'water')
total = players
# 确定场地属性
max_count = max(grass_count, fire_count, water_count)
if max_count >= 0.8 * total:
# 触发属性过载
if grass_count == max_count:
field_attribute = 'grass'
elif fire_count == max_count:
field_attribute = 'fire'
else:
field_attribute = 'water'
# 所有玩家扣血
player_choice = np.random.choice(['grass', 'fire', 'water'])
if player_choice == field_attribute:
health -= 15
elif (player_choice == 'grass' and field_attribute == 'water') or \
(player_choice == 'fire' and field_attribute == 'grass') or \
(player_choice == 'water' and field_attribute == 'fire'):
health -= 15
else:
health -= 25
else:
# 选择数量最多的属性
if grass_count == max_count:
field_attribute = 'grass'
elif fire_count == max_count:
field_attribute = 'fire'
else:
field_attribute = 'water'
# 随机选择一个玩家的属性
player_choice = np.random.choice(['grass', 'fire', 'water'])
if player_choice == field_attribute:
# 不扣血
pass
elif (player_choice == 'grass' and field_attribute == 'water') or \
(player_choice == 'fire' and field_attribute == 'grass') or \
(player_choice == 'water' and field_attribute == 'fire'):
# 克制场地属性
health -= 15
else:
# 被场地属性克制
health -= 25
# 检查是否被淘汰
if health <= 0:
break
if health > 0:
survive_count += 1
survival_probability = survive_count / simulations
return survival_probability
# 运行模拟
probability = simulate()
print(f"存活概率: {probability:.4f}")
最后再叠个甲,如果计算有错误,麻烦指正~如果看完感觉有用,别忘了留个追随~ 活动的随机成分非常大,每天的场地也是随机的,而且我会开启作者可见模式,感觉某一天还是有可能直接过载的,其实很难预测结果了 大概一半概率咩,感觉脸黑的我不会中{:6_166:} 参考上一次 锯下七行
说不准也有个投票预期
不过比起宝可梦,由于损失的自己血量+三种属性切换,更像是猜拳版的黑暗游戏 总之还是看脸的游戏,希望自己能够苟到最后吧...:'( 这次的活动随机性比较高惹,总之还是看运气吧{:6_169:} 比二分之一概率多一点点咩(´×ω×`)不过俺这个非酋……要遭咯 猜拳我只会选择一种,就按顺序轮流选吧。 放弃思考,相信运气(真的有运气吗) 惹怎麼大家寫程式都這麼厲害 随大流,混几天不扣血的日子,跟着大多数总是好的这句话挺有道理的,毕竟超载的情况还是很少的,但是如何去预知当天的场地属性就很难说惹
:'(想随大流但是到时候是不可见模式噢,感觉只能随缘了 希望这次能活到最后吧 一切随缘,希望不要含泪拿下参与奖惹,每天的抽奖都是四等奖,我觉得是时候时来运转了 我是超级非酋,不是100%的概率都不行惹,鼠定了 氮素毕竟素玩家选择不是机器选,感觉最终肯定会有偏差惹 我是从上往下刷的58帖子,存活概率从0.9-0.8-这篇的0.5+,有点看晕古七了,不知道哪个更准一点@@,算了活不活都是命TVT 感谢分析,活动随机性还是挺大的,随大流应该是比较稳妥的策略 其实看规则来说跟着大部队走一般是没有问题的,只要一次没扣克制分的话大概运气好点就能活;P 以前这类活动好像还从来没出现过80%的人挤到一起的情况,估计这次也不会出现吧