Question de modélisation concernant les 99e centiles / intervalles de confiance

Oct 23 2020

J'essaye actuellement d'implémenter les résultats de simulation de Roughgarden et al. (Université de Stanford), c'est-à-dire son article de 2017 intitulé "Incentive Compatibility of Bitcoin Mining Pool Reward Functions" (lien:https://www.ifca.ai/fc16/preproceedings/28_Schrijvers.pdf, pages 13 et 14).

Brève introduction au problème: dans l'exploitation minière de Bitcoin, nous devons résoudre un problème difficile en calcul qui, peu de temps après sa création, est devenu trop difficile à résoudre économiquement pour un seul mineur. C'était la raison de la fondation de "pools de minage de bitcoins", où différents mineurs uniques ont réuni leur capacité de calcul afin de réduire la volatilité de leurs paiements s'ils exploitaient en solo.

Maintenant, dans le modèle du papier, nous agissons en tant que gestionnaire de pool Bitcoin qui essaie de distribuer les récompenses du bloc Bitcoin entre les participants du pool en ce qui concerne la puissance de calcul qu'ils ont apportée au système. Parce que les opérateurs de pool ne savent pas exactement quelle est la quantité de puissance de calcul que les mineurs individuels ont apportée au pool, ils doivent l'estimer. Ceci est fait par les mineurs participant au pool engageant des soi-disant «partages» (= solutions partielles) à l'opérateur de pool qui sont plus faciles à résoudre que la solution complète réelle. Maintenant, la question est: comment l'opérateur du pool distribue-t-il les récompenses entre les mineurs participant au pool?

Variables et définitions dans ce modèle:

  • $\alpha_i $ = capacité de calcul d'un mineur i individuel (uniquement connu de lui)
  • $D$ = chaque solution partielle constitue une solution complète avec prob. $\frac{1}{D}$
  • $b_i$ = le nombre d'actions (= solutions partielles) engagées auprès de l'opérateur du pool par le mineur i
  • un tour commence par le puzzle de calcul et se termine par un mineur qui trouve une solution.

Les deux réponses les plus fondamentales à cette question sont le PPS («pay-per-share») et les méthodes de paiement proportionnel. Je ne décris la fonction de récompense accessoire que parce qu'elle suffit à ma question.

  • La fonction de récompense proportionnelle est $R_i^{(prop)}(\boldsymbol{b}) = \frac{\boldsymbol{b_i}}{K}$, où $K$ est la somme de toutes les actions engagées par les mineurs dans le pool dans le tour respectif, c'est-à-dire $K = \| \boldsymbol{b} \|_1 = \sum_{i = 1}^ n \boldsymbol{b_i}$. Cette méthode a en fin de compte une valeur attendue pour chaque mineur participant au pool d'exactement$\alpha_i$, la véritable capacité minière d'un mineur individuel.

Nous voulons maintenant modéliser le temps qu'il faut à un mineur donné pour gagner un nombre donné de bitcoins avec une certitude de 99%. Dans les simulations, nous supposons que la capacité du mineur est$\alpha_i$= 0.001, D = 1.000.000 et nous normalisons la récompense de bloc à 1 BTC par tour. Quelle est ma question: comment puis-je modéliser le 99e centile pour gagner des récompenses? Surtout la comparaison entre l'exploitation minière en solo et l'exploitation minière proportionnelle. Les résultats de Roughgarden sont qu'il faut beaucoup plus de tours jusqu'à ce que vous obteniez une certaine quantité de bitcoins avec une certitude de 99% si vous exploitez la sole qu'avec les récompenses minières proportionnelles. Ma conjecture et mes expériences consistaient à exécuter différentes distributions de bernoulli avec paramètre$p = 0.001$et l'exécuter dans une boucle for plusieurs milliers de fois. Mais je ne sais vraiment pas à quoi ressemble l'approche pour calculer la certitude de 99% (peut-être l'intervalle de confiance?) Dans ce cas. Nous attendons, car$\alpha_i$= 0,001, que dans environ 1000 tours, nous aurons la chance de trouver la solution une fois. Mais je ne peux pas relier la modélisation à la quantification de la certitude. Ce serait formidable si quelqu'un pouvait m'expliquer quoi et comment calculer. Appréciez votre temps.

Réponses

1 Jsevillamol Oct 23 2020 at 16:25

Une façon de penser à cela: quelle est la répartition du nombre d'essais dont vous avez besoin avant votre premier succès?

Réfléchissons étape par étape.

Quelle est la probabilité que vous ayez besoin $n$ essais avant votre premier succès, si votre probabilité de succès par tour est $\alpha_i = 0.001$?

Eh bien, pour que cela se produise, vous auriez besoin $n-1$échecs et ensuite un succès. Il est simple de calculer cette probabilité:

$$ P(N=n | \alpha_i) = (1-\alpha_i)^{n-1} \alpha_i $$

Il s'agit d'une distribution géométrique, dont nous pouvons calculer les quantiles numériquement.

import scipy.stats as stats
import matplotlib.pyplot as plt
import numpy as np
alpha = 0.001

q99 = stats.geom.ppf(0.99, alpha)

print(f"The 99th percentile is {q99}")

x = np.linspace(0,5000,10000)
cdf = stats.geom.cdf
plt.plot(x,cdf(x, alpha))
plt.show()

Le code ci-dessus sort:

The 99th percentile is 4603.0