Skip to content

Instantly share code, notes, and snippets.

@Recursing
Last active April 10, 2018 10:19
Show Gist options
  • Save Recursing/6fae35737b422436413c04db4ab4c266 to your computer and use it in GitHub Desktop.
Save Recursing/6fae35737b422436413c04db4ab4c266 to your computer and use it in GitHub Desktop.
Truncated random variable with given expected value
from random import random
def truncated_given_exp(minimum, maximum, expected):
if expected == minimum: return expected
maximum -= minimum
expected -= minimum
k = maximum/expected - 1 # Questa si comporta peggio della prima se expected - min < max - expected
return minimum + maximum * random()**k
def test_sample(minimum, maximum, expected, tries=10**5):
from statistics import mean
sample = [truncated_given_exp(minimum, maximum, expected) for i in range(tries)]
return min(sample), max(sample), mean(sample)
def test():
for i in range(100):
minimum = random() * 100
maximum = random() * 1000 + minimum
expected = random() * (maximum - minimum) + minimum
print(f"Testing {minimum},\t{maximum},\t{expected}:")
print( "Result: {},\t{},\t{}".format(*test_sample(minimum, maximum, expected)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment