80 lines
1.8 KiB
Python
Executable file
80 lines
1.8 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
import numpy as np
|
|
import random
|
|
|
|
registered_events = {}
|
|
|
|
# We'll define events as predicates:
|
|
# Also I'll use some decorators, just to show off
|
|
|
|
# the decorator:
|
|
def event(event_pred):
|
|
key = event_pred.__name__
|
|
val = (event_pred, 0)
|
|
registered_events[key] = val
|
|
return event_pred
|
|
|
|
@event
|
|
def omega(value):
|
|
return True
|
|
|
|
@event
|
|
def a1(value):
|
|
return value % 2 == 0
|
|
|
|
@event
|
|
def b1(value):
|
|
return value <= 4
|
|
|
|
@event
|
|
def ab1(value):
|
|
return a1(value) and b1(value)
|
|
|
|
@event
|
|
def a2(value):
|
|
return value % 2 == 0
|
|
|
|
@event
|
|
def b2(value):
|
|
return value <= 5
|
|
|
|
@event
|
|
def ab2(value):
|
|
return a2(value) and b2(value)
|
|
|
|
random.seed()
|
|
def dice_experiment(reps):
|
|
for i in range(reps):
|
|
r = random.randint(1,6)
|
|
for key, value in registered_events.items():
|
|
func, count = value
|
|
if func(r):
|
|
count += 1
|
|
newval = (func, count)
|
|
registered_events[key] = newval
|
|
|
|
dice_experiment(1000)
|
|
|
|
total = registered_events["omega"][1]
|
|
print(f"Total = ", registered_events["omega"][1]/total)
|
|
print(f"P^(A1) = ", registered_events["a1"][1]/total)
|
|
print(f"P^(B1) = ", registered_events["b1"][1]/total)
|
|
print(f"P^(A1)P^(B1) = ", registered_events["a1"][1]/total * registered_events["b1"][1]/total)
|
|
print(f"P^(AB1) = ", registered_events["ab1"][1]/total)
|
|
print(f"P^(A2) = ", registered_events["a2"][1]/total)
|
|
print(f"P^(B2) = ", registered_events["b2"][1]/total)
|
|
print(f"P^(A2)P^(B2) = ", registered_events["a2"][1]/total * registered_events["b2"][1]/total)
|
|
print(f"P^(AB2) = ", registered_events["ab2"][1]/total)
|
|
|
|
"""Example output:
|
|
|
|
Total = 1.0
|
|
P^(A1) = 0.494
|
|
P^(B1) = 0.667
|
|
P^(A1)P^(B1) = 0.329498
|
|
P^(AB1) = 0.329
|
|
P^(A2) = 0.494
|
|
P^(B2) = 0.835
|
|
P^(A2)P^(B2) = 0.41249
|
|
P^(AB2) = 0.329"""
|