Pull to refresh

Как ошибся Белл (если статья привела правильный пример)

Reading time3 min
Views7.5K
Не так давно, на этой неделе, я наткнулся на пост трехлетней давности. Вот он. Если вы будете его внимательно читать, то наткнетесь на то, что возмутит вас до глубины души. Если, конечно, вы понимаете что такое теория вероятностей. Речь об этом отрывке:
«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 — свои.

И вот как это опровергнуть/доказать с точки зрения скрытых параметров я пока не знаю, но впереди все выходные!
Кто хочет — присоединяйтесь :-)
Tags:
Hubs:
Total votes 22: ↑15 and ↓7+8
Comments38

Articles