Не так давно, на этой неделе, я наткнулся на пост трехлетней давности. Вот он. Если вы будете его внимательно читать, то наткнетесь на то, что возмутит вас до глубины души. Если, конечно, вы понимаете что такое теория вероятностей. Речь об этом отрывке:
«55.55% — вероятность того, что ящики зажгутся одним и тем же цветом, когда мы выбираем две двери наугад, в соответствии с теорией скрытых параметров».

Все мое знакомство с теорвером буквально заорало об ошибке. Но есть нюанс… Я тоже могу ошибаться. Так давайте проверим!

Как рассуждает автор: мы берем одну, любую комбинацию, и смотрим какова вероятность совпадения.

Как рассуждаю я: я просто складываю вероятности получить совпадение нулей( R ) и 1(G). И у меня получается как раз 50%.

Приводить долгие рассуждения я не буду, приведу короткое: Если вы кинули монетку, то ваш первый бросок, а так же второй и любой другой, никак не могут повлиять на следующий. Любой следующий результат броска имеет вероятность выпадения 50/50. И, как следствие, результат совпадения будет 50 на 50.

Я не являюсь ни профессиональным математиком, ни, тем более, профессиональным физиком. Я просто программист. Следовательно, я могу ошибаться. И потому решил проверить результат своих рассуждений.

#define TESTMAX 1000000

struct ThreeWindowBox {
	bool m_Window[3];
};

float percent(int in) {
	return 100.0f *(((float)in) / (float)(TESTMAX));
}

int main(int argc, char** argv)
{
	//для тестирования Rand.
	int alls[2];
	alls[0] = 0;
	alls[1] = 0;

	int compare = 0;

	ThreeWindowBox* allBoxes = new ThreeWindowBox[TESTMAX];

	//заполняем позиции.
	for (int i = 0; i < TESTMAX; i++) {
		for (int window = 0; window < 3; window++) {
			int tmp = rand() % 2;
			alls[tmp]++;
			allBoxes[i].m_Window[window] = tmp;
		}
	}

	//А теперь ловим совпадения
	for (int i = 0; i < TESTMAX; i++) {
		int wind1 = rand() % 3;
		int wind2 = rand() % 3;
		//окна не должны совпадать!
		while(wind1 == wind2)
			 wind2 = rand() % 3;

		if (allBoxes[i].m_Window[wind1] == allBoxes[i].m_Window[wind2])
			compare++;
	}

	float perCompare = percent(compare);
	float perZero = percent(alls[0]) / 3;
	float perOne = percent(alls[1]) / 3;

	std::cout << perCompare << " " << perZero << " " << perOne;
}

На всякий пожарный, я решил проверить и функцию rand, чтобы гарантировать отсутствие глобального превосходства какого-либо значения над другим. И результат ровно тот, какой и следовало ожидать: 50.0251 49.9968 50.0032

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

П.С. Если таки ошибся я, я с радостью выслушаю в чем именно моя ошибка.
П.П.С. Нашел оригинальную статью Белла
Если я правильно понял, он не рассматривает совпадающие оси, а просто вероятности совпадения в разных осях. И да, там та же самая ошибка.
Но… мне сильно не хватает знаний, заложенных в самой статье. Поэтому, если кто сумеет ее прочитать и ПОНЯТЬ, прошу объяснить доступным языком.

П3.с
Жопа подкралась оттуда, откуда я ее не ждал. В принципе, это было вполне ожидаемо :-)
Согласно этой статье, вероятности распределяются не равномерно. Т.е. я оказался прав для случая в 90(270)градусов. А углов-то до и больше! И вот он, подвох: при угле = 0 всегда выпадет R, а при 180 — всегда G.
И, как утверждает автор, Белл говорил, что, внимание, подвох:
существуют углы, при которых условие
N[A+,B+] ? N[B–,C–] + N[A+,C+]
не выполняется.

где N[A+,B+] — вероятность выпадения R в окнах A, B
N[A+,C+] — вероятность выпадения R в окнах A, C
N[B–,C–] — вероятность выпадения G в окнах B, C

При этом, углы для A,B,C — свои.

И вот как это опровергнуть/доказать с точки зрения скрытых параметров я пока не знаю, но впереди все выходные!
Кто хочет — присоединяйтесь :-)
Поделиться с друзьями
-->

Комментарии (38)


  1. DarthKotik
    19.05.2017 13:22
    +3

    В оригинальной статье ничего не сказано про то что «Окна не должны совпадать». Они просто выбираются случайно. Можно случайно выбрать совпадающие. А вы этот случай исключаете, уменьшая вероятность совпадения цвета.


    1. Ckpyt
      19.05.2017 13:22

      1. Если они открывают одну и ту же дверь на обоих коробках, лампочки горят всегда одним и тем же цветом.

      2. Если они открывают двери двух коробок случайно, то один и тот же цвет появляется ровно в половине случаев.

      Т.е. это не совпадающие дверцы.


      1. DarthKotik
        19.05.2017 13:24
        +2

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

        Цитата из оригинальной статьи, которая говорит нам о том, что дверцы могут совпадать


        1. Ckpyt
          19.05.2017 14:27

          Нет, по Беллу двери не могут совпадать. Он прямо рассматривает случаи разных осей и не смотрит на совпадающие.
          https://cds.cern.ch/record/111654/files/vol1p195-200_001.pdf


      1. DarthKotik
        19.05.2017 13:37
        +1

        matches = 0
        attempts = 0 
        for x in range(10000000):
            detect = [random.choice([True, False]) for _ in range(3)]
            if not any(detect) or all(detect):
                continue
            attempts += 1
            if random.choice(detect) == random.choice(detect):
                matches += 1
        print(attempts, matches, matches/attempts)
        

        Код симулирующий эксперимент из статьи.
        Полученный результат: 7501076 4167267 0.5555558962474184


        Проверка not any(detect) or all(detect) Исключает вариант, когда все 3 цвета выбраны одинаковыми, что не учитывалось в рассчёте из оригинальной статьи (без этой проверки результат равен 66%)


        1. ibessonov
          19.05.2017 13:43

          Вычисление вероятностей в статье, безусловно, верное.
          Вызывает сомнение тот факт, что эксперимент показывает 50% в том случае, когда ответ «классического физика» равен 66% (то есть при выборе возможно совпадающих дверей, абсолютно случайных). Я не нашёл ссылку на научную публикацию, в которой подтверждалась бы такая вероятность, а просто оригиналу статьи (https://www.wired.com/2014/01/bells-theorem) я верю с трудом.


        1. Ckpyt
          19.05.2017 13:44

          Во всех окнах может быть одно значение. (не забываем про физический смысл — проекция спина на три оси)
          И да, меня смутило именно 66%.

          П.с. нашел оригинальную статью Белла, ушел читать :-)
          https://cds.cern.ch/record/111654/files/vol1p195-200_001.pdf


          1. ibessonov
            19.05.2017 13:53
            +1

            Белл всё это дело придумал достаточно давно, и вряд-ли всё мировое сообщество физиков не заметило бы столь простую ошибку. Скорее всего в статье приведён кривой пример.
            Обязательно отпишитесь, когда дочитаете «оригинальную статью»!


            1. Ckpyt
              19.05.2017 13:59

              Ну… как сказать… статья написана прямо по Беллу, по разделу «take for example».
              И да, там настолько грубая ошибка.
              И да, там не рассматриваются совпадающие окна(оси).


        1. alexxisr
          19.05.2017 14:14

          Две трети времени мы выбираем разные двери, и в одной трети этих случаев мы получим один и тот же цвет


          пусть за первой дверью мы всегда видим R
          тогда за двумя другими могут быть комбинации RR, RG, GG, GR.
          так как вторую дверь для открывания мы выбираем случайно, то за ней мы увидим один из этих 8 цветов.
          кол-во R и G равно — следовательно вероятность что мы увидим R как за первой дверью равно 50%

          — где у меня ошибка?

          или имелось в виду, что из 2/3 когда мы выбираем разные двери цвета совпадают в половине случаев, что составляет 1/3 от всех открываний?


          1. ibessonov
            19.05.2017 14:16

            У вас ошибка в том, что изначально предполагается наличие 2-х дверей разных цветов, то есть вариант RR отпадает


            1. alexxisr
              19.05.2017 14:34

              ок
              но ведь если мы исключаем вариант RRR при открытии 2 случайных дверей, то они не будут составлять 2/3 всех случаев

              то есть 1/3 (открываем одинаковые двери) + 6/8*2/3*1/3=1/6 (разные двери нет троек цветов) +2/8*2/3=1/6(тройки одинаковых цветов) итого = 2/3 (вероятность увидеть одинаковые цвета открывая случайные двери)

              что логично — в каждой тройке есть как минимум пара одинаковых
              а в квантовых экспериментах получается 1/2?
              придется тоже почитать Белла на ночь


              1. ibessonov
                19.05.2017 14:43

                а в квантовых экспериментах получается 1/2?

                Задаюсь тем же вопросом :)


                1. Livid
                  25.05.2017 10:45

                  Меня тоже это смутило сначала, на первый взгляд кажется что нет. Ниже обрисовал выкладки (нижняя половина комментария). Действительно, при определенной, причем очень конкретной, конфигурации осей измерения (в одной плоскости, с углом 120? между осями) в квантовом случае получается 1/2. Но это не совсем очевидный факт, и оригинальная статья (которая трехлетняя) его увы никак не комментирует. Все усугубляется тем, что для любой другой (плоской) конфигурации осей получается больше 1/2.


              1. Ckpyt
                19.05.2017 14:53

                У вас ошибка в рассуждениях. У меня как раз не исключаются одинаковые варианты, исключаются одинаковые оси. И все равно результат 1/2


        1. vesper-bot
          19.05.2017 15:14

          Вообще, в статье, где стоит 55.55%, ошибка в определении условной вероятности. Там стоит 1/3+2/3*1/3, когда должно стоять 1/3+2/3*1/2, или 2/3==66.66%. А вот после того, как варианты RRR и GGG из рассмотрения выкинули, меняется условная вероятность совпадающего сигнала, и вот тогда правильный ответ все-таки 55.55%.


          1. Ckpyt
            19.05.2017 15:30

            Там определена не вероятность вообще, а только для данной конкретной комбинации.
            Дальше надо было сделать шаг вперед: определить вероятности совпадения 0 для всех комбинаций и сложить их с вероятностью совпадения 1 для всех комбинаций. И вот тогда-то мы и получаем те самые 50%, которые имеем в реальных экспериментах.

            Я не привел всю цепочку рассуждений и вычислений в своей статье — она получается длинная и муторная.


      1. MiXei4
        20.05.2017 00:45
        +1

        Ничего не понимаю :) В первом пункте написано, что они могут открыть одну и ту же («первую» например) дверь на обоих коробках:

        1. Если они открывают одну и ту же дверь на обоих коробках, лампочки горят всегда одним и тем же цветом.

        Как из этого следует ваше:
        Т.е. это не совпадающие дверцы.

        ?


        1. Ckpyt
          20.05.2017 01:51

          Это следует напрямую из неравенств Белла.
          P[a+b+] <= P[a+c+] + P[b-c-],
          или, переводя на язык той статьи:
          P[R1R2] <=P[R1R3] + P[G2G3]
          Т.е. вероятность совпадения результатов в первом и втором окне в одной позиции всегда будет меньше или равно вероятности совпадения результатов в первом и третьем окне в той же позиции плюс вероятность совпадения результатов во втором и третьем окне в противоположной позиции.
          Так же это следует и из рассматриваемых уравнений в самой статье.
          Если вы внимательно будете смотреть на логику происходящего, то увидите, что рассматриваются комбинации одного окна с двумя другими, а не тремя другими.
          Та логика, которую приводят в переведенной статье, является ошибочной, что я и указал.

          А вот с логикой Белла надо разобраться. Сижу, курю теорвер вкупе с квантовой механикой… завораживает, аж спать не хоцца :-)


  1. paulgray
    19.05.2017 13:42

    все ушли читать статью пятилетней давности…


  1. Fortop
    19.05.2017 14:00
    +1

    пост пятилетней давности. Вот он:
    geektimes.ru/post/225583

    8 июня 2014 в 16:54

    Как у вас там дела в 2019-м?


    1. Ckpyt
      19.05.2017 14:03

      Упсссс… у меня было открыто несколько статьей по квантовой механике и я перепутал вкладки… сорри :-)


      1. Fortop
        19.05.2017 14:09
        +1

        Да ну квантовая механика как раз в действии.

        Нессиметричное течение времени.


  1. Leoon
    19.05.2017 14:54
    -2

    Теория вероятности говорит о вероятности. Но нет доказательства в реальности, что это будет 66% или 55,55% потому что невозможно провести такой эксперимент в полностью изолированной системе. И на практике, с человеческим везением можно получить совершенно разные результаты даже в бесконечно долгий промежуток времени. Напишите программу и открывайте двери руками, а не программой. И увидите результат. Они у всех будут разные. По этому и существует только Теория относительности.


    1. Ckpyt
      19.05.2017 14:56

      Именно поэтому я, беря миллион сравнений, получаю не 50% а целых 50.0251.
      Именно из-за того, что это вероятности :-)


      1. Leoon
        19.05.2017 14:59
        -1

        да, это машина, она достаточно точно отсчитывает нажатия, а человеческий мозг плохо работает с циклами. Это легко симулировать, сделать рекурсивный рандомайзер хотя бы глубиной в 3. И уже совсем все будет не так. Рандомайзеры сильно не случайные. Вернее они псевдослучайные.


        1. Ckpyt
          19.05.2017 15:02

          Я отследил и это. Я смотрел сколько всего выпало 0 и 1 и вывел процент выпадения. 49.9968 50.0032


          1. Leoon
            19.05.2017 15:05
            -1

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


            1. Ckpyt
              19.05.2017 15:10

              Белл не проводил экспериментов, он рассуждал логически. И как раз в его рассуждения, возможно, закралась ошибка. Эксперименты проводили потом… Много-много раз, разными способами и разными людьми. Можете почитать об этом в английской вики.
              https://en.wikipedia.org/wiki/Bell_test_experiments

              Так что, вероятность ошибки ВСЕХ экспериментов ничтожно мала.


    1. ibessonov
      19.05.2017 15:03
      +1

      По этому и существует только Теория относительности.

      Теория Относительности тут совсем непричём.
      Теория вероятности говорит о вероятности.

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

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


      1. Leoon
        19.05.2017 15:10
        -2

        Смотря ведь где не рассматривают. Смотря какая точность нужна. Если не учесть отклонение в 0,1 процент при старте ракеты, то можно ее лишится. Имеется виду, не процент направления, а скажем процент изгиба сопла.
        И так же даже 5% в отклонении в детали автомобиля Ваз не играет не какой роли, если ее смогли продать до того, как это выяснилось.


  1. Livid
    24.05.2017 18:41

    «Пост трехлетней давности» на самом деле довольно опосредованно относится к оригинальной публикации Белла. Это некая «напальцевая иллюстрация», которая появилась уже сильно потом. В посте конечно косяк, но не там, где Вы его ищете.

    Вероятности для «классического» случая правильные, в рамках допущений. И да, «случайно выбранные» оси могут совпадать. А вот квантовомеханическая вероятность для описанных условий никак не получается 1/2. Напротив, не меньше 7/9, если для любой пары векторов a, b, c скалярное произведение неотрицательно (т.е. угол между любыми векторами не больше ?/2).
    Это если я правильно вспомнил квантмех. Поскольку меня ему учили лет 10 назад, и с тех пор я про него почти не вспоминал, возможно я где-то напорол. Выкладки приводить не буду, ибо лень бороться с формулами.

    P.S. Забыл уточнить. Считаем, вслед за Беллом, что векторы a,b,c лежат в одной плоскости. Иначе умеренно бессмысленно.


    1. Livid
      24.05.2017 19:51

      А, таки все же напорол, 1/2 получается, если углы между векторами 120?. И в силу симметрии предположение о равных вероятностях для «классического» расчета не кажется совсем уж взятым с потолка, хотя это и не принципиально.


  1. Livid
    24.05.2017 21:17
    +1

    В общем все же напишу выкладки, раз уж до меня дошло как интерпретировать эти дурацкие дверцы.


    Есть источник запутанных частиц и два детектора, A и B, имеющих по три режима 1, 2, 3, соответствующих трем направлениям измерения:


    1. Вдоль некоторой оси z, ? = 0?
    2. Под углом 120? к оси z, ? = 120?
    3. Под углом 240? к оси z, ? = -120?

    Иными словами, оси измерения расположены в форме буквы Y. Подчеркиваю, оси находятся в одной плоскости. Для простоты считаем, что эта плоскость перпендикулярна направлению падения частицы


    Проводим серию измерений, причем в каждом измерении независимо выбираем режим каждого детектора с одинаковой вероятностью. Подчеркиваю, вариант, когда оси измерения на детекторах совпадают, выпадает с вероятностью 1/3*1/3*3 = 1/3.


    Вариант со скрытыми параметрами ("классический") по сути означает, что результат измерения спина каждой частицы вдоль каждой оси заведомо определен. Всего 8 вариантов для каждой частицы. В нотации 1 = спин "вверх" (вдоль оси измерения), 0 = спин "вниз" (против оси измерения).


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


    Тогда со скрытыми параметрами имеем следующие варианты (в заголовке %детектор%%режим%, т.е. А1 например — это детектор А, режим 1):


     A1 | A2 | A3 | B1 | B2 | B3
    ----|----|----|----|----|----
     0  | 0  | 0  | 1  | 1  | 1 
     0  | 0  | 1  | 1  | 1  | 0
     0  | 1  | 0  | 1  | 0  | 1 
     0  | 1  | 1  | 1  | 0  | 0
     1  | 0  | 0  | 0  | 1  | 1 
     1  | 0  | 1  | 0  | 1  | 0
     1  | 1  | 0  | 0  | 0  | 1 
     1  | 1  | 1  | 0  | 0  | 0

    Теперь, вероятность режима на каждом из детекторов 1/3. Посчитаем, какова вероятность того, что на одном детекторе будет 0, а на другом 1 для каждого из вариантов (для простоты можно просто посчитав комбинации):


     A1 | A2 | A3 | B1 | B2 | B3 | Вероятность
    ----|----|----|----|----|----|-------------
     0  | 0  | 0  | 1  | 1  | 1  | 1
     0  | 0  | 1  | 1  | 1  | 0  | 5/9
     0  | 1  | 0  | 1  | 0  | 1  | 5/9
     0  | 1  | 1  | 1  | 0  | 0  | 5/9
     1  | 0  | 0  | 0  | 1  | 1  | 5/9
     1  | 0  | 1  | 0  | 1  | 0  | 5/9
     1  | 1  | 0  | 0  | 0  | 1  | 5/9
     1  | 1  | 1  | 0  | 0  | 0  | 1

    Ясно, что независимо от того, каковы вероятности каждого из вариантов, вероятность ?? того, что на одном детекторе 1, а на другом 0, не может быть меньше 5/9. ?? ? 5/9.


    Теперь рассмотрим квантовомеханическую вероятность. Опуская строгий вывод, приведу напальцевое рассуждение.


    Вполне очевидно, что для коллинеарных осей (? = 0), вероятность получить разные результаты P(0) = 1 (поскольку спины противонаправлены при измерении вдоль одной оси).


    Для антиколлинеарных осей (?=180?), вероятность получить противоположные результаты P(180?) = 0 (поскольку спины противонаправлены при измерении вдоль одной оси, и противонаправленные оси всегда дают одинаковый результат).


    Так же известно, что для ортогональных осей (? = ±90?) спины независимы, то есть вероятность получить 0 или 1 на любом детекторе 1/2, и тогда вероятность что они не совпадут P(±90?) = 1/2.


    Общая формула P(?) = cos?(?/2). Это можно показать строго, рассмотрев два измерения на одной частице, просто применив квантово-механический оператор проекции, но там вылезают матрицы, бра- и кет-векторы, в общем расписывать муторно.


    Если режимы совпадают, оси совпадают, ?=0, вероятность получить противоположные результаты на детекторах P(0) = 1. Если же они не совпадают, то оси отличаются на ? = ±120?, P(±120?) = cos?(±120?/2) = cos?(±60?) = 1/4.


    Рассмотрим варианты (в заголовке — детектор, в строке — режим):


     A | B | Вероятность
    ---|---|-------------
     1 | 1 | 1
     1 | 2 | 1/4
     1 | 3 | 1/4
     2 | 1 | 1/4
     2 | 2 | 1
     2 | 3 | 1/4
     3 | 1 | 1/4
     3 | 2 | 1/4
     3 | 3 | 1

    Вероятность режима на одном детекторе 1/3, режимы независимы, вероятность конкретной комбинации режимов детекторов A и B 1/3*1/3=1/9, в результате вероятность получить разные результаты на детекторах, с учетом случайности режимов, ?? = (3 + 6/4)/9 = (3+3/2)/9 = (1 + 1/2)/3 = (3/2)/3 = 1/2.


    Получаем, в варианте со скрытыми параметрами ?? ? 5/9, а в квантово-механическом ?? = 1/2 < 5/9. ?? < ?? Это можно проверить экспериментально.


    У Белла углы не конкретизированы, поэтому там более общее рассуждение в ключе "можно выбрать такие углы, что будет значительная разница".


    В итоге: все нормально в том посте трехлетней давности, прямых ошибок нет. Но автор несколько увлекся аллегориями, и в результате только нагнал туману. У Белла тем более все нормально.


    1. Ckpyt
      24.05.2017 22:15

      Знаете, вы где-то ошиблись в первой части… Вот смотрите:

      #define TESTMAX 1000000
      
      struct ThreeWindowBox {
      	bool m_Window[6];
      };
      
      float percent(int in) {
      	return 100.0f *(((float)in) / (float)(TESTMAX));
      }
      
      int main(int argc, char** argv)
      {
      	//для тестирования Rand.
      	int alls[2];
      	alls[0] = 0;
      	alls[1] = 0;
      
      	int compare = 0;
      
      	ThreeWindowBox* allBoxes = new ThreeWindowBox[TESTMAX];
      
      	//заполняем позиции.
      	for (int i = 0; i < TESTMAX; i++) {
      		for (int window = 0; window < 6; window++) {
      			int tmp = rand() % 2;
      			alls[tmp]++;
      			allBoxes[i].m_Window[window] = tmp;
      		}
      	}
      
      	//А теперь ловим совпадения
      	for (int i = 0; i < TESTMAX; i++) {
      		int wind1 = rand() % 3;
      		int wind2 = rand() % 3 + 3;
      
      		if (allBoxes[i].m_Window[wind1] == !allBoxes[i].m_Window[wind2])
      			compare++;
      	}
      
      	float perCompare = percent(compare);
      	float perZero = percent(alls[0]) / 6;
      	float perOne = percent(alls[1]) / 6;
      
      	std::cout << perCompare << " " << perZero << " " << perOne;
      }
      


      выдает следующие результаты:
      49.9836 49.9976 50.0024


    1. Ckpyt
      24.05.2017 22:18

      Упс, сорри, есть небольшая ошибка


    1. Ckpyt
      24.05.2017 22:21

      Забыл, что генерируется не полностью случайная, а частично-случайная последовательность.
      Вот теперь все норм, и совпадает с вашими расчетами:

      #define TESTMAX 1000000
      
      struct ThreeWindowBox {
      	bool m_Window[6];
      };
      
      float percent(int in) {
      	return 100.0f *(((float)in) / (float)(TESTMAX));
      }
      
      int main(int argc, char** argv)
      {
      	//для тестирования Rand.
      	int alls[2];
      	alls[0] = 0;
      	alls[1] = 0;
      
      	int compare = 0;
      
      	ThreeWindowBox* allBoxes = new ThreeWindowBox[TESTMAX];
      
      	//заполняем позиции.
      	for (int i = 0; i < TESTMAX; i++) {
      		for (int window = 0; window < 3; window++) {
      			int tmp = rand() % 2;
      			alls[tmp]++;
      			allBoxes[i].m_Window[window] = tmp;
      			allBoxes[i].m_Window[window + 3] = !tmp;
      		}
      	}
      
      	//А теперь ловим совпадения
      	for (int i = 0; i < TESTMAX; i++) {
      		int wind1 = rand() % 3;
      		int wind2 = rand() % 3 + 3; //так как снимаем с другого детектора
      /*
      		//окна не должны совпадать!
      		while (wind1 == wind2)
      			wind2 = rand() % 3;*/
      
      		if (allBoxes[i].m_Window[wind1] == !allBoxes[i].m_Window[wind2])
      			compare++;
      	}
      
      	float perCompare = percent(compare);
      	float perZero = percent(alls[0]) / 6;
      	float perOne = percent(alls[1]) / 6;
      
      	std::cout << perCompare << " " << perZero << " " << perOne;
      }
      


      66.6364 24.9984 25.0016


      1. Livid
        25.05.2017 10:03
        +1

        Да, "внутреннее состояние" одной частицы должно полностью определять "внутреннее состояние" второй, то есть случайных параметров у пары запутанных частиц получается на самом деле 3, а не 6. Иначе беда с угловым моментом вселенной :)


        Честно говоря поленился подробно разбираться в Вашем коде (давно не трогал плюсы), но вот по идее более-менее эквивалентный код на питоне. Единственное, для простоты вместо того чтобы проверять неравенство бита и отрицания другого бита, я сравниваю, наоборот, равенство двух бит. Несложно показать, что это одно и то же (в булевой алгебре, ¬(A ? ¬B) ? A ? ¬(¬B) ? A ? B)


        import random
        
        ny = 0
        nn = 0
        nyprime = 0
        nnprime = 0
        
        for i in range(0,100000):
          a1 = random.choice([0,1])
          a2 = random.choice([0,1])
          a3 = random.choice([0,1])
        
          '''
          Внутреннее состояние одной частицы.
          У второй соответственно побитовое "не"
          '''
          s = [a1,a2,a3]
        
          '''
          Независимый выбор режимов детекторов
          '''
          v1 = random.choice(s)
          v2 = random.choice(s)
        
          '''
          Зависимый выбор, режимы не совпадают
          '''
          [v1prime, v2prime] = random.sample(s,2)
        
          '''
          v1 == v2 ? v1 != not v2
          '''
          if v1 == v2:
            ny += 1
          else:
            nn += 1
        
          if v1prime == v2prime:
            nyprime += 1
          else:
            nnprime += 1
        
        print('Независимые оси:', ny/(ny+nn),nn/(ny+nn))
        print('Несовпадающие оси:', nyprime/(nyprime+nnprime),nnprime/(nyprime+nnprime))

        Резульаты:


        Независимые оси: 0.66798 0.33202
        Несовпадающие оси: 0.50012 0.49988

        Немножко теоретически-вероятностных выкладок, если уж возникли сомнения (на правах гимнастики для мозга):


        Вероятности выше должны быть связяны отношением между независимыми осями P? и несовпадающими осями P? как
        P? = 1/3 + 2/3*P?
        (поскольку совпадающие оси очевидно выпадают в 1/3 случаев)


        А поскольку s у нас здесь выбирается с равномерным распределением (т.е. все варианты равновероятны), для P? получается 1/2 (ибо компоненты s независимы).


        Если же компоненты s зависимы (т.е. распределение s неравномерно), то P? может быть больше или меньше, но не менее 1/3. Показать довольно просто.


        Так как с точки зрения совпадения/различия двух разных бит, у s всего два варианта, xxx и xxt (t ? x), причем для первого из них вероятность совпадения P??? = 1, то достаточно прикинуть вероятность совпадения P??? для второго:


        P??? = 1/3*1/2 + 1/3*1/2 + 1/3*0 = 1/3 (? вероятность выпадения i-го бита * вероятность выпадения бита с тем же значением из двух оставшихся).


        В таком варианте P? = ? P??? + (1 – ?) P???, 0 ? ? ? 1, P? = ? (P??? – P???) + P??? => P??? ? P? ? P???. Тогда P? ? 1/3 и P? ? 5/9.


        Можно отметить, что вариант равномерного распределения s соответствует ? = 2/8 = 1/4.


        Собственно получить эти 5/9 в программе можно запретив состояния s=000 и s=111 (? = 0).