I'm interested in prototyping a Monte Carlo type simulation algorithm in 
Python. The background is that a friend has written a similar program in C++, 
and I'm interested in seeing if I can achieve something comparable in a much 
better language :-)

The basic job of the program will be to simulate games of chance - so we'll 
have random inputs (die rolls, card draws, etc) and repeatedly simulate 
calculating a "result". Based on the results of the simulation, the idea is to 
estimate the probability of a given result.

So, to give a very specific example:

import random

def die(n, sides=6):
    total = sum(random.randint(1, sides) for i in range(n))
    return total

def simulate(n, test):
    "Run the simulation N times, returning the probability that TEST is true"
    successes = 0
    for i in range(n):
        if test():
            successes = successes + 1
    return successes/n

def check_3d6_gt_15():
    return die(3) > 15

if __name__ == '__main__':
    print(simulate(100000, check_3d6_gt_15))

Obviously, this is going to run ridiculously slowly as the number of 
simulations or the complexity of the calculation increases, but this gives the 
idea.

My immediate instinct is that somewhere in the scipy stack, there will be a 
module that does this sort of thing efficiently, but I don't really know where 
to look - my understanding of the maths involved is very much at the naive 
level above, so I'm not sure what terms I should be searching for, or how to 
frame a query.

Can anyone give me some pointers as to where I should go to find out more about 
this sort of task? Either more general theory (that would help me ask the right 
questions!) or specific packages or techniques I should be using in 
Python/numpy would be fantastic. 

Any help would be gratefully accepted - surely nobody wants to see Python 
beaten by a C++ program??? :-)

Thanks,
Paul
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to