《深度强化学习》第二章-蒙特卡洛方法-读书笔记

  1. 随机变量记作 X X X,观测值记作 x x x,观测值只是数字而已,没有随机性,如 P ( X = 0 ) = 1 2 P(X=0)=\frac{1}{2} P(X=0)=21中为大写;
  2. 给定随机变量 X X X,它的累积分布函数(即概率分布函数)(CDF)是函数 F X : R → [ 0 , 1 ] F_X:R\to[0,1] FX:R[0,1],定义为:
    F X ( x ) = P ( X ≤ x ) F_X(x)=P(X\le x) FX(x)=P(Xx)
  3. 对于离散概率分布,有概率质量函数 p ( x ) p(x) p(x),假设随机变量 X X X取值范围是集合 χ \chi χ
    则有: ∑ x ∈ χ p ( x ) = 1 \sum_{x\in \chi}^{} p(x)=1 xχp(x)=1 , X X X的概率质量函数为 p ( ⋅ ) p(\cdot) p(),则函数 h ( X ) h(X) h(X)关于变量 X X X的期望是
    E X ∼ p ( ⋅ ) [ h ( X ) ] = ∑ x ∈ χ p ( x ) ⋅ h ( x ) E_{X\sim p(\cdot)}[h(X)]=\sum_{x\in \chi}^{}p(x)\cdot h(x) EXp()[h(X)]=xχp(x)h(x)
  4. 对于连续概率发布,有概率密度函数 p ( x ) p(x) p(x),随机变量 X X X的取值范围 χ \chi χ是连续集合,则有: ∫ − ∞ x p ( u ) d u = F X ( x ) = P ( X ≤ x ) \int_{-\infty }^{x} p(u)du=F_X(x)=P(X\le x) xp(u)du=FX(x)=P(Xx) ∫ − ∞ + ∞ p ( u ) d u = 1 \int_{-\infty }^{+\infty} p(u)du=1 +p(u)du=1, X X X的概率密度函数为 p ( ⋅ ) p(\cdot) p(),则函数 h ( X ) h(X) h(X)关于变量 X X X的期望是
    E X ∼ p ( ⋅ ) [ h ( X ) ] = ∫ χ p ( x ) ⋅ h ( x ) d x E_{X\sim p(\cdot)}[h(X)]=\int_{\chi}p(x)\cdot h(x)dx EXp()[h(X)]=χp(x)h(x)dx
    在这里插入图片描述

例一、近似 π \pi π

在这里插入图片描述

import torch
m = 0
n = 100000

for i in range(n):
    x,y = 2*torch.rand(1)-1,2*torch.rand(1)-1
    if  torch.pow(x,2)+ torch.pow(y,2) <= 1:
        m = m+1

pi = 4 * m / n
print(pi)

输出:3.13528

# 2.2节,蒙特卡洛近似计算圆周率。
import numpy as np

def approxiate_pi(n: int):
    # 在[-1, 1] x [-1, 1]的空间中随机取n个点。
    x_lst = np.random.uniform(-1, 1, size=n)
    y_lst = np.random.uniform(-1, 1, size=n)
    # 统计距离圆心距离在1以内的点。
    m = 0
    for x, y in zip(x_lst, y_lst):
        if x ** 2 + y ** 2 <= 1:
            m += 1
    # 近似计算圆周率。
    pi = 4 * m / n
    return pi


if __name__ == "__main__":
    pi = approxiate_pi(100)
    print("100个点近似的圆周率:", pi)

    pi = approxiate_pi(10000)
    print("10000个点近似的圆周率:", pi)

    pi = approxiate_pi(1000000)
    print("1000000个点近似的圆周率:", pi)

输出:100个点近似的圆周率: 3.08
10000个点近似的圆周率: 3.1352
1000000个点近似的圆周率: 3.141

例二、计算阴影部分面积

在这里插入图片描述

import torch
m = 0
n = 100000

for i in range(n):
    x,y = 2*torch.rand(1),2*torch.rand(1)
    if  ((x-1)**2+(y-1)**2<=1) & (x**2+y**2>4):
        m = m+1

s = 4 * m / n
print(s)

输出:0.59632

例三、计算近似期望

假设用期望计算 ∫ 0 3 x 2 3 d x \int_{0}^{3}x^\frac{2}{3}dx 03x32dx

q=0
t=1
n=10000
def f(x):
    return x ** (2/3)
for i in range(n):
    a = torch.rand(1) * 3
    q = (1-1/t) * q + (1/t) * f(a)
    t = t+1
print(q)

输出:tensor([1.2374])

第二章习题2.2

# 方法1
import torch 
n = 10000
f = 0
for i in range(n):
    x = torch.normal(mean=1,std=2,size=(1,))
    f = 2*x+10*torch.sqrt(torch.abs(x))+3+f
print(f/n)

输出:tensor([17.3412])


```python
 # 方法2
import torch 
n = 10000
q=0
t=1
def f(x):
    return  2*x+10*torch.sqrt(torch.abs(x))+3
for i in range(n):
    x = torch.normal(mean=1,std=2,size=(1,))
    q = (1-1/t)*q+1/t * f(x)
    t = t+1
print(q)

输出:tensor([17.3020])

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值