Парадокс двух конвертов. Part 2 — C#.

Доброго времени суток!

Сегодня, во времена популяризации покера, актуальными становятся алгоритмы увеличения прибыли при недостаточном количестве информации. Многие занимаются вопросами нахождения наиболее эффективных алгоритмов.
Существует великое множество вероятностных задач и парадоксов, но особое место среди них занимает парадокс (задача) о двух конвертах.
Теоретические аспекты очень подробно описаны на википедии, возможные решение предложены на мембране.
Также эта тема уже обсуждалась на Хабре.
Я же предлагаю вашему вниманию реализацию данного парадокса на C#.
Первым делом я сделал GUI-версию.

image

Алгоритм, получился достаточно неплохим, но весьма примитивным. Все дело в том, что точка принятия решения — это среднее значение всех левых конвертов. Левый конверт — который всегда вскрывается.
<source lang="cs">
if (leftValue < LimPoint) {
	totalMoney += rigthValue;
}
else {
	totalMoney += leftValue;
}
</source>

И эта точка в конечном счете стремится к середине диапазона значений функции генерирующей количество денег в конверте.
Тогда я решил, что интересно будет анализировать последние N значений. Для примера взял N = 20. И реализовал еще несколько алгоритмов:
  • всегда менять конверт
  • никогда не менять конверт
  • чередовать выбор
  • менять случайным образом
  • менять в зависимости от среднего значения всех левых конвертов
  • в зависимости от последних N левых конвертов
  • менять, опираясь на последнее значение
Ну и конечно же, все это реализовано в консольном варианте.

image

Где TM — это количество денег (total money), а T — количество угаданных удвоений (True). «Т» никак не влияет на принятие решения.
Все вычисления производятся в отдельном потоке (
System.ComponentModel.BackgroundWorker
), а среднее значение последних N элементов вычисляются с помощью очереди FIFO (
System.Collections.Queue
).

Исходый код программы GUI
Исходый код программы Console
Готов реализовать самый эффективный алгоритм. Буду рад любым идеям.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.