парадокс конвертов
От: Шебеко Евгений  
Дата: 24.08.09 11:05
Оценка:
Интересная статья почитать для общего развития.
Парадокс конвертов губит природную симметрию случая
Re: парадокс конвертов
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 24.08.09 12:26
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>Интересная статья почитать для общего развития.


Похоже, что я чего-то не понял. Попробовал изобразить простую игру с конвертами (ничего, что на lua?). И получаются всегда одинаковые суммы выигрыша.
Где я накосячил?
math.randomseed(os.time())

s1 = 0  --никогда не менять конверт
s2 = 0  --всегда менять конверт

for i = 1, 100000
do
    --генерация суммы в конверте
    --local sum_in_konv = math.random(1, 100)
    local sum_in_konv = 5 --Пусть даже сумма постоянная
    local k = math.random(1, 2)
    if
        k == 1
    then
        k1 = sum_in_konv
        k2 = 2 * sum_in_konv
    else
        k1 = 2 * sum_in_konv
        k2 = sum_in_konv
    end
    
    --выбор конверта
    local k = math.random(1, 2)
    if
        k == 1
    then  --выбран 1-й конверт
        s1 = s1 + k1
        s2 = s2 + k2
    else   --выбран 2-й конверт
        s1 = s1 + k2
        s2 = s2 + k1
    end
end
print(s1)
print(s2)
Re[2]: парадокс конвертов
От: Шебеко Евгений  
Дата: 24.08.09 12:58
Оценка:
N>Похоже, что я чего-то не понял. Попробовал изобразить простую игру с конвертами (ничего, что на lua?). И получаются всегда одинаковые суммы выигрыша.
Ну у меня не получаются во-первых. Наверное плохо генерируете случ. числа.
А во вторых статья немного не про это.

#include <iostream>
#include <string>
#include <time.h>


int main(int argc, char **argv)
{
    srand(time(0));
    unsigned long long s1=0;
    unsigned long long s2=0;

    for(unsigned i=0;i<100000;i++)
    {
        unsigned sum_in_konv=5;
        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;
        }

        k=rand()>(RAND_MAX/2);

        if(k)
        {
            s1+=k1;
            s2+=k2;
        }
        else
        {
            s1+=k2;
            s2+=k1;
        }
    }

    std::cout<<"s1="<<s1<<std::endl;
    std::cout<<"s2="<<s2<<std::endl;
}


s1=748450
s2=751550
Re[3]: парадокс конвертов
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 24.08.09 13:17
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

N>>Похоже, что я чего-то не понял. Попробовал изобразить простую игру с конвертами (ничего, что на lua?). И получаются всегда одинаковые суммы выигрыша.

ШЕ>Ну у меня не получаются во-первых. Наверное плохо генерируете случ. числа.

У тебя тоже, значит, не получилось. Начальная посылка статьи — при смене конверта должен увеличиться выигрыш:
sum_in_konv = 5
c = 3 * sum_in_konv / 2
print(c)
s2 = 0.5 * (c / 2) + 0.5 * (2 * c)
print(100000 * s2)

Т.е. в нашем случае C = 7.5, а s2 = 100000 * (5 / 4 * C) = 937500
Но этого не происходит ни у меня, ни у тебя.

ШЕ>А во вторых статья немного не про это.

Так я пытаюсь увидеть хотя бы проблему, о которой говорится в статье. Где она?
Re[4]: парадокс конвертов
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 24.08.09 13:22
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>У тебя тоже, значит, не получилось. Начальная посылка статьи — при смене конверта должен увеличиться выигрыш:

N>
N>sum_in_konv = 5
N>c = 3 * sum_in_konv / 2
N>print(c)
N>s2 = 0.5 * (c / 2) + 0.5 * (2 * c)
N>print(100000 * s2)
N>

N>Т.е. в нашем случае C = 7.5, а s2 = 100000 * (5 / 4 * C) = 937500
N>Но этого не происходит ни у меня, ни у тебя.

Блин, туплю, туплю. Не смотрите на этот бред.
Re[4]: парадокс конвертов
От: Шебеко Евгений  
Дата: 24.08.09 13:32
Оценка:
N>Так я пытаюсь увидеть хотя бы проблему, о которой говорится в статье. Где она?
Если я правильно понял, то идея такая.
Но у меня самого не получается это воспроизвести. Наверное нужен генератор действительно случайных чисел,
а не псевдослучайных.


#include <iostream>
#include <string>
#include <time.h>


int main(int argc, char **argv)
{
    srand(time(0));
    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;
        }

        
        k=rand()>(RAND_MAX/2);
        if(k)s1+=k1;
        else s1+=k2;

        s2+=k2;
    }

    std::cout<<"s1="<<s1<<std::endl;
    std::cout<<"s2="<<s2<<std::endl;
}
Re[5]: парадокс конвертов
От: gecko  
Дата: 24.08.09 17:37
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

>Но у меня самого не получается это воспроизвести. Наверное нужен генератор действительно случайных чисел,

>а не псевдослучайных.

По условию сумма не ограничена сверху.
Re[5]: парадокс конвертов
От: Sealcon190 Соломоновы острова  
Дата: 25.08.09 04:04
Оценка: +2
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>Но у меня самого не получается это воспроизвести. Наверное нужен генератор действительно случайных чисел,

ШЕ>а не псевдослучайных.

Тут дело не в генераторе Просто ты строишь эксперимент по условию задачи. Генерируешь два числа и с ними работаешь.

А чтобы что-то изменилось, надо его строить по ходу рассуждений. Генерировать сначала одно число (которое мы выбрали), потом второе.

Другими словами, ты только что доказал что источник парадокса — банальная ошибка в рассуждениях. Вера что при смене конвертов будет выигрыш — мракобесие (что кстати неудивительно, учитывая что направлено это всё на биржевых игроков).
Re: парадокс конвертов
От: Sealcon190 Соломоновы острова  
Дата: 25.08.09 05:53
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>Интересная статья почитать для общего развития.

ШЕ>Парадокс конвертов губит природную симметрию случая

В статье ход рассуждений неверный. "Если у нас в конверте 10$", и полетели обобщения. Между тем, вот это "если", оно просто обязано быть оформлено математически, поскольку имеет вероятностную основу.

Поясняю на пальцах. Вероятность выпадения любой пары чисел у нас одинакова, примем её за n.

Тогда фраза "если у нас в конверте 10$" означает следующее: с вероятностью n/2 у нас десятка из пары 10-5, и с вероятностью n/2 у нас десятка из пары 10-20.

Прекрасно, меняя конверт получаем взвешенную сумму: n/2 * 5 + n/2 * 20. Не меняя: n/2*10 + n/2*10. Всё по статье. Но обобщать это на все случаи категорически нельзя, потому как это условные вероятности, влияющие на соседние пары.

Для пояснения рассмотрим все пары конвертов, имеющие в составе десятку ( а не только те где десятка выбрана первой).

Вероятность конверт пара вс меняя вс не меняя

n/2 10 10-5 5*n/2 10*n/2

n/2 10 10-20 20*n/2 10*n/2

n/2 5 10-5 10*n/2 5*n/2

n/2 20 10-20 10*n/2 20*n/2

Статья для играющих на бирже лохов, имхо. Не верю что нормальный спец в тервере может такого не понимать.
Re: Ещё добавлю для понимания.
От: Sealcon190 Соломоновы острова  
Дата: 25.08.09 07:25
Оценка: 2 (1)
Парадокс происходит из-за необоснованного обобщения. Достаточно стандартная логическая ошибка, которую в этом случае непросто заметить.

Из предположения ("предположим мы вытянули конверт с 10$") делается обобщение на всё решение.

Это всё равно что в задаче "какова вероятность что оба ребёнка в семье — мальчики" рассуждать следующим образом: предположим что один из детей — мальчик. Тогда вероятность того что второй тоже мальчик — 1/2. Следовательно вероятность того что оба мальчики — 1/2.
Re[2]: парадокс конвертов
От: Шебеко Евгений  
Дата: 25.08.09 07:29
Оценка:
S>Вероятность конверт пара вс меняя вс не меняя
Насколько я понял всё же так
n/2 10   10-5   5*n/2     10*n/2
n/2 10   10-20  20*n/2    10*n/2
n/2 5    5-10   10*n/2    5*n/2
n/2 20   20-10  10*n/2    20*n/2

И что? Какой вывод следует из это системы?
Я не спорю, просто не понимаю.
Можно ещё и вывод из этой системы на пальцах
Желательно тоже в числах.

S>Статья для играющих на бирже лохов, имхо.

Статья общеобразовательная, к бирже вообще отношения не имеет.

Наоборот:

Понятно, что если игрок располагает информацией о приобретаемых финансовых инструментах (состояние компании, судебные дела против её менеджеров, урожай апельсинов в этом году или открытие нового месторождения нефти), он может составлять свой портфель осознанно. Но если ему не известно ничего, кроме текущей цены акции (или иного приобретения), и того, куда цена сейчас движется? Ни того, будет ли цена ещё падать, или позже начнётся рост? Ни того — является ли нынешняя цена максимальной, минимальной или позже будет огромный провал.


Но можно ли, допустим, применить следствие из парадокса Паррондо (или объяснения феномена конвертов) к фондовому рынку, то есть получить доход, комбинируя акции вроде игры АВВАВВ? Увы, парадокс требует, чтобы доходность по меньшей мере от одного инструмента зависела от величины текущего суммарного капитала (как выбор монеты от кратности уже выигранной суммы числу М), а это фикция. Или нет?




Мне вот интересно как они этого добились?

Ныне свыше 20 миллионов компьютерных симуляций, проведённых Макдоннелом и Эбботтом, показали, что стратегия Ковера позволяет получить больше денег в игре с конвертами, чем простой обмен. А ещё, открыли австралийские учёные, предопределённый обмен, когда игрок выбирает альтернативный конверт только в том случае, если увиденная в первом сумма меньше заранее и наугад выбранного им самим (игроком) значения, тоже работает.

Re[3]: парадокс конвертов
От: Sealcon190 Соломоновы острова  
Дата: 25.08.09 07:57
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>И что? Какой вывод следует из это системы?


Вывод следует простой — нет никакой разницы, будешь ты каждый раз менять конверт или нет.
Re[3]: парадокс конвертов
От: Sealcon190 Соломоновы острова  
Дата: 25.08.09 08:01
Оценка: 2 (1)
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>И что? Какой вывод следует из это системы?

ШЕ>Я не спорю, просто не понимаю.
ШЕ>Можно ещё и вывод из этой системы на пальцах
ШЕ>Желательно тоже в числах.

В смысле, если будешь менять конверты — взвешенная сумма получается 45*n/2. Если не будешь — тоже 45*n/2. Можешь расширять на любое количество пар чисел, результат будет тот же. Ценность подхода в том что он наглядно показывает, откуда берётся ошибочное решение.
Re[6]: парадокс конвертов
От: Шебеко Евгений  
Дата: 25.08.09 08:02
Оценка:
S>Тут дело не в генераторе Просто ты строишь эксперимент по условию задачи. Генерируешь два числа и с ними работаешь.
Меня смущает то, что нет какой-то чёткой зависимости между s1 и s2.
Как-бы по логике их стратегия может быть правильной, ошибочной или равнозначной.
И с большим к-вом итераций это должно быть видно.
Может получиться что s1>>s2 буквально во 2-3 старшем разряде, или
s1<<s2 точно так же, или s1~=s2.
Согласитесь, с большим к-вом итераций это не нормально. Поэтому и грешу на генератор.
Re[4]: парадокс конвертов
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 25.08.09 10:31
Оценка:
Здравствуйте, Sealcon190, Вы писали:

S>В смысле, если будешь менять конверты — взвешенная сумма получается 45*n/2. Если не будешь — тоже 45*n/2. Можешь расширять на любое количество пар чисел, результат будет тот же. Ценность подхода в том что он наглядно показывает, откуда берётся ошибочное решение.


Да, исходная проблема у них явно надуманна. Однако, если делать выбор о смене конверта на основании какой-либо предопределённой суммы, стабильный выигрыш появляется. Но мне данный факт представляется очевидным и никак не сенсационным.

math.randomseed(os.time())

s1 = 0  --никогда не менять конверт
s2 = 0  --всегда менять конверт
change_cout = 0 --число смен конвертов

for i = 1, 100000
do
    --генерация суммы в конверте от 1 до 200 денежных единиц
    local sum_in_konv = math.random(1, 100)
    --local sum_in_konv = 5
    local k = math.random(1, 2)
    if
        k == 1
    then
        k1 = sum_in_konv
        k2 = 2 * sum_in_konv
    else
        k1 = 2 * sum_in_konv
        k2 = sum_in_konv
    end
    
    --выбор конверта
    local sum_change = 10 --Если сума в открытом конверте меньше данной, то меняем конверт
    local k = math.random(1, 2)
    if
        k == 1
    then  --выбран 1-й конверт
        s1 = s1 + k1
        if (k1 < sum_change)
        then
            s2 = s2 + k2
            change_cout = change_cout + 1
        else
            s2 = s2 + k1
        end
    else   --выбран 2-й конверт
        s1 = s1 + k2
        if (k2 < sum_change)
        then
            s2 = s2 + k1
            change_cout = change_cout + 1
        else
            s2 = s2 + k2
        end
    end
end
print(s1)
print(s2)
print(s2 - s1)
print(change_cout)


Результат:

7609414 — выигрыш в результате обычной стратегии
7627214 — выигрыш в результате новой стратегии
17800 — разница
6461 — число смен конвертов

Т.е. в случае выпадения суммы, которой игрок может пренебречь, он рискует и в перспективе выигрывает. Вполне логично, но не сенсационно.
Re: парадокс конвертов
От: frogkiller Россия  
Дата: 25.08.09 10:39
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>Интересная статья почитать для общего развития.

ШЕ>Парадокс конвертов губит природную симметрию случая

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

Ничего удивительного нет, вспомни, например, коэфициент 1/sqrt(n-1) при оценке дисперсии, а не 1/sqrt(n-1) — тут должна быть проведена такая же коррекция.

2) предложенные программы имеют существенный недостаток: ограничение сверху максимального числа, следовательно нарушается гипотеза о равномерном распределении чисел. И очевидно этим пользуются при проведении "опытов" авторы статьи. Ведь если число больше MAX/2, это значит, что оно будет большим в паре. Если же брать не MAX/2, а произвольное "задуманное авторами число", что это всего лишь немного изменит параметры распределения, но не его характер.

Так что да, статья написана в расчёте на биржевых лопухов
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[5]: парадокс конвертов
От: Gadsky Россия  
Дата: 25.08.09 10:46
Оценка:
Здравствуйте, Nuzhny, Вы писали:


N>

N>7609414 — выигрыш в результате обычной стратегии
N>7627214 — выигрыш в результате новой стратегии
N>17800 — разница
N>6461 — число смен конвертов

N>Т.е. в случае выпадения суммы, которой игрок может пренебречь, он рискует и в перспективе выигрывает. Вполне логично, но не сенсационно.

Ваш опыт верен в предположении равномерного распределения базовой суммы в интервале (1, 100). Если взять границу решения > 190, то выигрыш при смене конверта будет меньше, не так ли? Так что оценкой тут будет не возможность пренебречь некоторой суммой, а априорное знание о распределении суммы.
Re[6]: парадокс конвертов
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 25.08.09 11:55
Оценка:
Здравствуйте, Gadsky, Вы писали:

G>Ваш опыт верен в предположении равномерного распределения базовой суммы в интервале (1, 100). Если взять границу решения > 190, то выигрыш при смене конверта будет меньше, не так ли? Так что оценкой тут будет не возможность пренебречь некоторой суммой, а априорное знание о распределении суммы.


Мы же всё таки не в неизвестной вселенной играем в кости с местным богом. Даже на бирже можно примерно знать ограничение максимального разброса котировок.
Re: парадокс конвертов
От: Кодт Россия  
Дата: 25.08.09 12:34
Оценка:
Здравствуйте, Шебеко Евгений, Вы писали:

Баян: Игра со шкатулками
Автор: nikov
Дата: 31.07.08
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[6]: парадокс конвертов
От: komaz Россия  
Дата: 26.08.09 12:42
Оценка: +1
Здравствуйте, Sealcon190, Вы писали:

S>Здравствуйте, Шебеко Евгений, Вы писали:


ШЕ>>Но у меня самого не получается это воспроизвести. Наверное нужен генератор действительно случайных чисел,

ШЕ>>а не псевдослучайных.

S>Тут дело не в генераторе Просто ты строишь эксперимент по условию задачи. Генерируешь два числа и с ними работаешь.


S>А чтобы что-то изменилось, надо его строить по ходу рассуждений. Генерировать сначала одно число (которое мы выбрали), потом второе.


S>Другими словами, ты только что доказал что источник парадокса — банальная ошибка в рассуждениях. Вера что при смене конвертов будет выигрыш — мракобесие (что кстати неудивительно, учитывая что направлено это всё на биржевых игроков).


Если генерировать сначала одно число (выбирать первый конверт), потом с вероятностями .5 это число делить/умножать на 2, то честно вылезает 5/4 для второго конверта:
proc getAmount {} {
  return [expr {rand() * 1000}]
}

#Returns 1 if we took envelope with smaller amount
proc isLower {} {
  return [expr {rand() < 0.5}]
}

set s1 0
set s2 0

set repeatCount 100000

for {set i 0} {$i < $repeatCount} {incr i} {
  set amount [getAmount]
  set s1 [expr {$s1 + $amount}]
  if {[isLower]} {
    set amount [expr {$amount * 2}]
  } else {
    set amount [expr {$amount / 2}]
  }
  set s2 [expr {$s2 + $amount}]
}

puts "s1 = $s1"
puts "s2 = $s2"
puts "s1/s2 = [expr {$s1/$s2}]"
puts "(s1/s2) / (4/5) = [expr {$s1/$s2*5/4}]"


Результаты (на мильоне итераций):
ivan@ivan-desktop:~/temp$ tclsh envelopes.tcl
s1 = 500029203.69417316
s2 = 624746691.645451
s1/s2 = 0.800371111013332
(s1/s2) / (4/5) = 1.000463888766665
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.