игрыстатьиматематические программырусский языкразноеоб авторе

Бридж-преферанс студия

en

Примечание. Начиная с версии 5.2 программа работает только под 64х битными операционными системами. Версия windows должна быть не ниже чем Windows 7.

Введение

Бридж-преферанс студия предназначена для решения бриджевых и преферансных задач на открытых картах. Программа бесплатная с открытым исходным кодом. Основные возможности:

Скриншоты

Решение для всех игроков и козырей

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

перейти к описанию опции для преферанса

Бридж

Бридж студия может быть полезной при проведении соревнований и комментаторам. Во первых она может найти оптимальный контракт для каждой пары север/юг и восток/запад. Во вторых программа может найти число взяток для каждого хода, например, найти лучший ход для атаки. Рассмотрим пример руки с реальных соревнований. Эта задача находится в библиотеке файл bts/www.doubledummy.net-Problem0423.bts.

север
В 5 4 3
Д В 8 2
-
Д В 8 5 2
запад
10 9
7 6 5
10 9 7 5 4
7 6 3
восток
Т К 7 6 2
К 9
Т Д
Т К 10 4
юг
Д 8
Т 10 4 3
К В 8 6 3 2
9

Каждый игрок может быть разыгрывающим и может заказать козырем любую масть или бескозырную игру. Программа может рассчитать сколько взяток берет каждая сторона для любого типа игры и для любого разыгрывающего. Например, если юг закажет игру без козыря, тогда пара север/юг возьмет шесть взяток, если же юг закажет козырем трефу, тогда пара возьмет только пять взяток. Таким образом, можно создать таблицу с числом взяток, при оптимальной игре, для каждого разыгрывающего и типа игры.

Таблица взяток

козырь
БК
и
г
р
о
к
север69566
восток74887
юг68556
запад74777

Теперь создадим таблицы достижимых и лучших контрактов для каждого разыгрывающего и типа игры.

Таблица достижимых контрактов

козырь
БК
и
г
р
о
к
север-3---
восток1-221БК
юг-2---
запад1-111БК

Лучшие контракты

север 3
восток1 2 2 1БК
юг 2
запад1 1 1 1БК

Преферанс

Рассмотрим одну из широко известных преферансных задач - мизер Ковалевской.

север
10 9 8 7
9 8
9 8 7
8
запад
Д В
В 7
Т К Д 10
9 7
восток
Т K
Т К Д 10
В
Д В 10

В преферансе, в отличие от бриджа, игрок, делающий первый ход, не зависит от игрока заказавшего контракт. Таким образом, когда программа ищет решение для всех игроков и козырей, то первый ход могут делать три игрока. В преферансе каждый из трех игроков может заказать четыре масти или игру без козырей или мизер - всего 6 вариантов. То есть получается всего 3*3*6=54 задачи.

Таблица взяток и достижимых контрактов

Программа считает число взяток и возможные достижимые контракты для каждого игрока.

первый ход - запад
число взяток
БКмизер
Запад314140
Север000002
Восток5959610
контракт
БКмизер
Запад-----+
Север------
Восток-9-96-
первый ход - север
число взяток
БКмизер
Запад014110
Север100000
Восток5959610
контракт
БКмизер
Запад-----+
Север-----+
Восток-9-96-
первый ход - восток
число взяток
БКмизер
Запад014110
Север000002
Восток5959910
контракт
БКмизер
Запад-----+
Север------
Восток-9-99-

Решение всех раскладов

Можно делать перебор всех раскладов когда первый ход еще не сделан или сделан один или несколько ходов. Карты, лежащие на столе считаются фиксированными и не учитываются при переборе. Опция будет активна пока у одного из игроков с неизвестными картами осталась хотя бы одна карта. Если у одного из игроков \(c_1\) незафиксированных карт, а у другого \(c_2\) незафиксированных карт, то общее число позиций равно биномиальному коэффициенту \(C^{c_1}_{c_1+c_2}\). Время расчета очень сильно меняется от задачи к задаче. Пока идет перебор программа показывает оставшееся время.

Примечание. Было замечено, что число вариантов увеличивается примерно в два раза, при увеличении на единицу числа неизвестных карт. Если обозначить суммарное число оставшихся карт за \(n=c_1+c_2\), тогда \(c_1\approx n/2\). Воспользовавшись формулой Стирлинга можно получить достаточно точную оценку биномиального коэффициента \(C^{n/2}_n\approx\sqrt{\frac{2}{\pi n}}\cdot 2^n\). Вывод формулы можно посмотреть в логической части. Ниже приводится таблица сравнений точного и приближенного значений.

nприближенное значениеточное значениепогрешность
2610 501 06310 400 6000.97%
20187 079184 7561.26%

перейти к описанию опции для преферанса

сравнение числа взяток с первым ходом и без него (преферанс)

Бридж

Для бриджа можно выбрать пару игроков с неизвестными картами север/юг или запад/восток. При смене пары игроков расчет останавливается и начинается заново. Максимальное число вариантов достигается когда у игроков по 13 карт. Число раскладов в этом случае равно C1326=10 400 600. Так как в бридже задачи считаются очень долго, то для получения более точной оценки, пока задача не рассчитана до конца, сначала все варианты разбиваются на куски по 40 элементов, а затем случайно перемешиваются. При этом если дождаться окончания расчета - будет полный перебор всех раскладов. Рассмотрим задачу где первый ход еще не сделан, общее число вариантов равно C1326.

задача102
играющийЮг
контракт2
бридж студия
Север
Т 8 5 4
Т 7 6 5 4 3
2
3 2
ЗападВосток
Д B 7 6 -
-  К Д B 10 9 8
К Д B 10 9 8 7
К Д B 10 9 8 7 Т 6
Юг
К 10 9 3 2
2
Т 6 5 4 3
5 4

Если первый ход сделан, то у запада остается 12 карт, его заход фиксируется. Тогда вариантов будет в два раза меньше C1225=C1325=5 200 300. Если сделать первые три или четыре хода в первой взятке, то число вариантов еще уменьшится и будет равно C1224= 2 704 156.

задача102
играющийЮг
контракт2
бридж студия
Север
Т 8 5 4
Т 7 6 5 4 3
2
3 2
ЗападВосток
Д B 7 6 -
-7  К Д B 10 9 8
К Д B 10 9 8 7
К Д B 10 9 8 Т 6
Юг
К 10 9 3 2
2
Т 6 5 4 3
5 4

Можно сделать несколько ходов и затем рассчитать расклады. В примере ниже у запада осталось 10 карт, у востока 9, число вариантов равно C1019=C919=92 378.

Преферанс

В преферансе делается перебор раскладов где неизвестные карты у вистующих или ловящих мизер игроков. Максимальное число вариантов достигается когда на руках у двух игроков по 10 карт. Число раскладов в этом случае равно C1020=184 756. Рассмотрим задачу Барбакару, где первый ход еще не сделан.

задачаpreferansRu 3
играющийЗапад
контракт7
бридж студия
Задача Барбакару. Запад заказал семь треф, помогите ему реализовать контракт.
Север
Д B 10
B 9
Т 9 7
К B
ЗападВосток
Т К 9
Т К 10  Д 8 7
К B Д 10 8
Т 9 8 7 Д 10

Запад и север сделали по одному ходу. Карты лежащие на столе фиксируются, у севера остается 9 карт, число вариантов уменьшается в два раза C919=C1019=92 378.

Сделано шесть ходов. У запада и востока осталось по 8 карт, карты лежащие на столе не учитываются. Число вариантов равно C816=12 870.

Сравнение числа взяток с первым ходом и без него

Рассмотрим две задачи, в первой игрок заказал мизер, во второй 6. Сравним когда первый ход сделан и первый ход не сделан. Ниже приведены таблицы для игр с первым ходом и без него. В любом случае если первый ход не сделан, то играющий получает лучшие условия, так как первый ход делает именно он. Суммарно по всем раскладам он берет не меньше взяток в случае немизерной игры и не больше взяток в случае мизера. В последней строке указано суммарное число взяток для всех раскладов.

с 1м ходомбез 1ого ходаразница
0103 9360105 430-1 494
113 832114 966-1 134
261226120
39 36239 582-220
435 612434 0321 580
520 754519 5821 172
6648655296
70700
80800
90900
1001000
293 248282 28610 962
задача1
играющийСевер
контрактмизер
бридж студия
Север
10 9 8 7
10 9 8 7
8
-
ЗападВосток
?9 ?
?  ?
? ?
? ?
293 248 = 13 832*1+612*2+9 362*3+35 612*4+20 754*5+648*6
282 286 = 14 966*1+612*2+9 582*3+34 032*4+19 582*5+552*6
10 962 = -1 134*1-220*3+1 580*4+1 172*5+96*6 = 293 248 - 282 286
с 1м ходомбез 1ого ходаразница
00000
10100
20200
30300
41 016497244
519 625519 025600
6104 9626101 7623 200
758 993762 771-3 778
81608226-66
90900
1001000
1 146 1921 150 790-4 598
задача3
играющийСевер
контракт6
бридж студия
Север
-
Т К 10
К B
Т 9 8 7
ЗападВосток
?Т ?
?  ?
? ?
? ?
1 146 192 = 1 016*4+19 625*5+104 962*6+58 993*7+160*8
1 150 790 = 972*4+19 025*5+101 762*6+62 771*7+226*8
-4 598 = 44*4+600*5+3 200*6-3 778*7-66*8 = 1 146 192 - 1 150 790

Расчет таблицы математических ожиданий

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

перейти к описанию опции для преферанса

Бридж

Зная число взяток, при расчете всех раскладов, можно посчитать математические ожидания числа очков для каждого из заказанных контрактов. Игрок может заказать контракт от 1 до 7. Также есть два дополнительных параметра, выбираемых пользователем:

тип контракта

уязвимость

Рассмотрим задачу. В этом раскладе пара север/юг берет восемь взяток.

задача102
играющийЮг
контракт2
бридж студия
Север
Т 8 5 4
Т 7 6 5 4 3
2
3 2
ЗападВосток
Д B 7 6 -
-7  К Д B 10 9 8
К Д B 10 9 8 7
К Д B 10 9 8 Т 6
Юг
К 10 9 3 2
2
Т 6 5 4 3
5 4

Перебрав 5 200 300 раскладов востока и запада получим таблицу вероятностей.

Посчитаем математическое ожидание очков пар север/юг и восток/запад при контракте юга 4. Будем считать что заказан простой контракт (без контры и реконтры) и без уязвимости. Тогда таблица очков будет следующей, нас интересуют случаи от 7 до 11 взяток.

Зная вероятности prt и очки Sns(t), Sew(t) можно посчитать математические ожидания. $$ e_{ns}=\sum\limits_{t=0}^{13} S_{ns}(t)\times pr_t \hspace{1cm} e_{ew}=\sum\limits_{t=0}^{13} S_{ew}(t)\times pr_t=-e_{ns} $$ Отсюда получаем значения математических ожиданий

Аналогично математические ожидания вычисляются для других контрактов (1-7) и параметров (тип контракта и уязвимость).

Преферанс

Зная число взяток при расчете всех раскладов, можно посчитать математические ожидания числа очков для каждого из заказанных контрактов. В случае игры с козырем или игры без козыря игрок может заказать от 6 до 10 взяток включительно, в случае мизерной игры контракт только один. Также есть два дополнительных параметра выбираемые пользователем:

число игроков

тип вистования (только для немизерных игр)

перейти к примеру для мизерной игры

Расчет таблицы математических ожиданий для немизерной игры.

Рассмотрим сдачу из передачи "Преферанс по пятницам". Юг, заложившись на плохой расклад, заказал 8, а мог заказать 9. Какой контракт для него более выгоден? Перебор всех раскладов позволяет узнать какой контракт для играющего даст ему больше очков. Рассмотрим четыре варианта: играют 3 или 4 игрока и контракт 8 или 9. Расчет будет вестись для конвекции Сочи.

задачаpreferansFriday
играющийЮг
контракт8
бридж студия
Север
К Д 7
Т B 7
К 8 7
B
Восток
B 9 8
  К Д 10 8
-
10 9 8
Юг
Т
-
Т Д B 10 9
Т К Д 7

Введем обозначения

Тогда число очков первого игрока, равно:

В общем виде очки n-ого игрока вычисляются по формуле

$$ S_n=\frac{10(p-1)}{p}pg_n + \sum\limits_{\substack{i=1 \\ i\neq n}}^pv_{ni}-v_{in}-\frac{10}{p} pg_i $$

В данной раздаче будем считать что играет игрок с номером 1, поэтому pg2=pg3=pg4=0 и vij=0 если i=1 или j≠1 при любом исходе расклада. Переберем все расклады севера и востока и получим, что при козыре бубна, юг берет от 7 до 10 взяток.

Будем считать, что север (игрок номер 2) вистует только на выгодных раскладах, то есть тогда когда юг не берет 10 взяток, а восток (игрок номер 3) всегда пасует. В этом случает север возьмет как минимум одну взятку и не получит ничего в гору. Тогда можно рассчитать сколько получит в пулю/гору юг и сколько вистов запишут на него остальные игроки для определенного числа взяток, а затем посчитать число очков для каждого игрока. Посчитанные очки выделены желтым цветом.

Теперь, зная вероятности и очки, можно посчитать математическое ожидание очков n-ого игрока оно равно \(e_n=\sum\limits_{t=0}^{10} S_n(t)\times pr_t\). В результате получаем две таблицы математических ожиданий. В обоих случаях заказывать девятерную игру выгоднее, чем восьмерную.

Расчет таблицы математических ожиданий для мизерной игры.

Рассмотрим задачу мизер Ковалевской. Север играет мизер, в этом раскладе он берет две взятки.

задачаpreferansRu 5
играющийСевер
контрактмизер
бридж студия
Мизер Ковалевской. Север хочет сыграть мизер, помешайте ему!
Север
10 9 8 7
9 8
9 8 7
8
ЗападВосток
Д B Т К
B 7  Т К Д 10
Т К Д 10 B
9 7 Д B 10

Введем обозначения

Переберем все расклады запада и востока, получим таблицу взяток севера.

В случае мизера висты не пишутся, только пуля или гора мизериста. 10 в пулю в случае если он не взял ни одной взятки (t=0), и 10×t в гору, если t>0. Теперь можно посчитать число очков игрока по формуле указанной выше. Если игрок не взял ни одной взятки (t=0), то S1(0)= 100×(p-1)p. Если же игрок взял хотя бы одну взятку (t>0), то S1(t)= – 100×(p-1)×tp. Теперь посчитаем очки ловцов. Воспользуемся тем, что суммарное число очков всех игроков должно быть равно нулю, и очки для всех ловцов равны. Получаем уравнение S1(t)+(p-1)S2(t)=0 отсюда S2(t)= – S1(t)p-1. Теперь можно построить таблицу очков для мизериста и ловцов для трех и четырех игроков в зависимости от числа взяток взятых игроком. Нас интересуют случаи где число взяток не больше шести.

Теперь посчитаем математическое ожидание очков n-ого игрока \(e_n=\sum\limits_{t=0}^{10} S_n(t)\times pr_t\). В результате получаем две таблицы математических ожиданий.

Анализ руки (панель лучших ходов)

Делая анализ руки, программа находит последовательность лучших ходов, до конца игры и отображает ее. Сначала находится лучший ход t1, затем лучший ход t2 после хода t1, потом лучший ход t3 после ходов t1 и t2 и так далее. Таким образом программа доходит до конца розыгрыша и находит оптимальную последовательность ходов. На любой из лучших ходов можно нажать, в этом случае будут сделаны ходы от начала анализа, до нажатого хода включительно. Если в момент нажатия программа делает расчет лучшего хода или оценку все ходов, то ничего не произойдет так как это опция неактивна.

Язык интерфейса

Для переключения языка выберите соответствующий пункт меню Язык. На данный момент доступны русский, английский и итальянский языки. Языковые настройки хранятся в текстовых файлах с расширением lng, что позволяет легко добавлять новые языки. Для создания нового языкового файла, достаточно скопировать уже существующий языковой файл и изменить копию в текстовом редакторе. Имя нового языкового файла должно быть названием языка на английском, например, french.lng. Затем просто скопировать новый файл в папку bin/lng. При желании можно добавить картинку страны в папку bin/images. Имя файла картинки должно совпадать с именем языкового файла и иметь расширение png. Если вы создали новый файл с языком пишите мне.

Примечание Язык интерфейса по умолчанию английский

Примечание Язык интерфейса автоматически запоминается при выходе из программы

Бридж/преферанс

Для переключение с бриджа на преферанс и наоборот выберите меню дополнительно/бридж или дополнительно/преферанс

Примечание Параметр автоматически запоминается при выходе из программы.

Загрузка задач из pbn и deep finesse файлов

Pbn файлы это portable bridge notation файлы, являющиеся принятым международным стандартом записи бриджевых сдач. Если у Вас есть pbn или df файлы, то можете загружать задачи из них. Файлы можно просто перетащить в окно решателя, можно также перетаскивать сразу несколько файлов. Можно перетаскивать папки с файлами, тогда будут считаны все файлы типов pbn, df, bts, pts, при этом если папка содержит подпапки то файлы из них тоже считываются.

Установка новой задачи

Для установки новой задачи выберите меню задача/новая или нажмите Ctrl+N - после этого все карты будут в у запада. Клик по карте находящейся у запада перемещает её к северу до тех пор пока у него меньше 13 карт в бридже или 10 карт в преферансе, после этого карты будут перемещаться к востоку и так далее. Если клик делается на карте, находящейся у севера, востока или юга, то она переместится к западу. При этом карты можно перетаскивать к игрокам север, юг, восток и при необходимости в снос. Можно использовать комбинацию Сtrl+левая клавиша мыши, тогда карта переместится к игроку, к которому вы в последний раз перетащили карту. Допустим, при установке задачи, вам надо перетащить из сноса к югу карты 2 3 9 10 6. Можно перетащить все эти карты к югу, но можно сделать и проще. Перетащим сначала к югу двойку пик, а после этого надо навести мышь на тройку бубён и нажать Сtrl+левая клавиша мыши. Тройка переместится к югу. Эту же операцию можно проделать с остальными картами. Затем установите козырную масть или игру без козыря, или мизер для преферансной задачи. Затем установите игрока в преферансе. Игрок или человек, играющий мизер выделяется подчеркиванием, для изменения игрока нужно просто нажать на соответствующую надпись. После этого устанавливается игрок, делающий первый ход. Он меняется нажатием на стрелку или кликом на область где будет стрелка, когда она укажет на нужного игрока. Если первый ход уже сделан - перетащите карту во внутренний квадрат. После этого стрелка будет указывать на следующего игрока. При необходимости можно сделать второй ход и так далее. После того как первая карта будет во внутреннем квадрате ход уже нельзя переключить.

Примечание Не обязательно устанавливать вначале у каждого игрока по 13 карт в бридже или по 10 в преферансе, можно по сколько угодно.

Разбор задачи

После установки задачи необходимо нажать кнопку или правую клавишу мыши. Если кнопка неактивна, значит установлена ошибочная задача, например, игроки имеют разное число карт. После этого программа выдаст лучший ход, число взяток для пар север/юг и запад/восток при оптимальной игре. Теперь можно опять нажать на кнопку или правую клавишу мыши, а также можно сделать ход самостоятельно. Ходы, которые делают компьютер и игрок, можно чередовать в любой последовательности. Можно отматывать ходы назад, для этого необходимо нажать на карту на столе, при этом произойдет отмена хода. Если нужно отменить все ходы начиная с карты захода, нажмите на карту захода. Для удобства пользователя на панели управления есть кнопки все ходы назад, ход назад, и ход вперёд, все ходы вперёд.

Редактирование задачи

В процессе разбора задачи можно менять параметры задачи, например, расклад, козырь, контракт и так далее. Для этого используйте меню задача/редактировать задачу или клавиши Ctrl+E, после этого карты не уйдут в снос, но при этом можно менять все параметры.

Сохранение задачи в html файл

Эта опция полезна для публикации задач в интернете, а также распечатки. Задачу можно сохранять с картинками или без них.

задачаHughDarwen 1
играющийЮг
контракт6БК
бридж студия
South to make six no-trumps. Difficulty 4 http://www.doubledummy.net/Problem0001.html
Север
-
Т 4 3 2
Д 3
Т К Д 4 3 2
ЗападВосток
Д B 45 10 9 8 7 6
10B  Д 9 8 7 6
К 7 6 5 4 B 10 9
B 10 9 -
Юг
-
Т 4 3 2
Д 3
Т К Д 4 3 2

Задача сохраняется в html файл так, что на неё можно ссылаться, перед задачей вставляется html-таг <p>, например, для этой задачи было вставлено <p id='HughDarwen1'>. Можно сохранять задачу с лучшим ходом, а также числом взяток пар [север-юг]/[запад-восток] обеих сторон при оптимальной игре. Любой из этих параметров или оба сразу можно отключить. Ниже приведена задача сохранённая с лучшим ходом и числом взяток.

задачаHughDarwen 1
играющийЮг
контракт6БК
лучший ходД
число взяток12/1
бридж студия
South to make six no-trumps. Difficulty 4 http://www.doubledummy.net/Problem0001.html
Север
-
Т 4 3 2
Д 3
Т К Д 4 3 2
ЗападВосток
Д B 45 10 9 8 7 6
10B  Д 9 8 7 6
К 7 6 5 4 B 10 9
B 10 9 -
Юг
-
Т 4 3 2
Д 3
Т К Д 4 3 2

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

Примечание. Вид сохраненной задачи зависит от языка интерфейса.

Конвертер

Можно конвертировать библиотеки pbn, deep finesse, bts, pts файлов в форматы pbn, deep finesse, bts, html. Чтобы сконвертировать файлы выберете меню дополнительно/конвертировать затем добавьте файлы, которые вы хотите конвертировать. Затем нажмите OK. Чтобы сохранить список текущих задач, нужно нажать меню задача/сохранить как... и выбрать нужный формат.

Оценка всех ходов

Опция оценки всех ходов полезна тем, что можно видеть сколько взяток берёт ходящая сторона не только при лучшем ходе, но и при всех других возможных ходах. Оценка всех ходов находится в меню опции. Возможно несколько вариантов

Режимы автоматической игры

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