Advertisement
jack06215

[numpy] Dice rolling simulator

Aug 17th, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.60 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import matplotlib.pyplot as plt
  4. from matplotlib.ticker import MaxNLocator
  5. from sklearn.neighbors import KernelDensity
  6.  
  7. ax = plt.figure().gca()
  8. ax.xaxis.set_major_locator(MaxNLocator(integer=True))
  9.  
  10. class Die():
  11.     num_sides=6
  12.     def roll(self):
  13.         return np.random.randint(1,self.num_sides+1)
  14.  
  15. # create two D6 dice
  16. die_1 = Die()
  17. die_2 = Die()
  18. die_3 = Die()
  19. die_4 = Die()
  20.  
  21. # make some rolls, and store results in a list.
  22. results = []
  23. for roll_num in range(5000):
  24.  result = die_1.roll() + die_2.roll()# + die_3.roll() + die_4.roll()
  25.  results.append(result)
  26.  
  27. # analyze the results.
  28. model = KernelDensity(bandwidth=2, kernel='gaussian')
  29. sample = np.array(results).reshape((len(results), 1))
  30. model.fit(sample)
  31.  
  32. values = np.asarray([value for value in range(1, 14)])
  33. values = values.reshape((len(values), 1))
  34. probabilities = model.score_samples(values)
  35. probabilities = np.exp(probabilities)
  36.  
  37. max_result = die_1.num_sides + die_2.num_sides# + die_3.num_sides + die_4.num_sides
  38.  
  39. x_max = die_1.num_sides + die_2.num_sides# + die_3.num_sides + die_4.num_sides
  40.  
  41. plt.hist(results, bins=np.arange(1, max_result+2)-.5, histtype = 'bar',
  42.          rwidth=0.8, facecolor = 'gray', edgecolor="k", density=True)
  43.  
  44. plt.plot(values[:], probabilities)
  45. plt.title("Dice Plot")
  46. plt.xlabel("Results")
  47. plt.ylabel("Density")
  48.  
  49. plt.show()
  50.  
  51. plt.hist(results, bins=np.arange(1, max_result+2)-.5, histtype = 'bar',
  52.          rwidth=0.8, facecolor = 'gray', edgecolor="k")
  53.  
  54. plt.title("Dice Plot")
  55. plt.xlabel("Results")
  56. plt.ylabel("Frequency")
  57.  
  58. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement