Представим себе игральные кости (шестигранные кубики), на гранях которых могут быть различные числа, а не только 1, 2, 3, 4, 5, 6.

Представим ситуацию, что я кладу на стол четыре различных кубиков, у которых различные числа на гранях. Я предлагаю Вам первым выбрать любой куб, а я выберу из оставшихся. Вы можете видеть все кубики и выбрать любой. Далее, мы бросаем свои кубы и у кого выпадет больше — тот выиграл.

Как Вы думаете кто в этой игре имеет преимущество?

Казалось бы, что в худшем случае для первого игрока не будет преимущества (скажем, если все кубики одинаковые), а, вообще говоря, у него будет больше шансов выиграть у меня.

Но не тут-то было! Оказывается существует такой набор кубов, что у меня всегда будет преимущество в 2/3 против 1/3. Например:

(0, 0, 4, 4, 4, 4),
(3, 3, 3, 3, 3, 3),
(2, 2 ,2, 2, 6, 6),
(1, 1, 1, 5, 5, 5),

где в скобках указаны числа на гранях кубов. Каждый следующий куб хуже предыдущего, а первый хуже последнего.

В это невозможно поверить, поскольку кажется, что для любых таких кубов должно существовать отношение предпочтительности, которое должно быть транзитивным. Если A лучше B, а C лучше A, то должно быть C лучше B. Но в данном случае мы имеем дело с нетранзитивными кубами!

Понять это невозможно. Но можно проверить. Напишем простую программу в которой первый игрок будет выбирать случайные кубы, а второй согласно правилу.

import random

Cube = [ # создаем четыре куба
    [0, 0, 4, 4, 4, 4],
    [3, 3, 3, 3, 3, 3],
    [2, 2 ,2, 2, 6, 6],
    [1, 1, 1, 5, 5, 5]
]


S1 = 0 # выигрыш первого игрока
S2 = 0 # выигрыш второго игрока

for i in range(1000):
    n1 = random.randint(0, 3) # первый игрок выбирает любой куб

    if n1 == 0: # второй игрок выбирает свой куб
        n2 = 3
    else:
        n2 = n1 - 1

    x = random.randint(0, 5)
    a1 = Cube[n1][x]

    x = random.randint(0, 5)
    a2 = Cube[n2][x]

    if a1 > a2:
        S1 = S1 + 1

    if a2 > a1:
        S2 = S2 + 1

print("S1 = " + S1.__str__())

print("S2 = " + S2.__str__())

Мы написали программу на языке программирования Python. Если Вы еще не знаете этот язык, то можно ему быстро научиться «Быстрые лекции по Python«.

Запуская эту программу мы будем иметь результаты, близкие к

S1=350

S2=650

Как бы это не было странным, но это так!

Если Вы захотите это понять, то приходите на наши следующие лекции, где я расскажу Вам о «принципе индифферентности».