一端有吸收壁的随机游动问题

本文探讨了一个马尔科夫问题:在数轴上,从点 A 开始,每次游动距离为 1,有概率 p 往左,1-p 往右,0 是吸收壁。主要分析了点 A 能游动 n 步的概率以及游动 n 步后位移总和的条件分布。利用括号匹配问题和 Catalan 数进行概率计算,并涉及概率、随机游动和马尔科夫过程的概念。
摘要由CSDN通过智能技术生成

一端有吸收壁的随机游动问题

问题

  一个马尔科夫题

  数轴上 1 的位置一个点 A,可左右随机游动。每次游动距离为 1,往左游动的概率是 p,往右游动的概率是 1-p;0 是吸收壁 (游动到 0 就结束)。那么:
(1) 点 A 能游动 n n n步的概率;
(2) 游动 n n n步的条件下,游动位移总和的(条件)分布。


(1)

  令 P ( i ) P(i) P(i)表示在 2 i + 1 2i+1 2i+1步被吸收的概率,也即恰好游动 2 i + 1 2i+1 2i+1步(就结束)的概率;令 P 10 ( x ) P_{10}^{(x)} P10(x)表示从1出发的质点,经过 x x x步后被0处的吸收壁吸收的概率,显然偶数步无法从1游动到0,故
P 10 ( x ) = { 0 x = 2 i P ( i ) x = 2 i + 1 . P_{10}^{(x)}=\left\{ \begin{array}{lcl} 0 & & {x=2i} \\ P(i) & & {x=2i+1} \\ \end{array} \right.. P10(x)={0P(i)x=2ix=2i+1.   因此点 A 能游动 n n n步的概率 P { x ≥ n } P\{x \geq n\} P{xn}
P { x ≥ n } = ∑ k = n ∞ P 10 ( k ) = 1 − ∑ k = 0 n − 1 P 10 ( k ) = 1 − ∑ i = 0 ⌊ n / 2 ⌋ − 1 P ( i ) , P\{x \geq n\}=\sum_{k=n}^{\infty} P_{10}^{(k)} =1-\sum_{k=0}^{n-1} P_{10}^{(k)} = 1-\sum_{i=0}^{\lfloor n/2 \rfloor-1} P(i), P{xn}=k=nP10(k)=1k=0n1P10(k)=1i=0n/21P(i), 其中, 2 i + 1 2i+1 2i+1步被吸收的问题可以等价转换为 2 i 2i 2i步回到出发点的问题,进一步结合题中约束,可以等价转换为括号匹配问题( n n n对括号,可以并列或嵌套排列,共有多少种情况),每种情况的概率是 ( 1 − p ) i p i + 1 (1-p)^ip^{i+1} (1p)ipi+1,所有情况的总数是 Catalan数 c i = 1 i + 1 ( 2 i i ) c_i=\frac{1}{i+1}\binom{2i}{i} ci=i+11(i2i)(证明略,后面更一般的情况下会给出证明。Catalan数从 c 0 = 1 c_0=1 c0=1开始,依次为 1 , 1 , 2 , 5 , 14 , 42 , 132 , 429 , 1430 , . . . 1,1,2,5,14,42,132,429,1430,... 1,1,2,5,14,42,132,429,1430,...),故
P ( i ) = c i ( 1 − p ) i p i + 1 = ( 2 i i ) ( 1 − p ) i p i + 1 i + 1 . P(i)=c_i(1-p)^ip^{i+1}=\binom{2i}{i} \frac{(1-p)^ip^{i+1}}{i+1}. P(i)=ci(1p)ipi+1=(i2i)i+1(1p)ipi+1.

  由 Stirling公式 n ! ≈ 2 π n ( n e ) n , n!\approx\sqrt{2\pi n}(\frac{n}{\rm{e}})^n, n!2πn (en)n P ( i ) P(i) P(i)可进行如下近似
P ( i ) = ( 2 i i ) ( 1 − p ) i p i + 1 i + 1 ≈ 4 i π i ( 1 − p ) i p i + 1 i + 1 = p π ( 4 p ( 1 − p ) ) i ( i + 1 ) i . P(i)=\binom{2i}{i} \frac{(1-p)^ip^{i+1}}{i+1}\approx \frac{4^i}{\sqrt{\pi i}}\frac{(1-p)^ip^{i+1}}{i+1}=\frac{p}{\sqrt{\pi}}\frac{(4p(1-p))^i}{(i+1)\sqrt{i}}. P(i)=(i2i)i+1(1p)ipi+1πi 4ii+1(1p)ipi+1=π p(i+1)i (4p(1p))i.

(2)

  令 P i j ( k ) P_{ij}^{(k)} Pij(k)表示从 i i i点出发的质点 经过 k k k步后 游动到 j j j点的概率。本题中主要是 P 1 j ( k ) P_{1j}^{(k)} P1j(k),即从1点出发。后面的讨论都基础出发点为1,吸收壁为0的前提。
  个人理解的“游动位移”表示游动到某点距出发点的有向距离,本问题中 j j j点与出发点1间的位移即为 j − 1 j-1 j1。令 P { y = s } P\{y=s\} P{y=s}表示游动位移(用 y y y表示)等于 s ∈ Z s\in \mathbb{Z} sZ 的概率,也即从1出发游动到 s + 1 s+1 s+1 点的概率,注意本题中位移 s s s可为-1。故
P { y = s } = ∑ k = 0 ∞ P 1 , s + 1 ( k ) . P\{y=s\}=\sum_{k=0}^{\infty} P_{1,s+1}^{(k)}. P{y=s}=k=0P1,s+1(k).   进一步,令 P { y = s , x ≥ n } P\{y=s,x\geq n\} P{y=s,xn}表示至少游动 n n n步,且游动位移为 s s s的概率。则
P { y = s , x ≥ n } = ∑ k = n ∞ P 1 , s + 1 ( k ) . P\{y=s,x\geq n\}=\sum_{k=n}^{\infty} P_{1,s+1}^{(k)}. P{y=s,xn}=k=nP1,s+1(k).   故至少游动 n n n步的条件下,游动位移为 s s s的条件概率为
P { y = s ∣ x ≥ n } = P { y = s , x ≥ n } P { x ≥ n } = ∑ k = n ∞ P 1 , s + 1 ( k ) ∑ k = n ∞ P 10 ( k ) . P\{y=s | x\geq n\}=\frac{P\{y=s,x\geq n\}}{P\{x \geq n\}}=\frac{\sum_{k=n}^{\infty} P_{1,s+1}^{(k)}}{\sum_{k=n}^{\infty} P_{10}^{(k)} }. P{y=sxn}=P{xn}P{y=s,xn}=k=nP10(k)k=nP1,s+1(k).

(3)

  下面计算 P 1 j ( k ) P_{1j}^{(k)} P1j(k)——即在0处有吸收壁的情况下,质点从1出发 经过 k k k步后 (步长为1)游动到 j j j的概率。
   k k k表示步数, j − 1 j-1 j1表示分析点的位移,显然有
  ① 当 k < j − 1 k<j-1 k<j1 P 1 j ( k ) = 0 P_{1j}^{(k)}=0 P1j(k)=0
  ② 当 k k k j − 1 j-1 j1奇偶性相反, P 1 j ( k ) = 0 P_{1j}^{(k)}=0 P1j(k)=0
故只需讨论 k ≥ j − 1 k \geq j-1 kj1 k k k j − 1 j-1 j1奇偶性相同的情况。
  ③ P 10 ( k ) P_{10}^{(k)} P10(k)相当于 P 11 ( k − 1 ) ⋅ p P_{11}^{(k-1)}·p P11(k1)p,表示前 k − 1 k-1 k1步是从1到1、最后一步从1到0的概率。故只需要分析 j ≥ 1 j\geq 1 j1的情况。

  进一步分析这 k k k步,它们实际上是一系列“向左游动一步”和“向右游动一步”的排列,比如4步从1到3的一种方案, 1 → 2 , 2 → 3 , 2 ← 3 , 2 → 3 1\to 2,2\to 3,2\gets 3,2\to 3 12,23,23,23,也即 → → ← → \to \to\gets \to →→←→这个排列。更简洁的,将“向左游动一步”记作0,“向右游动一步”记作1,那么上面的排列就是 1101 1101 1101这个二进制数,而且该方案的概率是 ( 1 − p ) ( 1 − p ) p ( 1 − p ) = p ( 1 − p ) 3 (1-p)(1-p)p(1-p)=p(1-p)^3 (1p)(1p)p(1p)=p(1p)3

  更一般的, k k k步从1到 j j j的任一种可行方案中,必有 j − 1 j-1 j1步右移(不妨设 j ≥ 1 j\geq 1 j1),其余 k − ( j − 1 ) = k − j + 1 k-(j-1)=k-j+1 k(j1)=kj+1步中( k k k j − 1 j-1 j1奇偶性相同)一半左移动,一半右移,即左移 k − j + 1 2 \frac{k-j+1}{2} 2kj+1,右移 k + j − 1 2 \frac{k+j-1}{2} 2k+j1
  对应到二进制模型中,则是由 k − j + 1 2 \frac{k-j+1}{2} 2kj+1个0 和 k + j − 1 2 \frac{k+j-1}{2} 2k+j1个1排列组成,其中1比0多的 j − 1 j-1 j1个(因为位移差),1和0共 k k k个(共 k k k步位移)。也因此,每种方案的概率都是 p k − j + 1 2 ( 1 − p ) k + j − 1 2 , p^{\frac{k-j+1}{2}}(1-p)^{\frac{k+j-1}{2}}, p2kj+1(1p)2k+j1,问题转为分析有多少种可行方案。

  下面分析约束和边界条件:在0处有吸收壁,从1出发。
  若某一步刚好被吸收,则一定是向左移动的次数刚好比向右移动的次数多1的情况,且之前没有发生这样的情况,否则之前就被吸收了。
  也即,在二进制数模型中(如不可行方案0110,可行方案10110100),从左往右进行扫描,规定扫描到0(或1)则0(或1)的累计数加1,若0的累计数多于1的累计数,则认为该数是不合规的(即该数对应的移动方案必定会被吸收)。

   而前面指出,只需要分析 k k k步从1到 j j j的游动在 j ≥ 1 j\geq 1 j1的情况,故这 k k k步一直没被吸收。因此最后化简得到的模型就是:
  已知 k ≥ j − 1 ≥ 0 k \geq j-1\geq 0 kj10,且 k k k j − 1 j-1 j1奇偶性相同。对 k − j + 1 2 \frac{k-j+1}{2} 2kj+1个0 和 k + j − 1 2 \frac{k+j-1}{2} 2k+j1个1 进行排列(也即1和0共 k k k个,且1比0多的 j − 1 j-1 j1个),要求0的累计数始终 小于等于 1的累计数,问这样的排列方式共有多少种。

  总的排列方式减去不合规的排列方式,即为所求。
  总的排列方式种数为 ( k k − j + 1 2 ) , \binom{k}{\frac{k-j+1}{2}}, (2kj+1k), 下面分析不合规的排列方式的种数。
  前面指出,不合规的排列方式满足:从左到右扫描时,在某一位出现0的累计数多于1的累计数。
  更具体的,必然是扫描到一个奇数点位,称为故障点,出现 0的累计数刚好且第一次比1的累计数多一个(相等是复位到1,下个0向左移就被吸收)。进行如下构造,将该故障点及以前的0或1保留,将之后的0换作1、1换作0,这样原本的排列 a a a会映射到一个新的排列 b b b

  下面先分析一下, b b b中的0和1的个数
   a a a中本来是1比0 j − 1 j-1 j1个,扫描到故障点时,故障点及以前1比0 1个,故 a a a的故障点后面1比0 j − 1 + 1 = j j-1+1=j j1+1=j个。
  进行上面的构造后,则有排列 b b b对应故障点的后面1比0 j j j个,前面和 a a a一致,即故障点及以前1比0 1个,故 b b b中1比0 j + 1 j+1 j+1个。又0和1共 k k k个,故 b b b k − j − 1 2 \frac{k-j-1}{2} 2kj1个1 和 k + j + 1 2 \frac{k+j+1}{2} 2k+j+1个0 排列构成。
  比如,不合规数 a = a= a= 110100 0 10111,转换得到 b = b= b= 110100 0 01000,其中 a a a由 7个1 和 5个0 组成,表示一个12步从1走到3(位移为2)的方案,而映射后的 b b b 4 = 12 − 3 − 1 2 4=\frac{12-3-1}{2} 4=21231个1 和 8 = 12 + 3 + 1 2 8=\frac{12+3+1}{2} 8=212+3+1个0组成。

也即,我们构造了这样一个映射:
f : A → B , a ↦ b , f:A\to B,a\mapsto b, f:AB,ab,其中, A A A表示:由 k − j + 1 2 \frac{k-j+1}{2} 2kj+1个0 和 k + j − 1 2 \frac{k+j-1}{2} 2k+j1个1 构成的排列中,不合规的全体排列的集合;
   B B B表示:由 k + j + 1 2 \frac{k+j+1}{2} 2k+j+1个0 和 k − j − 1 2 \frac{k-j-1}{2} 2kj1个1 构成的全体排列的集合。
  应该指出的是,目前我们任一映射后的 b b b属于上面的B,还不清楚是不是满射。

  由映射的构造方式可知,上面的映射必为单射。
  下证,映射 f f f也是满射,即 ∀ b ∈ B , ∃ a ∈ A , s . t . f ( a ) = b \forall b\in B,\exists a\in A, s.t. f(a)=b bB,aA,s.t.f(a)=b。实际上只需找到这样的 a ∈ A a\in A aA即可。
  因为 b b b中1比0 j + 1 j+1 j+1个,故断言必存在一个奇数点位,满足扫描至此时,有0的累计数首次出现比1的累计数多一个。(因为 b b b中只有 k − j − 1 2 \frac{k-j-1}{2} 2kj1个1,故只能保证前k-j-1位满足:0的累计数小于等于1的累计数,下一位 k − j k-j kj必然是不合规的)
  将该点也称作故障点,将故障点前的0或1保持不变、故障点后的0换作1、1换作0得到数 a a a,则类似前面的分析(转换前的 b b b:故障点及以前0比1多 1个,故障点后0比1多 j j j个;转换后的 a a a,故障点及以前1比0少 1个,故障点后1比0多 j j j个,即总体上1比0多 j − 1 j-1 j1个),可知转换后的 a a a,是由 k − j + 1 2 \frac{k-j+1}{2} 2kj+1个0 和 k + j − 1 2 \frac{k+j-1}{2} 2k+j1个1 构成的、且存在故障点的数,即 a ∈ A a\in A aA,且由上面的构造过程可知必然满足 f ( a ) = b f(a)=b f(a)=b

  故A与B一一对应,故A、B的元素个数相同,即 c a r d ( A ) = c a r d ( B ) = ( k k − j − 1 2 ) , {\rm card}(A)={\rm card}(B)=\binom{k}{\frac{k-j-1}{2}}, card(A)=card(B)=(2kj1k),
故合规的排列方式的种数为 ( k k − j + 1 2 ) − ( k k − j − 1 2 ) = ( k k − j + 1 2 ) − − k − j + 1 2 k + j + 1 2 ⋅ ( k ) ! ( k − j + 1 2 ) ! ( k + j − 1 2 ) ! = 2 j k + j + 1 ( k k − j + 1 2 ) . \binom{k}{\frac{k-j+1}{2}}-\binom{k}{\frac{k-j-1}{2}}=\binom{k}{\frac{k-j+1}{2}}--\frac{\frac{k-j+1}{2}}{\frac{k+j+1}{2}}·\frac{(k)!}{(\frac{k-j+1}{2})!(\frac{k+j-1}{2})!}=\frac{2j}{k+j+1}\binom{k}{\frac{k-j+1}{2}}. (2kj+1k)(2kj1k)=(2kj+1k)2k+j+12kj+1(2kj+1)!(2k+j1)!(k)!=k+j+12j(2kj+1k).
特别的,当 j = 1 j=1 j=1时(令 k = 2 i k=2i k=2i),即得到Catalan数:
( 2 i i ) − ( 2 i i − 1 ) = ( 2 i ) ! i ! i ! − i i + 1 ⋅ ( 2 i ) ! i ! i ! = 1 i + 1 ( 2 i i ) . \binom{2i}{i}-\binom{2i}{i-1}=\frac{(2i)!}{i!i!}-\frac{i}{i+1}·\frac{(2i)!}{i!i!}=\frac{1}{i+1}\binom{2i}{i}. (i2i)(i12i)=i!i!(2i)!i+1ii!i!(2i)!=i+11(i2i).

在 Django 开发中,要实现大屏的一端提交问题并触发另一端问题解决流程,通常涉及以下几个步骤: 1. **前端页面设计**: - 使用 HTML 和 CSS 构建大屏用户的交互界面,包括问题输入框、提交按钮等。可以考虑使用前端框架如 Bootstrap 或者 React 来简化开发过程。 2. **前端表单提交**: - 用户在大屏上填写问题后,通过 AJAX 或 Fetch API 向 Django 后台发送异步请求。可以利用 Django REST framework 或者普通的视图函数配合 JsonResponse 来处理 POST 请求。 3. **Django 接收数据**: - 创建一个视图函数(可能是 views.py 中的一个新视图),处理来自前端的 POST 请求,验证数据并存储问题信息。 ```python from rest_framework.views import APIView from rest_framework.response import Response class SubmitProblemView(APIView): def post(self, request): data = request.data problem = ProblemModel(data) problem.save() # 发送任务处理信号或者将任务加入队列 process_problem.delay(problem.id) return Response({'message': '问题提交成功'}) ``` 4. **问题处理逻辑**: - 定义一个信号处理器,如使用 `post_save` 信号,在问题模型保存时启动处理任务。任务可以是异步的任务队列,例如 Celery、RQ 或 Django-Q。 ```python from django.db.models.signals import post_save from asgiref.sync import async_to_sync from channels.layers import get_channel_layer from .tasks import process_problem def handle_new_problem(sender, instance, created, *args, **kwargs): if created: channel_layer = get_channel_layer() async_to_sync(channel_layer.group_send)( "problem_processing_group", {"type": "process_problem", "problem_id": instance.id} ) post_save.connect(handle_new_problem, sender=ProblemModel) ``` 5. **频道和实时通讯**: - 如果需要实时更新问题的状态或解决方案,可以利用 Django Channels 和 WebSockets。创建一个 Channel Layer 并连接到问题处理组,当任务完成时推送消息给订阅的终端。 6. **终端应用接收消息**: - 在终端应用的前端(可能是 React、Vue 或 Angular),订阅相关频道,并监听处理结果。收到更新后更新界面显示。 7. **解决问题并关闭**: - 当问题在终端应用得到解决后,同样发送一个信号或异步任务,更新数据库中的问题状态,并关闭任务。 请注意,以上步骤需要结合具体的环境和工具进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值