查看: 954|回复: 4
打印 上一主题 下一主题

[交流] 蒙特卡洛的方法计算凌波风云再会直接击倒全部人物单位的可能性

[复制链接]
跳转到指定楼层
楼主
发表于 2023-4-17 03:47:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自:美国
我们假设我们对面的人物单位为
辅助 15000血,被打伤害2500,
封系 17000血,被打伤害3500,
封系 17000血,被打伤害3000,
输出 13000血,被打伤害4000,
输出 13000血,被打伤害4000,
五个宝宝8000血,被攻击伤害5000


假设所有人物速度高于召唤兽,凌波点选输出攻击,如果倒地,点选目标随机,飞机、惊涛怒对6,4目标造成100%伤害伤害,浪涌对3目标造成70%伤害,裂石对一个目标造成100%,断岳造成180%,天崩造成270%,输出有70%到130%的随机波动

加入血量可能不满和可能有盾之类的效应全部抵消,认为他们都是满血的,
那么在100万次测试中,出现全部单位击倒的情况为      0
除了辅助以外的人全部被击倒的情况 为   5
除了辅助和耐封系,其他人全部被击倒的次数    55
双输出倒地的情况 3842
点选目标倒地的情况 573914

综上所述,风云再会,像谛听以后完全改变战局的情况,不太可能出现,甚至而言,压倒双输出的情况都非常难以出现。其中点选目标倒地的概率仅仅为57.3%,非常不稳定。凌波想依赖风云再会完成完全取胜几乎不太可能。

其中传说中七次飞机的概率为42亿分之一,将这个福分拿去抽强力球,足以买下整个网易。

下面为代码,有BUG可以提出
import random
shanghai = [4000,3500,3000,2500,4000,5000,5000,5000,5000,5000]
def lieshi(xueliang,order):
    bodong = random.uniform(0.7, 1.3)
    xueliang[order[0]] -=  xueliang[order[0]]-shanghai[order[0]]*bodong
    return xueliang


def duanyue(xueliang,order):
    bodong = [random.uniform(0.7,1.3) for _ in range(2)]
    xueliang[order[0]] = xueliang[order[0]]-shanghai[order[0]]*bodong[0]-shanghai[order[0]]*bodong[1]*0.7
    return xueliang


def tianbeng(xueliang,order):
    bodong = [random.uniform(0.7,1.3) for _ in range(3)]
    xueliang[order[0]] = xueliang[order[0]]-shanghai[order[0]]*bodong[0]-shanghai[order[0]]*bodong[1]*0.9-shanghai[order[0]]*bodong[2]*0.7
    return xueliang


def langyong(xueliang,order):
    bodong = [random.uniform(0.7,1.3) for _ in range(3)]
    for i in range(min(3,len(order))):
        xueliang[order] -= shanghai[order]*bodong*0.7
    return xueliang


def jingtao(xueliang,order):
    bodong = [random.uniform(0.7,1.3) for _ in range(4)]
    for i in range(min(4,len(order))):
        xueliang[order] -= shanghai[order]*bodong
    return xueliang


def fanjiang(xueliang,order):
    bodong = [random.uniform(0.7,1.3) for _ in range(6)]
    for i in range(min(6,len(order))):
        xueliang[order] -= shanghai[order]*bodong
    return xueliang


def gongji(xueliang,zhaoshu):
    order = []
    for danwei,xue in enumerate(xueliang):
        if xue>0:
            order.append(danwei)
            
    if len(order) == 0:
        return xueliang
    if order[0]!=0 and len(order)>1:
        index = random.randint(1,len(order)-1)
        num = order[index]
        order.pop(index)
        order.insert(0,num)
   
    if zhaoshu == 1:
        return lieshi(xueliang,order)
    if zhaoshu == 2:
        return duanyue(xueliang,order)
    if zhaoshu == 3:
        return tianbeng(xueliang,order)
    if zhaoshu == 4:
        return langyong(xueliang,order)
    if zhaoshu == 5:
        return jingtao(xueliang,order)
    if zhaoshu == 6:
        return fanjiang(xueliang,order)
   
def fengyunzaihui():
    xueliang = [13000,17000,17000,15000,13000,8000,8000,8000,8000,8000]
    dianshu = 0
    while dianshu<=6:
        zhaoshu = random.randint(1,6)
        xueliang = gongji(xueliang,zhaoshu)
        dianshu += random.randint(1,5)
    for i in [0]:
        if xueliang>0:
            return False
    return True



res = 0
for i in range(1000000):
    if fengyunzaihui():
        res+=1


收藏收藏 分享淘帖 支持支持 反对反对 赞赞(0)
【论坛近期活动汇总】
回复

使用道具 举报

沙发
 楼主| 发表于 2023-4-17 04:04:44 | 只看该作者 来自:美国
我们还可以考虑包含暴击的情况,如果加入20%的暴击率,那么情况会变成:
加入血量可能不满和可能有盾之类的效应全部抵消,认为他们都是满血的,
那么在100万次测试中,出现全部单位击倒的情况为      33
除了辅助以外的人全部被击倒的情况 为   194
除了辅助和耐封系,其他人全部被击倒的次数    1188
双输出倒地的情况 18204
点选目标倒地的情况 659715

如果点选目标是辅助,那么击倒他的概率为320905 (32%)
回复 支持 反对

使用道具 举报

3
发表于 2023-4-17 11:00:03 | 只看该作者 来自:美国
Better finish your PhD first. If you have, find a tenured job first.
回复 支持 反对

使用道具 举报

4
 楼主| 发表于 2023-4-17 21:11:42 | 只看该作者 来自:美国
南高师 发表于 2023-4-17 11:00 美国
Better finish your PhD first. If you have, find a tenured job first.

回复 支持 反对

使用道具 举报

5
发表于 2023-4-17 21:20:19 | 只看该作者 来自:山东
还可以这样
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则