qq三国吧 关注:995,373贴子:59,328,879

带你计算全五天狼的数学期望成本

只看楼主收藏回复

先说一下一些前提条件,不一定是正确的,但没有这些条件的话,成本计算就无从谈起了:
1、1~4级技能的升级概率分别是50%,35%,20%,10%
2、每吃一只材料,最多同时升级2个技能,即使材料拥有3个主技能
3、吃全五天狼的最佳方案是,如果有3个或以上的技能没有满5级,那优先选择拥有3个主技能的材料
4、按桃园的物价来算,带天狼爪的3技能、2技能、1技能材料价格分别是11.5E、9.5E、8.5E,不带天狼爪的3技能、2技能、1技能材料价格分别是9.5E、7.5E、6E。完美满级四技能坯子天狼的价格为17.5E,币价为254。
好,有了以上前提条件,很容易计算5554天狼(5级狼爪)升到5555天狼的数学期望成本,就是需要花费10只单主技能材料狼,按照桃园目前非天狼爪的单主技能材料天狼的价格(6E)来算,需要花费60E * 250 = 1.5W。
问题是,楼主思考了很久,前面的技能升级,好像没法用传统的数学方法去解决,因为限制条件太多,比如每次最多升级2个技能这样的限制条件。
那怎么计算全五天狼的数学期望成本呢?答案是可以写代码来模拟
楼主比较熟悉python,就用python来写。先写一个天狼模拟器,定义一个SkyWolf(天狼)类型,它里面有upgrade_skill方法,返回要吃的下一只材料的主技能个数和价格。upgrade_skill方法也是我们的核心代码了:

本文开头所述的前提条件,在这段代码里面基本都有体现,也写了比较详细的代码注释,有点代码基础的同学应该不难看懂。
好了,有了这段核心代码,我们来模拟一只天狼从1111到5555的全过程:

运行代码,控制台输出:

看起来没啥问题!接下来就是,运行10万次模拟全五天狼的升级过程,算出成本价,计算平均值(数学期望)了:

运行程序,控制台输出:

全五天狼的数学期望成本,约为8.9万!
我们稍微改一下程序,就可以得到5554天狼的期望成本(不区分是4级天狼爪还是其他),约为7.3万:

以上输出的消耗3技能、2技能、1技能材料的只数,可以适用到其他天品灵兽上,至于期望成本,就要看各区的材料价格、坯子价格、币价了。
楼主把代码贴在这里,感兴趣的可以自取。
import random
class SkyWolf(object):
def __init__(self):
self.skills = [1, 1, 1, 1] # 初始技能等级
def upgrade_skill(self):
"""
吃一只材料天狼,升级技能
:return: 吃掉的材料天狼的主技能数量、价格
"""
material_skill_count = 0 # 材料天狼的主技能数量
material_skill_index = [] # 材料天狼的主技能,对应的初始技能的下标
for index, skill_level in enumerate(self.skills):
if skill_level < 5:
if material_skill_count < 3: # 材料天狼最多3个主技能
material_skill_count += 1
material_skill_index.append(index)
material_skill_index = random.sample(material_skill_index, material_skill_count) # 材料天狼随机挑选技能
success_count = 0 # 成功升级的技能数量
for index in material_skill_index:
skill_level = self.skills[index] # 下标对应的技能等级
success_rate = {1: 0.5, 2: 0.35, 3: 0.2, 4: 0.1}[skill_level] # 技能等级 -> 升级概率
if random.random() < success_rate: # 模拟升级概率
self.skills[index] += 1
success_count += 1
if success_count >= 2: # 每次最多成功升级两个技能
break
if 0 in material_skill_index: # 带爪
if material_skill_count == 3: # 带爪3技能
return material_skill_count, 11.5
elif material_skill_count == 2: # 带爪2技能
return material_skill_count, 9
elif material_skill_count == 1: # 带爪1技能
return material_skill_count, 8
else: # 不带爪
if material_skill_count == 3: # 不带爪3技能
return material_skill_count, 9.5
elif material_skill_count == 2: # 不带爪2技能
return material_skill_count, 7
elif material_skill_count == 1: # 不带爪1技能
return material_skill_count, 6
@property
def complete(self):
for skill_level in self.skills:
if skill_level < 5:
return False
return True
def main():
total = 100000
materials = []
total_price = 0
for _ in range(total):
sky_wolf = SkyWolf()
# print('初始化天狼,技能等级:{}'.format(sky_wolf.skills))
while not sky_wolf.complete:
material_skill_count, price = sky_wolf.upgrade_skill()
# print('吃了{}技能材料狼,技能等级:{}'.format(material_skill_count, sky_wolf.skills))
materials.append(material_skill_count)
total_price += price
_li = total, materials.count(3) / total, materials.count(2) / total, materials.count(1) / total, total_price / total
print('升级{}只全五天狼,平均消耗3技能天狼{}只,2技能天狼{}只,1技能天狼{}只,花费{}E'.format(*_li))
expected_cost = ((total_price / total) + 17.5) * 250
print('全五天狼期望成本:{}'.format(expected_cost))
# sky_wolf = SkyWolf()
#
# print('初始化天狼,技能等级:{}'.format(sky_wolf.skills))
#
# while not sky_wolf.complete:
# material_skill_count = sky_wolf.upgrade_skill()
# print('吃了{}技能材料狼,技能等级:{}'.format(material_skill_count, sky_wolf.skills))
if __name__ == '__main__':
main()


IP属地:浙江1楼2023-03-22 00:14回复
    最后贴的代码,手机上看有点乱,感兴趣的可以在电脑上用网页打开试试


    IP属地:浙江2楼2023-03-22 00:20
    回复
      2026-02-11 08:03:37
      广告
      不感兴趣
      开通SVIP免广告
      当然了,实际花费的成本服从正态分布,而且方差会比较大,仅供参考


      IP属地:浙江来自iPhone客户端3楼2023-03-22 00:31
      收起回复


        IP属地:浙江来自Android客户端4楼2023-03-22 06:24
        回复
          牛逼


          IP属地:辽宁来自iPhone客户端5楼2023-03-22 06:27
          回复
            收藏了同理可以计算其他天品的价格


            IP属地:陕西来自iPhone客户端7楼2023-03-22 08:15
            回复
              可以的 或许对三国目前灵兽有深远的意义


              IP属地:广东来自Android客户端8楼2023-03-22 08:23
              回复
                顶级实用好帖必须加精


                IP属地:上海来自iPhone客户端12楼2023-03-22 10:04
                回复
                  2026-02-11 07:57:37
                  广告
                  不感兴趣
                  开通SVIP免广告
                  牛逼


                  IP属地:广东来自iPhone客户端13楼2023-03-22 11:48
                  回复
                    你这么牛逼的?


                    IP属地:广西来自iPhone客户端14楼2023-03-22 12:27
                    回复


                      IP属地:浙江来自Android客户端15楼2023-03-22 12:53
                      回复
                        问俩问题:
                        1、每次最多只能升俩技能是吗?我吃灵兽技能是去年了,印象有些错乱。
                        2、最佳方案是3这样的原因是啥?
                        最后说一下,skywolf是不是稍微有些逆天...


                        IP属地:北京来自Android客户端16楼2023-03-22 13:02
                        收起回复
                          真的秀


                          IP属地:重庆17楼2023-03-22 15:18
                          回复
                            你这么算的话,相当于每一个技能升级都是独立事件。


                            IP属地:广东18楼2023-03-22 15:48
                            收起回复
                              2026-02-11 07:51:37
                              广告
                              不感兴趣
                              开通SVIP免广告
                              截止2023年,灵兽技能球升级概率依然无变动。
                              遵循@ bea 之前展示的数据情况:【数据贴】灵兽变异几率、技能球升级几率...
                              ——————
                              因此,正如楼主所撰写的相关代码,
                              并结合本帖16楼的探讨内容,
                              只要方法得当,平均10只狼爪材料就可以吃出一个4级狼爪的天狼。
                              再巧妙一点,【狼爪、震慑】/【狼爪,兽性】这样搭配着吃,
                              一个4级狼爪、3级震慑、3级兽性的天狼,就出炉啦。
                              ——————
                              然后,再回过头来,用【高爪、震慑】/【高爪、兽性】的材料吃高爪。
                              平均10只高爪材料,再加上之前那10只狼爪材料,
                              平均共计20只天狼,
                              就可以缔造一个4433以上的天狼啦。
                              ——————
                              我帖子中已经卖出去的那只天狼,就这么来的


                              IP属地:陕西来自iPhone客户端19楼2023-03-25 19:28
                              收起回复