标签: montecarlo

直方图中的随机数

假设我使用scipy/numpy创建直方图,所以我有两个数组:一个用于bin计数,一个用于bin边缘.如果我使用直方图来表示概率分布函数,我该如何有效地从该分布中生成随机数?

python numpy montecarlo scipy

25
推荐指数
3
解决办法
8352
查看次数

修复整个会话的set.seed

我使用R构建一个基于代理的模型,使用蒙特卡罗过程.这意味着我有许多使用某种随机引擎的函数.为了获得可重复的结果,我必须修复种子.但是,据我所知,我必须在每个随机抽签或样本之前设置种子.这是一个真正的痛苦.有没有办法修理种子?

set.seed(123)
print(sample(1:10,3))
# [1] 3 8 4
print(sample(1:10,3))
# [1]  9 10  1
set.seed(123)
print(sample(1:10,3))
# [1] 3 8 4
Run Code Online (Sandbox Code Playgroud)

r random-sample montecarlo agent-based-modeling

24
推荐指数
3
解决办法
2万
查看次数

蒙特卡罗树搜索UCT实施

你能解释一下如何建树吗?

我完全理解如何选择节点,但更好的解释将真正帮助我实现这个算法.我已经有一个代表游戏状态的棋盘,但我不知道(理解)如何生成树.

有人能指出一个评论很好的算法实现(我需要用它来进行AI)吗?还是更好的解释/例子呢?

我没有在网上找到很多资源,这个算法比较新...

java tree artificial-intelligence montecarlo

20
推荐指数
1
解决办法
2万
查看次数

蒙特卡洛树搜索:Tic-Tac-Toe的实施

编辑:Uploded完整的源代码,如果你想看看如果你能得到的AI表现得更好:https://www.dropbox.com/s/ous72hidygbnqv6/MCTS_TTT.rar

编辑:搜索搜索空间并找到导致丢失的移动.但由于UCT算法,不会经常访问导致损失的移动.

要了解MCTS(蒙特卡罗树搜索),我已经使用该算法为经典的井字游戏制作AI.我使用以下设计实现了算法:

MCTS阶段 树策略基于UCT,默认策略是执行随机移动直到游戏结束.我在实现中观察到的是,计算机有时会进行错误的移动,因为它无法"看到"特定的移动会直接导致丢失.

例如: Tic Tac Toe的例子 注意动作6(红色方块)的值略高于蓝色方块,因此计算机标记了这个位置.我认为这是因为游戏政策是基于随机移动,因此很有可能人类不会在蓝框中加上"2".如果玩家没有在蓝色框中放置2,那么计算机就会赢得胜利.

我的问题

1)这是MCTS的已知问题还是实施失败的结果?

2)有什么可能的解决方案?我正在考虑将这些动作限制在选择阶段,但我不确定:-)

核心MCTS的代码:

    //THE EXECUTING FUNCTION
    public unsafe byte GetBestMove(Game game, int player, TreeView tv)
    {

        //Setup root and initial variables
        Node root = new Node(null, 0, Opponent(player));
        int startPlayer = player;

        helper.CopyBytes(root.state, game.board);

        //four phases: descent, roll-out, update and growth done iteratively X times
        //-----------------------------------------------------------------------------------------------------
        for (int iteration = 0; iteration < 1000; iteration++)
        {
            Node current = Selection(root, game);
            int value = Rollout(current, game, startPlayer);
            Update(current, value);
        }

        //Restore game …
Run Code Online (Sandbox Code Playgroud)

c# algorithm artificial-intelligence montecarlo tic-tac-toe

18
推荐指数
2
解决办法
9970
查看次数

为什么要使用蒙特卡罗方法?

应该何时使用蒙特卡罗方法?

例如,为什么Joel决定使用蒙特卡罗方法进行基于证据的调度,而不是有条不紊地处理过去一年的所有用户数据?

montecarlo

15
推荐指数
2
解决办法
9420
查看次数

顺序蒙特卡罗方法(粒子滤波器)的实现

我对这里给出的简单粒子滤波算法感兴趣:http://www.aiqus.com/upfiles/PFAlgo.png看起来很简单,但我不知道如何实际做到这一点.关于如何实现它的任何想法(只是为了更好地理解它是如何工作的)?

编辑: 这是一个很好的简单示例,解释它是如何工作的:http://www.aiqus.com/questions/39942/very-simple-particle-filters-algorithm-sequential-monte-carlo-method-implementation?page= 1#39950

我试图用C++实现它:http://pastebin.com/M1q1HcN4但是我要注意我是否以正确的方式执行它.你能否检查我是否理解得很好,或者根据我的代码存在一些误解?

#include <iostream>
#include <vector>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_01.hpp>
#include <boost/random/uniform_int_distribution.hpp>

using namespace std;
using namespace boost;

double uniform_generator(void);

#define N 4 // number of particles

#define evolutionProba_A_A 1.0/3.0 // P(X_t = A | X_t-1 = A)
#define evolutionProba_A_B 1.0/3.0 // P(X_t = A | X_t-1 = B)
#define evolutionProba_B_B 2.0/3.0 // P(X_t = B | X_t-1 = B)
#define evolutionProba_B_A 2.0/3.0 // P(X_t = …
Run Code Online (Sandbox Code Playgroud)

c++ inference probability montecarlo particle-filter

14
推荐指数
1
解决办法
2万
查看次数

Python大迭代次数失败

我使用多处理模块在Python中编写了简单的monte-carloπ计算程序.它工作正常,但是当我为每个工作者传递1E + 10次迭代时,会出现一些问题,结果是错误的.我无法理解问题是什么,因为1E + 9迭代的一切都很好!

import sys
from multiprocessing import Pool
from random import random


def calculate_pi(iters):
    """ Worker function """

    points = 0  # points inside circle

    for i in iters:
        x = random()
        y = random()

        if x ** 2 + y ** 2 <= 1:
            points += 1

    return points


if __name__ == "__main__":

    if len(sys.argv) != 3:
        print "Usage: python pi.py workers_number iterations_per_worker"
        exit()

    procs = int(sys.argv[1])
    iters = float(sys.argv[2])  # 1E+8 is cool …
Run Code Online (Sandbox Code Playgroud)

python iteration parallel-processing pi montecarlo

13
推荐指数
1
解决办法
1182
查看次数

Excel VBA的Rnd()真的很糟糕吗?

我需要一个用于2D蒙特卡罗模拟的伪随机数生成器,它没有使用简单LCG获得的特征超平面.我使用以下代码在Excel 2013中测试了随机数生成器Rnd()(运行大约需要5秒):

Sub ZoomRNG()

Randomize
For i = 1 To 1000
    Found = False
    Do
        x = Rnd()   ' 2 random numbers between 0.0 and 1.0
        y = Rnd()
        If ((x > 0.5) And (x < 0.51)) Then
            If ((y > 0.5) And (y < 0.51)) Then
                ' Write if both x & y in a narrow range
                Cells(i, 1) = i
                Cells(i, 2) = x
                Cells(i, 3) = y
                Found = True
            End If
        End If
    Loop While (Not …
Run Code Online (Sandbox Code Playgroud)

random vba excel-vba montecarlo excel-2013

13
推荐指数
1
解决办法
4452
查看次数

c ++中蒙特卡罗方法的好书?

任何人都可以推荐一本关于c ++中蒙特卡罗算法的好书吗?优选地,应用于物理学,甚至更优选地,物理学的类型是量子力学.

谢谢!

c++ physics montecarlo

12
推荐指数
1
解决办法
4401
查看次数

有效地选择随机数

我有一个方法,它使用随机样本来近似计算.这种方法被称为数百万次,因此选择随机数的过程非常有效.

我不确定javas Random().nextInt真的有多快,但我的程序似乎并没有像我想的那样受益.

选择随机数时,我会执行以下操作(半伪代码):

// Repeat this 300000 times
Set set = new Set();
while(set.length != 5)
    set.add(randomNumber(MIN,MAX));
Run Code Online (Sandbox Code Playgroud)

现在,这显然有一个糟糕的最坏情况运行时间,因为理论上的随机函数可以为永恒添加重复数字,从而永远保持在while循环中.但是,数字是从{0..45}中选择的,因此重复的值大部分都不太可能.

当我使用上面的方法时,它只比我的其他方法快40%,这不是近似的,但会产生正确的结果.这大约跑了100万次,所以我期待这种新方法至少快50%.

您对更快的方法有什么建议吗?或许你知道一种更有效的方法来生成一组随机数.

澄清一下,这是两种方法:

// Run through all combinations (1 million). This takes 5 seconds
 for(int c1 = 0; c1 < deck.length; c1++){
    for(int c2 = c1+1; c2 < deck.length; c2++){
     for(int c3 = c2+1; c3 < deck.length; c3++){
        for(int c4 = c3+1; c4 < deck.length; c4++){
         for(int c5 = c4+1; c5 < deck.length; c5++){
             enumeration(hands, cards, deck, c1, c2, c3, …
Run Code Online (Sandbox Code Playgroud)

java random montecarlo approximation

12
推荐指数
2
解决办法
1万
查看次数