原神 用正态分布分析 满命五星平均需要多少抽 您所在的位置:网站首页 马尔科姆布里纳 原神 用正态分布分析 满命五星平均需要多少抽

原神 用正态分布分析 满命五星平均需要多少抽

#原神 用正态分布分析 满命五星平均需要多少抽| 来源: 网络整理| 查看: 265

先说结论吧

满命一个角色 50%的概率需要654抽 最多也就需要1000左右正态分布的拟合图像

    那么我们这个是怎么算的呢

    我在玩一个抽卡模拟器的时候, 我发现这个满命的抽卡的次数好像是呈现一个正态分布的模式 

    这个还不太明显 所以我就去找了对应的分析

使用模拟器抽卡

    然后找到了这位 一棵平衡树 up文章 他的文章中描述了原神抽卡的概率分析 于是我利用他的抽卡概率分析 写出了模拟抽卡的函数并进行了测试 发现模型规律一致 故进行下一步

我的90抽出金色分析 一棵平衡树的分析

    有了抽卡概率的模型 接下来就方便了 我通过代码重复了10000次抽卡的模拟 每次将一个卡池的up角色抽到满命 并统计他的出现此次数 得到了一个频数直方图 认证了我的想法 确实他是一个正态分布模型 或者说像 (如果各位大佬有自己的想法可以给我说 我好久没看概率论了 临时翻出来补了一下 也不是数学专业的 处理有问题的话还请见谅)

频数直方图

正太分布检验

Kolmogorov-Smirnov检验 alpha=0.05 通过 H0=1 Lilliefors检验 同样通过

故基本认为该数据呈现正态分布

正态概率图拟合的结果非常标准

    然后我们画出它的概率密度函数 这个图的解释就非常的便于理解  正如图像的所写的 下面是次数 左边是以这个次数之前完成满命的概率

    50%的概率是能在654抽之前完成满命的概率 783 抽的时候大概就有8成以上的概率 1000及以上抽出的情况在我的模型里面10000次中不会超过0.1%

概率密度函数783抽能达到87%

使用的是matlab R2018a 版本

下面是matlab的代码部分可以自己拿去试试

主程序

%% 参数位

clear;clc;

times = 90;                     % 小保底的次数

five_star_prob = 0.006;         % 五星的基础概率

up_pro_five = 0.5;              % 5星抽出对应up角色的概率

all_up_charator_unmbers = 7;    % 需要抽多少个五星角色 满命7个

start_up_charator_prob = 73;        % 概率开始变动的位置

linear_variable_parameter = 0.06;   % 线性概率变化参数

%% 标志位

is_up_flag = 0;                 % 此次是否是大保底

up_charator_counter = 0;    % up 五星计数

other_charator_counter = 0; % 其他五星角色的 计数

%% 统计

total = 0;                  % 统计抽满命所需的次数

counters = zeros(10000, 1);   % 统计100次

for i = 1:length(counters)

    

%     if(i == 33) 

%         fprintf("test");

%     end

    

    % 抽出角色次数 14 次是最坏情况每次都大保底

    for time = 1:all_up_charator_unmbers * 2

        if(up_charator_counter >= 7) 

            %         将参数重置

            fprintf("其他角色的数量 %d == up \n up角色%d\n", other_charator_counter, up_charator_counter);

            fprintf("总共用抽次数 %d", total);

            

            counters(i) = total;        % 记录当前总抽数

            

            total = 0;                  % 总数置零

            up_charator_counter = 0;    % 获得up角色置零

            other_charator_counter = 0; % 获得其他五星角色置零

            is_up_flag = 0;             % up标志位 置零

            break; % 本次循环结束 

        end

    %     抽up角色

        for item = 1:times

    %         生成随机数

            rand_number = rand();

    %         抽卡次数小于 73(start_up_charator_prob)次时

            if(item = up_pro_five || is_up_flag == 1) 

                       printf("superise mother fucker");

    %                    up角色数量加1

                       up_charator_counter = up_charator_counter + 1;

                       is_up_flag = 0; % 改写标志位

                   else

    %                    小保底的情况

                       is_up_flag = 1; % 改写标志位

                       other_charator_counter = other_charator_counter + 1;

                   end

                total = total + item;

                break;

            end

        end

    end 

end

counters(counters==0)=[];       % 剔除其中的脏数据 可能是矩阵转换的时候出现的

nor_distri_cal_fun(counters);

counters(counters>=1000)=[]; 

% 正态分布检验

normplot(counters)

alpha=0.05;

[mu,sigma]=normfit(counters);

p1=normcdf(counters,mu,sigma);

[H1,s1]=kstest(counters,[counters,p1],alpha);

if H1==0

    disp('该数据服从正态分布。')

end

alpha=0.05;

H1=lillietest (counters,alpha)

chi2gof(counters)

计算概率的函数 prob_change_fun.m

function [compute_prob] = prob_change_fun(five_star_prob, linear_variable_parameter, start_up_charator_prob, time)

%prob_change_fun 计算 开始递增后的概率

%   当前使用概率的公式是 2021年4月 一棵平衡树 进行修订后的公式

    compute_prob = five_star_prob + linear_variable_parameter * (time - start_up_charator_prob);

end

绘制函数

function [pd] = nor_distri_cal_fun(counters)

%nor_distri_cal_fun 绘制函数

%   绘制概率函数和概率密度函数 同时绘制频数直方图

    suptitle('原神满命抽卡次数情况拟合');

    subplot(1,2,1);

    title('正态分布概率拟合')

    xlabel("抽卡次数/抽")

    ylabel("该抽完成满命概率")

    hist(counters, 200)

    hold on;

    x = counters;

    pd = fitdist(x,'Normal');

    x_values = 50:1:500;

    y = pdf(pd,x_values);

    plot(x_values,y * length(counters),'LineWidth',2, "Color", "red")

    p = cdf(pd,x_values);

    subplot(1,2,2);

    plot(x_values,p, "Color", "green", "LineWidth", 2)

    title('累计分布函数')

    ylabel("该次数完成满命概率")

    xlabel("抽卡次数/抽")

end



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有