Здравствуйте, Шебеко Евгений, Вы писали:
ШЕ>Мне вот интересно как они этого добились? ШЕ>
ШЕ>Ныне свыше 20 миллионов компьютерных симуляций, проведённых Макдоннелом и Эбботтом, показали, что стратегия Ковера позволяет получить больше денег в игре с конвертами, чем простой обмен. А ещё, открыли австралийские учёные, предопределённый обмен, когда игрок выбирает альтернативный конверт только в том случае, если увиденная в первом сумма меньше заранее и наугад выбранного им самим (игроком) значения, тоже работает.
Я думаю на мембране при переводе просто чего-то недопоняли, и реальная задача над которой народ бьётся лишь похожа на парадокс конвертов.
Здравствуйте, Sealcon190, Вы писали:
S>Здравствуйте, Шебеко Евгений, Вы писали:
S>Я думаю на мембране при переводе просто чего-то недопоняли, и реальная задача над которой народ бьётся лишь похожа на парадокс конвертов.
Если бы допоняли, то было бы не о чем писать.
Объяснение парадокса очень простое: неявно предполагается, что сумма имеет равномерное распределение, но равномерное распределение может быть только на множестве конечной длины.
Здравствуйте, komaz, Вы писали:
K>Если генерировать сначала одно число (выбирать первый конверт), потом с вероятностями .5 это число делить/умножать на 2, то честно вылезает 5/4 для второго конверта:
... K>Результаты (на мильоне итераций): K>
И сумма выигрыша после многих повторений имеет такое соотношение:
В твоём случае:
s1_ = x, s2_ = 5/4 x
Если генерировать сразу, то:
s1 = s2 = 9/8 x
Или:
s1_ + 1/8 x = s1 = s2 = s2_ — 1/8 x
>Допустим, вы увидели $10. Стало быть, в другом конверте лежат либо $5, либо $20 с вероятностью 50 х 50. По теории вероятности средневзвешенная сумма в конверте B равна: 0,5 х $5 + 0,5 х $20 = $12,5.
Весь "парадокс" тут в том, что формула для равномерного распределения применятся к неравномерному распределению.
Здравствуйте, __kot2, Вы писали:
>Заключается она в следующем. Нужно менять или не менять конверты в каждом заходе случайным образом, но с вероятностью, которая зависит от суммы, увиденной в первом конверте.
а мужичок, хоть и старый уже, а правильно допер, что, даже если мы ничего не знаем о распределении (если знаем — задачка элементарна) в большинстве выдаваемые конверты надо исследовать на матожидание и от него отталкиваться при принятии решения об отклонении или принятии. хотя, может он имел в виду угадать матожидание — тоже, в принципе, способ, особенно если знать лично того, кто конверты выдает
Здравствуйте, __kot2, Вы писали:
>>Допустим, вы увидели $10. Стало быть, в другом конверте лежат либо $5, либо $20 с вероятностью 50 х 50. По теории вероятности средневзвешенная сумма в конверте B равна: 0,5 х $5 + 0,5 х $20 = $12,5. __>Весь "парадокс" тут в том, что формула для равномерного распределения применятся к неравномерному распределению.
поясню немного.
допустим, перед нами держат конверт, содерж х денег (назовем этот конверт "ведущим"), потом берут, подбрасывают монетку. орел — кладут в другой конверт (назовем его ведомый) х/2 денег, решка — крадут в него x*2. тогда всегда разумнее выбрать ведомый, в нем матожидание будет больше.
если же мы не знаем, какой конверт в руке — ведущий или ведомый, то стратегия отказа не даст ничего, хоть статья и утверждает обратно. гон, кароче, какой-то в статье. журналист просто по ходу не понял про че пишет и все переврал.
For example, say the first envelope you pick has $10, so that the other envelope has either $20 or $5. Then you can calculate the expected value (i.e. the probability-weighted sum of the possible values) of the second envelope, assuming that each possibility has a 50% chance: (0.5 x $5) + (0.5 x $20) = $12.50
Похоже, что эти ученые не особо то разбираются в математике.
Если немного схитрить, и знать максимальное значение, что в реальной жизни не так уж сложно,
то можно получить результат.
Подводить теорию под полученый результат не берусь.
#include <windows.h>
#include <iostream>
#include <string>
#include <time.h>
void process()
{
srand(GetTickCount());
unsigned long long s1=0;
unsigned long long s2=0;
for(unsigned i=0;i<1000000;i++)
{
unsigned sum_in_konv=rand();
bool k=rand()>(RAND_MAX/2);
unsigned k1,k2;
if(k)
{
k1=sum_in_konv;
k2=2*sum_in_konv;
}
else
{
k1=2*sum_in_konv;
k2=sum_in_konv;
}
s1+=k1;
if(k1>RAND_MAX)s2+=k1;//RAND_MAX не весь интервал!!!, а его половинаelse s2+=k2;
}
std::cout<<"s1="<<s1<<" "<<"s2="<<s2<<" s2/s1="<<(100.0*s2/s1)<<"%"<<std::endl;
}
int main(int argc, char **argv)
{
for(unsigned i=0;i<100;i++)
process();
}
Парадокс любопытный. Как в статье сказано, возникает из-за не учета зависимости испытаний, и неправильного использования матожидания.
Вот другой пример. Допустим нам предлагают сыграть в игру: ставим сумму, подбрасываем монетку и с вероятностью 50% на 50% нам эту сумму либо поделят пополам, либо удвоят. Матожидание (x*2 + x*0.5)/2=1.25*x
Получается на каждой игре +25% в среднем навариваемся.
Что теперь будет если сумма ставок меняется.
Например играем 2 миллиона раз по той же схеме, на каждую игру ставим весь текущий капитал.
Ожидаемая сумма после этих игр та же самая что и была в начале(с небольшой погрешностью). Т.е. с вероятностью 50% на 50% у нас либо уменьшится капитал, либо увеличится (хотя подсчитали что на каждой игре +25% в среднем капитал увеличивается).
Т.е. мильён раз X умножится на 2 и мильён раз на 0.5 в результате останемся при своих.
Но матожидание для 2 мильёнов игр будет фантастическое (на земле столько денег нету). Но матожидание нам никто не выплотит. Расчитывать можно только на медиану. А медиана показывает что останемся при своих.
А вот если бы ставка была фиксирована, например всегда равна 100. За мильён игр нам бы таки удалось получить эти +25% от 100 умноженные на мильён.
В этом парадоксе конвертов тоже ставки плавающие, так что вся ложная прибыль ликвидируется.
Т.е. смысл прадокса в том что напрашивается ложная ассоциация с такой задачей(постановкой эксперимента):
В выбраном конверте всегда оказывается постоянная сумма, например 10 баксов.
И нужно выбрать либо оставить эту сумму, либо второй вариант где с вероятностью 50% на 50% либо сумма поделится на 2, либо умножится.
И есть возможность повторять это испытание много раз.
Тогда действительно выгоднее выбирать второй вариант.
Но это совсем не такой эксперимент как в описании парадокса.
Здравствуйте, Sealcon190, Вы писали:
S>Парадокс происходит из-за необоснованного обобщения. Достаточно стандартная логическая ошибка, которую в этом случае непросто заметить. S>Из предположения ("предположим мы вытянули конверт с 10$") делается обобщение на всё решение. S>Это всё равно что в задаче "какова вероятность что оба ребёнка в семье — мальчики" рассуждать следующим образом: предположим что один из детей — мальчик. Тогда вероятность того что второй тоже мальчик — 1/2. Следовательно вероятность того что оба мальчики — 1/2.
Это все хорошо. Даже если авторы статьи где то намухлевали, но парадокс то остается. ИМХО, это вопрос довольно серьезный.
Если уйти от размазанности задачи и необоснованных обобщений. А поставить вопрос ребром.
Человека в принудительном порядке заставляют играть в игру, на конкретном алгоритме приведенном ниже.
Если кратко. Для суммы лежащей в первом конверте ГСЧ создает случайные числа в интервале $2 ... $1E5 (от двух баксов до ста тыщ).
Т.е. игроку не дается право выбирать первый конверт, а именно такой ГСЧ подсовывает сумму в первом конверте.
Для второго конверта, как и в оригинальном условии задачи, игрок сам выбирает брать или не брать. Соответственно, сумму из первого конверта умножит или разделит на два.
Проводится 1е7 игр, бабки накапливаются с каждой игрой.
Вопрос сколько бабок будет если никогда не брать второй конверт и сколько если брать его всегда?
Если брать второй конверт будет в 1.25 раз больше. Это для конкретного реального алгоритма, за указанное 1е7 число игр. Никакими объяснениями этот факт не изменить. Кто не будет брать второй конверт — окажется в пролете. Остается только объяснить чем отличается приведенная схема генерации сумм в первом конверте, от реального случая где игрок сам выбирает первый конверт.
Сделать видимо это не просто.
На псевдослучайность ГСЧ свалить это не получится.
И еще вопрос, как объяснить результаты полученые на этом алгоритме, которые приведены ниже? В частности, как объяснить хак при помощи которого удалось выровнять прибыльность двух вариантов?
static class Envelopes
{
static Random _Rnd=new Random();
//игра заключается либо в делении на ProfitMultiplyer,
//либо в умножении на него. с вероятностью 50% на 50%const double ProfitMultiplyer = 2;
static double Game(double bet)
{
return (_Rnd.NextDouble() > 0.5 ? bet * ProfitMultiplyer : bet / ProfitMultiplyer);
}
// IsRandom==true, выбирать сумму в первом конверте случайно из диапазона.
// IsRandom==false, не случайно, проходить диапазон равным шагом, от начала до конца
// LimitProfits==true, если прибыль после взятия второго конверта превысит определенную величину,
// тогда отбросить это испытание.
// Возвращает число - во сколько раз будет больше прибыль если всегда выбирать второй конверт (а не первый).
//public static double PlaySeries(bool IsRandom,bool LimitProfits)
{
double sum1 = 0, sum2 = 0;
int Count = (int)1e7;
double LowerLimit = 2, UpperLimit = 1e5;
for (double i = LowerLimit; i <= UpperLimit; i+=(UpperLimit-LowerLimit)/Count)
{
double bet= IsRandom ?
(UpperLimit - LowerLimit ) * _Rnd.NextDouble() + LowerLimit :
i;
double gameResult=Game(bet);
if (!LimitProfits || gameResult < UpperLimit * Math.Sqrt(ProfitMultiplyer))
{
sum2 += gameResult;
sum1 += bet;
}
}
return sum2 / sum1;
}
}
Испытания похожи на задачу с конвертами, но есть отличия. Какие именно отличия влияют на результат?
Суть испытаний:
Выбирается диапазон возможных ставок =(2...100000)
Затем из диапазона выбирается число (аналог выбора первого конверта), и на такой размер ставки происходит одна игра.
Игра заключается либо в делении на ProfitMultiplyer, либо в умножении на него с вероятностью 50% на 50%
(аналог операции выбора второго конверта).
Проводится 1E7 игр, после каждой суммируется результат в sum2.
А также суммируются ставки в sum1 — это покажет сколько было бы прибыли ,если бы не играли
(т.е. не выбирали бы второй конверт, а оставили первый).
------------
Тест:
ProfitMultiplyer=2 (при выборе второго конверта,либо умножится на 2, либо разделится 2)
PlaySeries(true,false) -> 1.2499 //делали случайный выбор из диапазона, для суммы в первом конверте
PlaySeries(false,false) -> 1.2502 //прохождение диапазона последовательно с равным шагом (не случайно)
Если всегда берем второй конверт, прибыль в 1.25 раз больше (как и ожидалось).
Естейственно, не имеет значения выбирать сумму в первом конверте случайно из диапазона,
или этот диапазон проходить в цикле равномерно с постоянным шагом.
Теперь сжульничаем — если сумма лежащая во втором конверте превысит верхнюю допустимую границу
для первого конверта, тогда испытание выбрасывается в мусорку(как будто его не было).
Т.е. должно выполняться gameResult < UpperLimit
В этом случае результат будет 0.8, (выгоднее второй конверт не брать никогда — иначе наоборот в 1.25 раз меньше).
Если разрешить диапазон побольше, брать второй конверт станет выгоднее.
И при ограничении gameResult < UpperLimit * Math.Sqrt(ProfitMultiplyer) прибыль сравняется
(т.е. расширили диапазон на корень из двух). И результат 1.0001 (очень точно)
Причем если ProfitMultiplyer=10(во втором конверте сумма либо в 10 раз больше, либо в 10 раз меньше).
Тогда надо границу домножать на корень из 10. И результат будет в районе 1.0001.
Аналогично и для любых ProfitMultiplyer.
Вопрос. Откуда взялся в таком ограничении UpperLimit * Math.Sqrt(ProfitMultiplyer)
множитель в виде корня из ProfitMultiplyer ???
Появился то он там чисто эмпирическим путем(методом тыка угадал), но какое может быть теоретическое объяснение,обоснование его присутствия?
Только при его наличии прибыль получается одинаковая как при взятии второго конверта, так и без взятия.
Суть парадокса то, видимо, именно в этом. Т.к. вместе с правильным выводом, всплывает еще такая
схема испытаний, как приведена выше.
Выбор через ГСЧ в первом конверте случайной суммы, затем игра на эту сумму со вторым конвертом.
При такой схеме так и есть. Если *2 против *0.5, и всегда брать второй конверт, прибыль в 1.25 раз больше чем если не брать.
Если *10 против *0.1, прибыль со вторым конвертом в 5 раз больше.
Единственное что ее может уравнять это ограничитель: gameResult < UpperLimit * Math.Sqrt(ProfitMultiplyer)
И еще вопрос на засыку: А как связано такое испытание с ограничением, и реальная ситуация выбора конвертов?
Через квадратный корень то в реальности ничто не ограничивает вроде?
Суть парадокса в том, что Пенроуз называет R-процедурой. В один конверт кладут случайно выбранное число от 0 до бесконечности. В другой либо в два раза меньше, либо в два раза больше. В любой компьютерной модели вы не сможете выбрать случайное число от 0 до бесконечности. Если пробовать делать какие то упрощенные модели то объяснение результата будет простым.
Например, если в первый конверт выбирать число N из конечного множества, а во второй либо N*2 либо N/2, то очевидно надо выбирать второй конверт сразу же. В парадоксе же существенно то, что вы сначала выбираете один конверт, смотрите что в нем (смотреть = реализовать R-процедуру), а потом выбираете другой.
Можно попробовать так выбирать числа: в первый конверт выбирать число N из конечного заданного множества, а во второй число M равное либо N*2 либо N/2 но так, чтобы M тоже было из множества. Тогда такое рассуждение — в втором конверте будет либо 5 либо 20 равновероятно — не правильное, например для чисел больших медианы заданного множества. Я уверен, что численный эксперимент покажет, что обе стратегии покажут одинаковое матожидание)
Хотя компьютер не может придумать случайное число из бесконечного множества, можно попробовать применить какой нибудь ленивый алгоритм. Что нибудь типа такого — написать функцию, которая придумывает число X от 0 до 1, но это число возвращает не сразу все целиком, а по одному числу после запятой. Например так:
Все вычисления придется корректировать так, чтоб учитывать такую ленивость, это будет непросто, строгие вычисления невозможны, но нам не нужны строгие вычисления, нам достаточно посчитать матожидание Далее в случайно выбранный конверт кладем 1/X, а в другой 2/X и проводим эксперимент точно так, как указано в парадоксе, т.е.: выбираем случайно конверт, смотрим что там, выбираем другой, увеличиваем капитал. Чтоб каждый эксперимент не сильно влиял на капитал, можно поступать так: если в первом конверте мы встретили N, а в другом M, то капитал надо увеличить на M/N-1. По парадоксу каждый эксперимент будет увеличивать капитал либо на -0.5 либо на 1. Попробую в свободное время написать программу. Еще нюанс что если мы добиваемся равномерного распределения чисел на отрезке [0, 1] (да, 0 и 1 входят в числа, которые будет выдавать GetDigits ) то какое будет распределение в диапазоне (0, +бесконечность) ?
Здравствуйте, Serpenter_e, Вы писали:
S_>Все вычисления придется корректировать так, чтоб учитывать такую ленивость, это будет непросто, строгие вычисления невозможны, но нам не нужны строгие вычисления, нам достаточно посчитать матожидание Далее в случайно выбранный конверт кладем 1/X, а в другой 2/X и проводим эксперимент точно так, как указано в парадоксе, т.е.: выбираем случайно конверт, смотрим что там, выбираем другой, увеличиваем капитал. Чтоб каждый эксперимент не сильно влиял на капитал, можно поступать так: если в первом конверте мы встретили N, а в другом M, то капитал надо увеличить на M/N-1. По парадоксу каждый эксперимент будет увеличивать капитал либо на -0.5 либо на 1. Попробую в свободное время написать программу. Еще нюанс что если мы добиваемся равномерного распределения чисел на отрезке [0, 1] (да, 0 и 1 входят в числа, которые будет выдавать GetDigits ) то какое будет распределение в диапазоне (0, +бесконечность) ?
1) программу писать не надо. Матожмдание можно посчитать аналитически
2) 1/х будет распределён неравномерно...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>2) 1/х будет распределён неравномерно...
Согласен, но если все объяснение парадокса только в том, что распределение неравномерное, то это как то неинтересно. Невозможно построить равномерное распределение на бесконечности, но если в этом суть парадокса, то зачем же столько пафоса в статье на мембране и в этой платной статье за 40 евро? Другие части статьи — про стохастический эффект, про парадокс Паррондо и прочее — очень интересно
не понял что тут что губит, ну ок, в конвертах суммы 0.5n и 2n.
выбираю первую стратегию, N раз всегда беру первый попавшийся конверт, и ничего не меняю. С большим N мне приблизительно одинаковое количество раз выпадает и 0.5n и 2n. Получаю средний выигрыш 2.5n/2.
Теперь всегда меняю конверт, хорошо, получаю то же самое — 2.5n/2.
Здравствуйте, cvetkov, Вы писали:
C>Здравствуйте, Serpenter_e, Вы писали:
S_>>> Невозможно построить равномерное распределение на бесконечности
S_>>вот написал и понял что возможно C>как?
Равномерное здесь означает что между числами которые мы можем встретить в конвертах нет разницы. Да это не очень хорошее определение
Например такая функция —
f(x) = { 1 если существует целое n такое что 2^n=x; 0 если не существует }
правда площадь f(x) получается равной 0, надо как то докрутить, но идея ясна. Везде где f(x) не нулевая она равна 1. Поэтому все числа которые мы можем встретить в конвертах встречаются нам с одинаковой вероятностью. Это можно назвать равномерностью в каком то смысле.
Для парадокса достаточно построить такую f(x) что ее площадь на [0, +бесконечность) равна 1 и при этом для любого x: f(x/2)=f(2*x).
Здравствуйте, Serpenter_e, Вы писали:
S_>Согласен, но если все объяснение парадокса только в том, что распределение неравномерное, то это как то неинтересно. Невозможно построить равномерное распределение на бесконечности, но если в этом суть парадокса, то зачем же столько пафоса в статье на мембране и в этой платной статье за 40 евро? Другие части статьи — про стохастический эффект, про парадокс Паррондо и прочее — очень интересно
IMHO, тут есть какой-то недогон.
Вот смотри. Пусть мы знаем, как распределены суммы в конвертах.
Тогда мы можем написать условную вероятность того, что выбранный нами конверт содержит меньшую из сумм, при условии, что он содержит х рублей. Ну и тогда мы имеем простую задачку про то, что вот есть типа условная вероятность и то сё. И всё легко считается без всяких парадоксов.
А вот если мы начинаем строить всякие мутные предположения, типа того, что вероятность того, что во втором пакете больная из сумм -- 50%, то начинаются парадоксы.
Вот если взять какое-то реальное распределение, то там не 50% получается. Надо таки решить задачу:
При каком распределении сумм в конвертах условная вероятность того, что мы взяли меньший из конвертов при условии что в нём лежит Х рублей, не зависит от Х и равно 50%?
Что-то у меня постепенно созрело ощущение, что такого распределения сумм не существует...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Serpenter_e, Вы писали:
S_>Для парадокса достаточно построить такую f(x) что ее площадь на [0, +бесконечность) равна 1 и при этом для любого x: f(x/2)=f(2*x).
Не поможет! Ты не сможешь сделать члены этой последовательности равновероятными!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском