Java模拟马尔可夫链类问题的验证

马尔可夫链(Markov Chain, MC)是概率论数理统计中具有马尔可夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process) [1-2]。适用于连续指数集的马尔可夫链被称为马尔可夫过程(Markov process),但有时也被视为马尔可夫链的子集,即连续时间马尔可夫链(Continuous-Time MC, CTMC),与离散时间马尔可夫链(Discrete-Time MC, DTMC)相对应,因此马尔可夫链是一个较为宽泛的概念 [2]。

马尔可夫链可通过转移矩阵和转移图定义,除马尔可夫性外,马尔可夫链可能具有不可约性、常返性、周期性和遍历性。一个不可约和正常返的马尔可夫链是严格平稳的马尔可夫链,拥有唯一的平稳分布。遍历马尔可夫链(ergodic MC)的极限分布收敛于其平稳分布 [1]。

马尔可夫链可被应用于蒙特卡罗方法中,形成马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC) [2-3],也被用于动力系统、化学反应、排队论、市场行为和信息检索的数学建模。此外作为结构最简单的马尔可夫模型(Markov model),一些机器学习算法,例如隐马尔可夫模型(Hidden Markov Model, HMM)、马尔可夫随机场(Markov Random Field, MRF)和马尔可夫决策过程(Markov decision process, MDP)以马尔可夫链为理论基础 [4]。

马尔可夫链的命名来自俄国数学家安德雷·马尔可夫(Андрей Андреевич Марков)以纪念其首次提出马尔可夫链和对其收敛性质所做的研究 [5]。

问题概述 

注意:此图片引用了b站up主的视频 视频源地址视频源地址icon-default.png?t=N7T8https://www.bilibili.com/video/BV1ir421F7nq?vd_source=0517d752c26aa2e7b4afc5fdf2257813

主要思路:随机生成大量数据然后进行分析

Java代码部分

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class 暴击 {
    public static void main(String[] args) {
        Random random = new Random();
        List<Integer> integers = new ArrayList<>();
        for (int i = 0; i < 99999999; i++) {
            int n = random.nextInt(3) + 1;
            if (n == 2) {
                n = 1;
            } else if (n == 3) {
                n = 2;
            }
            integers.add(n);
        }
        int n = 0;//设置计数器
        for (int i = 0; i < integers.size(); i++) {
            if (integers.get(i) == 1) {
                n = n + 1;
            }
            if (integers.get(i) == 2) {
                n=0;
            }
            if (n == 3) {
                n = 0;
                integers.set(i, 2);
            }
        }
        double m = 0;
        for (int i : integers) {
            if (i == 2) {
                m = m + 1;
            }
        }
        System.out.println(m/integers.size());
    }
}

实验过程

通过随机生成1到3数字,用来模拟33.333%的暴击率。

将2全部改为1,3改为2,用1代表不暴击,用2代表暴击。

将其放入ArrayList集合中,然后遍历集合。

设置一个计数器初始值为0,如果遍历到的数为1则计数器+1,

如果遍历到的数字为2,则对计数器清零

如果计数器为3,则代表连续3次不暴击,将此时遍历到的数据改为2(3次必定暴击)

再次遍历集合,记录2出现的次数,并除以元素的数量求出暴击率

与视频作者结论一致

 

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab是一个强大的数值计算和数据分析工具,可以用于解决各种创新问题,其中包括蒙特卡洛随机模拟马尔可夫链相关的问题。 蒙特卡洛随机模拟是一种基于随机抽样和统计分析的方法,用于求解概率和统计问题。在Matlab中,我们可以通过生成大量的随机数来模拟现实世界中的不确定性和随机性,例如金融风险评估、投资组合优化、工程可靠性分析等。通过使用Matlab的随机数生成函数,我们可以生成服从不同分布的随机数,然后利用这些随机数进行模拟和计算。此外,Matlab还提供了丰富的统计函数和图形化工具,可以帮助我们对随机模拟结果进行分析和可视化。 马尔可夫链是一种离散状态的随机过程,其中当前状态的概率分布只依赖于前一时刻的状态。在Matlab中,我们可以使用矩阵运算来表示和计算马尔可夫链的状态转移,并使用统计工具和图形化函数来分析和可视化链的性质和行为。通过构建和分析马尔可夫链模型,我们可以模拟和预测一些特定领域的事件,例如天气变化、金融市场波动等。此外,Matlab还提供了一些常用的马尔可夫链模型,如隐马尔可夫模型和马尔可夫切换模型,可以帮助我们解决一些复杂的实际问题。 综上所述,Matlab提供了丰富的工具和函数,可以应用于蒙特卡洛随机模拟马尔可夫链的创新问题。无论是求解概率和统计问题,还是建模和预测特定领域的事件,Matlab都能提供强大的支持,并帮助我们解决实际问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值