Le problème du char d’assaut allemand

Ce titre de note est tout à fait digne des Monty Python. C’est aussi un problème statistique (je sais, je suis un peu monomaniaque en ce moment…) assez rigolo.

Imaginons qu’une guerre moderne oppose, disons les bleus contre les rouges. Les rouges planifient une attaque massive qui va reposer essentiellement sur l’utilisation de blindés, mais ils savent que les bleus ont mis en production depuis quelques mois un char d’assaut qui surpasse tous les leurs.

Le point crucial, pour les rouges, est de savoir combien les bleus pourront aligner de ces chars de nouvelle génération lors de cette attaque.

Problème, de nombreux espions Bothan sont morts sans pouvoir ramener cette information.

Les espions rouges connaissent néanmoins la date de début de leur production, et aussi savent que chaque char d’assaut possède un numéro de série unique qui s’incrémente de 1 à chaque char produit: par exemple 1, 2, 3, ….

Les rouges ont réussi à capturer (« aléatoirement ») 5 chars plus ou moins intacts, avec 5 numéros de série. Par exemple 5, 48, 69, 110, et 16.

Pouvons-nous en déduire le nombre total de chars de nouvelle génération produits par les bleus, et ainsi leur production mensuelle?

Et bien, comme vous pouvez vous en douter, on peut estimer ce chiffre (avec une marge d’erreur potentiellement très raisonnable).

La formule à utiliser est même remarquablement simple:

n=m(1 + (1/k)) – 1

n est l’estimation du nombre de chars produits, k le nombre d’exemplaires capturés, et m le numéro de série le plus élevé observé sur ces exemplaires.

Dans notre cas, n=110(1+(1/5))-1 soit 131 blindés. Si la production a commencé il y a 2 mois, les bleus produisent donc environ 65 blindés par mois.

Bon, arrivés à ce point, vous devez vous dire que c’est n’importe quoi, que vous ayez ou pas des connaissances en statistiques, car ce chiffre est invérifiable.

(Ceux qui connaissent les statistiques peuvent me jeter des pierres, je ne fais pas bien mieux qu’un singe savant).

C’est là que cette histoire peut devenir drôle.

Imaginons que les bleus aient produit effectivement 342 chars. Imaginons que les rouges aient été un peu meilleurs, et qu’ils aient capturé 25 chars (plus l’échantillon capturé est important, meilleure est la précision).

Je vais demander à R de me donner 25 numéros de série aléatoires, parmi une population en comprenant 342.

En langage R, ça donne cela:

R GTP1Les lignes 1 et 2 permettent de créer une population pop de 342 numéros de série qui se suivent.

La ligne 3 permet d’extraire de pop un échantillon x de 25 numéros, que voici:

R GTP2Les lignes 4 et 5 définissent m et k.

Les deux dernières définissent n (est.n) qui est ici de…337.

Pas mal, non?

(pour ceux qui dorment, la bonne réponse est 342.)

Ok, vous ne me croyez toujours pas?

Je vais demander à R de créer 10.000 échantillons aléatoires x de 25 numéros tirés de pop (pop=342, k=25):

R GTP3

R GTP4La moyenne observée des populations prédites sur ces 10.000 échantillons est de… 342.07.

😉

Un petit coup de hist(sim.est.n) pour avoir un histogramme:

Rplot01(L’histogramme est pourri mais je suis incapable de configurer R pour le rendre acceptable.)

On peut aussi voir que la formule du problème du char d’assaut allemand (ce n’est pas son vrai nom, mais vous verrez à la fin pourquoi le char est allemand, et pas bleu) peut donner une approximation raisonnable de la population de pop en considérant la corrélation entre des populations pop et ces mêmes populations estimées par la formule, sur de nombreux essais.

Pour avoir une plus jolie corrélation, j’ai utilisé les paramètres suivants: k=25, pop autour de 100 et 1000 essais:

Rplot02Joli, non?

Pour en savoir plus sur le problème du char allemand (et pourquoi ce nom):

  • Le site d’ où j’ai tiré les codes de R.
  • Randall Munroe (xkcd) fait allusion succinctement à ce problème dans cette note.

7 Replies to “Le problème du char d’assaut allemand”

  1. ce billet est un tour de magie !

    parce que 1) on se demande ce qui se passe entre l’estimation et le bon nombre de chars
    2) on est obligé d’aller voir les liens que tu donnes à la fin

  2. Le pire avec ce problème est le lien avec l’argument de la fin du monde (dans le lien xkcd) :

    « If we apply the German tank problem to humans, we can argue that our species will go extinct by the year 2807. » (!)

    Comme le dit Randall Monroe « on voit bien que c’est faux mais on ne comprends pas pourquoi… »

  3. 1) C’est quoi, « R », et où peut-on utiliser ce langage ?
    2) Personnellement, si l’humanité disparaît en 2 807, je m’en fous un peu : ni moi ni aucun de mes proches ni aucun des proches de mes proches ne sera vraisemblablement vivant à ce moment là 😉

  4. Bonjour,

    Quel est l’intérêt à la ligne : rnorm(1, 342, 0) ?
    Ici vous simulez un aléa gaussien de moyenne 342 et d’écart-type… 0.
    Pourquoi ne pas écrire : pop <- seq(1:342) ?

Laissez une réponse

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.