Wenn Sie immer zahlen, um das Gewicht Ihrer Brieftasche zu minimieren, wie verteilt sich Ihre Brieftasche?
Lassen Sie es uns durch Simulation überprüfen.
10.000 Yen sind unendlich. ――Kaufen Sie das Produkt 10.000 Mal und sehen Sie sich die Verteilung an. (Ignoriere die ersten 100 Male)
Lassen Sie uns zuerst ein Gewicht (wgt) von 100 Yen bis 9999 Yen gemäß dem Gesetz von Benford herstellen.
python
import numpy as np, matplotlib.pyplot as plt
from math import log
#Benfords Gesetz
wgt = np.array([log((i+1)/i, 10000) for i in range(100, 10000)])
wgt /= sum(wgt)
plt.plot(wgt)
plt.xlabel('Price')
Definiert eine Änderung, die die Zahl nach Minimierung des Gewichts zurückgibt.
python
from pulp import *
money_val = (1, 5, 10, 50, 100, 500, 1000, 5000)
money_wgt = (1.0, 3.7, 4.5, 4.0, 4.8, 7.0, 1.0, 1.0)
def change(price):
m = LpProblem() #Mathematisches Modell
x = [LpVariable('x%d'%i, lowBound=0, cat=LpInteger)
for i in range(len(money_val))] #Menge nach Zahlungseingang
m += lpDot(money_wgt, x) #Zielfunktion(Gewicht nach Zahlungseingang)
m += lpDot(money_val, x) == price #Betrag nach Zahlungseingang
m.solve()
return [int(value(i)) for i in x]
Lass uns simulieren. Versuchen wir die Verteilung von 1000-Yen-Scheinen.
python
price = 0 #Aktuelles Geld
warm, nrun = 100, 10000
res = []
for i, p in enumerate(rand_from_prob(wgt, warm+nrun)):
price -= p
if price < 0:
price += 10000
if price:
res.append(change(price))
a = np.array(res[-nrun:])
plt.hist(a[:,6], bins=5, range=(0, 5)) #Verteilung von 1000 Yen Rechnungen
Es ist eine gleiche Wahrscheinlichkeit. Gleiches galt für andere Münzen und 5000-Yen-Scheine.
Es scheint die gleiche Wahrscheinlichkeit zu sein. Die Verteilung des Gesamtbetrags hat ebenfalls eine gleiche Wahrscheinlichkeit von 0 Yen bis 9999 Yen.
python
import pandas as pd
from itertools import product
r2, r5 = range(2), range(5)
ptn = [np.dot(money_val, n) for nn in
product(r5, r2, r5, r2, r5, r2, r5, r2)]
plt.hist(ptn)
print(pd.DataFrame(ptn).describe())
>>>
0
count 10000.00000
mean 4999.50000
std 2886.89568
min 0.00000
25% 2499.75000
50% 4999.50000
75% 7499.25000
max 9999.00000
das ist alles
Recommended Posts