From 4b191c8f10459e1c6915ba528c7cc67e2f00685d Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 3 Jun 2016 23:09:14 +0200 Subject: * lowest par contract issues documented --- doc/LowestParContract.en.md | 379 ++++++++++++++++++++++++++++++++++++++++++++ doc/LowestParContract.pl.md | 379 ++++++++++++++++++++++++++++++++++++++++++++ doc/README.en.md | 4 +- doc/README.pl.md | 6 +- 4 files changed, 763 insertions(+), 5 deletions(-) create mode 100644 doc/LowestParContract.en.md create mode 100644 doc/LowestParContract.pl.md diff --git a/doc/LowestParContract.en.md b/doc/LowestParContract.en.md new file mode 100644 index 0000000..9e82ec7 --- /dev/null +++ b/doc/LowestParContract.en.md @@ -0,0 +1,379 @@ +Issues with lowest par contract from equally profitable in MiniMaxDOS +===================================================================== + +MiniMaxDOS usually assumes that, from all equally profitable contracts, the lowest one is selected as par contract. + +That is not the case, though, if the number of tricks to be taken from both hands of the same side for the determined par contract, differs. Below are some of the examples taken from a test set. + +Example 1 +--------- + + + + + + + + + + + + + + + + + + + + +
W/None + ♠ K7
+ ♥ AK87
+ ♦ A87
+ ♣ AJ52 +
+ ♠ 9843
+ ♥ 53
+ ♦ QT4
+ ♣ Q983 +
+ ♠ AJ5
+ ♥ QT9
+ ♦ 9532
+ ♣ T76 +
+ ♠ QT62
+ ♥ J642
+ ♦ KJ6
+ ♣ K4 +
+ + + + + + + + + + + + + + + + +
NT
N1010111010
S1110111010
W23233
E23233
+
+ +North makes 4NT, South makes 5NT. Neither West nor East have a profitable sacrifice against 3NT from North/South. + +`MiniMaxDOS` reports `4NT South, +460` as par contract, instead of `3NT North/South, +460`. + +Example 2 +--------- + + + + + + + + + + + + + + + + + + + + +
N/EW + ♠ Q52
+ ♥ KQ974
+ ♦ AQ
+ ♣ AKT +
+ ♠ T73
+ ♥ 32
+ ♦ JT5
+ ♣ Q8764 +
+ ♠ AKJ94
+ ♥ AT6
+ ♦ K8642
+ ♣ == +
+ ♠ 86
+ ♥ J85
+ ♦ 973
+ ♣ J9532 +
+ + + + + + + + + + + + + + + + +
NT
N83947
S33837
W410496
E410496
+
+ +East/West make 4 Spades. 4 NT and 5 Hearts are both two down from North, but not from South. + +`MiniMaxDOS` reports `5Hx North, -300` as par contract, instead of `4NTx North, -300`. + +Example 3 +--------- + + + + + + + + + + + + + + + + + + + + +
W/EW + ♠ Q
+ ♥ KT97
+ ♦ J953
+ ♣ 9754 +
+ ♠ 94
+ ♥ AQ642
+ ♦ Q72
+ ♣ T83 +
+ ♠ AKJT3
+ ♥ J3
+ ♦ T64
+ ♣ AQ2 +
+ ♠ 87652
+ ♥ 85
+ ♦ AK8
+ ♣ KJ6 +
+ + + + + + + + + + + + + + + + +
NT
N44567
S44576
W88756
E98766
+
+ +East makes 3NT. North can sacrifice in 4 Clubs (but not in 4 Diamonds) and South can sacrifice in 4 Diamonds (but not in 4 Clubs), both three down. + +`MiniMaxDOS` reports `4Dx South, -500` as par contract, instead of `4Cx South, -500`. + +Example 4 +--------- + + + + + + + + + + + + + + + + + + + + +
W/None + ♠ J5
+ ♥ T872
+ ♦ KT76
+ ♣ K32 +
+ ♠ KT93
+ ♥ K54
+ ♦ A
+ ♣ AT986 +
+ ♠ Q87642
+ ♥ 9
+ ♦ 84
+ ♣ Q754 +
+ ♠ A
+ ♥ AQJ63
+ ♦ QJ9532
+ ♣ J +
+ + + + + + + + + + + + + + + + +
NT
N631093
S6310103
W6103310
E6103310
+
+ +East/West make 4 Spades. Both North and South can sacrifice in 5 Hearts, down one, but South can sacrifice in 5 Diamonds, down one, too. + +`MiniMaxDOS` reports `5Hx South, -100` as par contract, instead of `5Dx South, -100`. + +Example 5 +--------- + + + + + + + + + + + + + + + + + + + + +
E/EW + ♠ 9865
+ ♥ Q98
+ ♦ AJT4
+ ♣ 84 +
+ ♠ KQ732
+ ♥ AJ2
+ ♦ K53
+ ♣ AK +
+ ♠ J4
+ ♥ KT76
+ ♦ Q98
+ ♣ J762 +
+ ♠ AT
+ ♥ 543
+ ♦ 762
+ ♣ QT953 +
+ + + + + + + + + + + + + + + + +
NT
N33335
S33335
W10101098
E991088
+
+ +West makes 4NT, East makes 3NT. North/South do not have a level 4 sacrifice. + +`MiniMaxDOS` reports `4NT West, -630` as par contract, instead of `3NT West, -630`. + +Summary +------- + +Example 5 is explicable. Reporting 4NT as par contract may be useful to indicate the one trick difference between declaring from both hands. + +Unfortunately, that does not explain Example 1, where par contract is reported a level lower than highest makeable contract and not two levels lower. + +The behavior is inconsistent with Example 4, where the contract which differs for both hands is not indicated as par, and Examples 2-3 show that kind of indication to be problematic, when more than one different, in terms of level and denomination, contract differs in both hands. + +This all leads to conclusion that rather than a handy feature, this behavior is just a minor deviation from accepted conventions. + +Double Dummy Solver resolves Examples 1 and 5 correctly, and Examples 2-4 does not apply to it, because of preferring highest possible sacrifice from equally profitable. + +Raw PBN example data +-------------------- + +``` +[Board "Example 1"] +[Dealer "W"] +[Vulnerable "None"] +[Deal "N:K7.AK87.A87.AJ52 AJ5.QT9.9532.T76 QT62.J642.KJ6.K4 9843.53.QT4.Q983"] + +[Board "Example 2"] +[Dealer "N"] +[Vulnerable "EW"] +[Deal "N:Q52.KQ974.AQ.AKT AKJ94.AT6.K8642. 86.J85.973.J9532 T73.32.JT5.Q8764"] + +[Board "Example 3"] +[Dealer "W"] +[Vulnerable "EW"] +[Deal "N:Q.KT97.J953.9754 AKJT3.J3.T64.AQ2 87652.85.AK8.KJ6 94.AQ642.Q72.T83"] + +[Board "Example 4"] +[Dealer "W"] +[Vulnerable "None"] +[Deal "N:J5.T872.KT76.K32 Q87642.9.84.Q754 A.AQJ63.QJ9532.J KT93.K54.A.AT986"] + +[Board "Example 5"] +[Dealer "E"] +[Vulnerable "EW"] +[Deal "N:9865.Q98.AJT4.84 J4.KT76.Q98.J762 AT.543.762.QT953 KQ732.AJ2.K53.AK"] +``` diff --git a/doc/LowestParContract.pl.md b/doc/LowestParContract.pl.md new file mode 100644 index 0000000..cae8bcc --- /dev/null +++ b/doc/LowestParContract.pl.md @@ -0,0 +1,379 @@ +Problemy z najniższym spośród równych kontraktów minimaksowych w MiniMaxDOS +============================================================================ + +MiniMaxDOS zazwyczaj przyjmuje, że ze wszystkich równie opłacalnych kontraktów, minimaksem jest najniższy. + +Zasada ta przestaje jednak działać, jeśli liczba lew do wzięcia różni się między rozgrywką z obu rąk tej samej strony. Poniżej znajdują się przykłady z zestawu testowego. + +Przykład 1 +---------- + + + + + + + + + + + + + + + + + + + + +
W/nikt + ♠ K7
+ ♥ AK87
+ ♦ A87
+ ♣ AJ52 +
+ ♠ 9843
+ ♥ 53
+ ♦ QT4
+ ♣ Q983 +
+ ♠ AJ5
+ ♥ QT9
+ ♦ 9532
+ ♣ T76 +
+ ♠ QT62
+ ♥ J642
+ ♦ KJ6
+ ♣ K4 +
+ + + + + + + + + + + + + + + + +
NT
N1010111010
S1110111010
W23233
E23233
+
+ +N realizuje 4NT, S realizuje 5NT. E i W nie mają opłacalnej obrony dla 3NT z ręki N/S. + +`MiniMaxDOS` ustala `4NT S, +460` jako minimaks, zamiast `3NT N/S, +460`. + +Przykład 2 +---------- + + + + + + + + + + + + + + + + + + + + +
N/EW + ♠ Q52
+ ♥ KQ974
+ ♦ AQ
+ ♣ AKT +
+ ♠ T73
+ ♥ 32
+ ♦ JT5
+ ♣ Q8764 +
+ ♠ AKJ94
+ ♥ AT6
+ ♦ K8642
+ ♣ == +
+ ♠ 86
+ ♥ J85
+ ♦ 973
+ ♣ J9532 +
+ + + + + + + + + + + + + + + + +
NT
N83947
S33837
W410496
E410496
+
+ +E/W ugrywają 4 pik. 4 NT i 5 kier są bez 2 z ręki N, lecz nie z ręki S. + +`MiniMaxDOS` ustala `5Hx N, -300` jako minimaks, zamiast `4NTx N, -300`. + +Przykład 3 +---------- + + + + + + + + + + + + + + + + + + + + +
W/EW + ♠ Q
+ ♥ KT97
+ ♦ J953
+ ♣ 9754 +
+ ♠ 94
+ ♥ AQ642
+ ♦ Q72
+ ♣ T83 +
+ ♠ AKJT3
+ ♥ J3
+ ♦ T64
+ ♣ AQ2 +
+ ♠ 87652
+ ♥ 85
+ ♦ AK8
+ ♣ KJ6 +
+ + + + + + + + + + + + + + + + +
NT
N44567
S44576
W88756
E98766
+
+ +E ugrywa 3NT. N ma opłacalną obronę w 4 trefl (ale nie 4 karo), a S ma opłacalną obronę w 4 karo (ale nie 4 trefl), obie bez trzech. + +`MiniMaxDOS` ustala `4Dx S, -500` jako minimaks, zamiast `4Cx S, -500`. + +Przykład 4 +---------- + + + + + + + + + + + + + + + + + + + + +
W/nikt + ♠ J5
+ ♥ T872
+ ♦ KT76
+ ♣ K32 +
+ ♠ KT93
+ ♥ K54
+ ♦ A
+ ♣ AT986 +
+ ♠ Q87642
+ ♥ 9
+ ♦ 84
+ ♣ Q754 +
+ ♠ A
+ ♥ AQJ63
+ ♦ QJ9532
+ ♣ J +
+ + + + + + + + + + + + + + + + +
NT
N631093
S6310103
W6103310
E6103310
+
+ +E/W ugrywają 4 pik. Zarówno N, jak i S mogą bronić 5 kierami, bez jednej, lecz S może bronić również 5 karami, bez jednej. + +`MiniMaxDOS` ustala `5Hx S, -100` jako minimaks, zamiast `5Dx S, -100`. + +Przykład 5 +---------- + + + + + + + + + + + + + + + + + + + + +
E/EW + ♠ 9865
+ ♥ Q98
+ ♦ AJT4
+ ♣ 84 +
+ ♠ KQ732
+ ♥ AJ2
+ ♦ K53
+ ♣ AK +
+ ♠ J4
+ ♥ KT76
+ ♦ Q98
+ ♣ J762 +
+ ♠ AT
+ ♥ 543
+ ♦ 762
+ ♣ QT953 +
+ + + + + + + + + + + + + + + + +
NT
N33335
S33335
W10101098
E991088
+
+ +W ugrywa 4NT, E ugrywa 3NT. N/S nie mają opłacalnej obrony na poziomie 4. + +`MiniMaxDOS` ustala `4NT W, -630` jako minimaks, zamiast `3NT W, -630`. + +Podsumowanie +------------ + +Przykład 5 jest wytłumaczalny. Wyszczególnianie 4NT jako minimaksa może być użyteczne do podkreślenia różnicy liczby lew branych z obu rąk. + +Niestety, nie tłumaczy to Przykładu 1, gdzie raportowany jest konktrakt o jeden poziom niższy od najwyższego wychodzącego, a kontrakt o dwa poziomy niższy - już nie. + +Zachowanie to jest niespójne z Przykładem 4, gdzie kontrakt, dla którego zachodzą różnice liczby lew nie jest wyszczególniony jako minimaks, a Przykłady 2-3 pokazują, jak problematyczne może być takie podejście, gdy więcej niż jeden kontrakt (z punktu widzenia poziomu i miana) różni się liczbą lew z obu rąk. + +Wskazuje to w związku z tym nie na zgrabną funkcjonalność, lecz na niewielkie odstępstwa od przyjętych konwencji. + +Double Dummy Solver rozwiązuje Przykłady 1 i 5 poprawnie (spójnie), a Przykłady 2-4 go nie dotyczą, z racji przyjmowania najwyższej opłacalnej obrony jako minimaks. + +Dane PBN dla przykładów +----------------------- + +``` +[Board "Example 1"] +[Dealer "W"] +[Vulnerable "None"] +[Deal "N:K7.AK87.A87.AJ52 AJ5.QT9.9532.T76 QT62.J642.KJ6.K4 9843.53.QT4.Q983"] + +[Board "Example 2"] +[Dealer "N"] +[Vulnerable "EW"] +[Deal "N:Q52.KQ974.AQ.AKT AKJ94.AT6.K8642. 86.J85.973.J9532 T73.32.JT5.Q8764"] + +[Board "Example 3"] +[Dealer "W"] +[Vulnerable "EW"] +[Deal "N:Q.KT97.J953.9754 AKJT3.J3.T64.AQ2 87652.85.AK8.KJ6 94.AQ642.Q72.T83"] + +[Board "Example 4"] +[Dealer "W"] +[Vulnerable "None"] +[Deal "N:J5.T872.KT76.K32 Q87642.9.84.Q754 A.AQJ63.QJ9532.J KT93.K54.A.AT986"] + +[Board "Example 5"] +[Dealer "E"] +[Vulnerable "EW"] +[Deal "N:9865.Q98.AJT4.84 J4.KT76.Q98.J762 AT.543.762.QT953 KQ732.AJ2.K53.AK"] +``` diff --git a/doc/README.en.md b/doc/README.en.md index ffb383a..ac0e0a6 100644 --- a/doc/README.en.md +++ b/doc/README.en.md @@ -13,7 +13,7 @@ This application provides an alternative to the Deep Finesse double-dummy analys Its main features, and advantages, over BigDeal's solution (MiniMaxDOS.exe's, to be precise) are: * better performance and stability - * more consistency + * [more consistency](/doc/LowestParContract.en.md) * ability to batch analyze multiple files * export support for both JFR custom DD analysis PBN tags and [standard PBN set of tags](http://www.tistis.nl/pbn/pbn_v21.txt) * additional import support for Double Dummy Solver custom `OptimumResult` PBN tag @@ -55,7 +55,7 @@ This includes: * from all equal par contracts (i.e. yielding the same score), the *lowest* one is assumed the par contract (but: see below) * when par contract is the same for both partners of a specific side, the declarer is unspecified (may, and usually will, differ from BigDeal's) -In some cases, when par contract differs between two players of one side, BigDeal deviates from the lowest equal par contract. This inconsistency is not maintained in BCDD. +[In some cases](/doc/LowestParContract.en.md), when par contract differs between two players of one side, BigDeal deviates from the lowest equal par contract. This inconsistency is not maintained in BCDD. The priority of existing PBN tags treated as input sources for double dummy trick table and par contract/score is: diff --git a/doc/README.pl.md b/doc/README.pl.md index d7512a4..de6a5f1 100644 --- a/doc/README.pl.md +++ b/doc/README.pl.md @@ -13,7 +13,7 @@ Program pełni funkcję alternatywy dla sugerowanej przez BigDeal analizy rozda Jego główne funkcjonalności, i przewaga nad rozwiązaniem z BigDeal (właściwie - MiniMaxDOS.exe), to: * lepsza wydajność i stabilność - * większa spójność + * [większa spójność](/doc/LowestParContract.pl.md) * możliwość wsadowej analizy wielu plików * obsługa niestandardowych JFR-owych tagów PBN dla wyników analizy oraz [standardowych tagów PBN](http://www.tistis.nl/pbn/pbn_v21.txt) * dodatkowa obsługa importu danych z niestandardowego tagu PBN programu Double Dummy Solver (`OptimumResult`) @@ -55,8 +55,8 @@ Konwencje przyjęte w programie: * ze wszystkich równych kontraktów (tj. kontraktów wartych tyle samo), *najniższy* z nich jest traktowany jako minimaks (ale: patrz niżej) * w przypadku tego samego minimaksa z obu rąk tej samej strony, konkretny rozgrywający jest nieokreślony i wybrany dowolnie (może, i zwykle będzie, różnić się od tego w wynikach BigDeal) -W szczególnych przypadkach, gdy wysokość kontraktu minimaksa dla obu graczy tej samej strony jest różna, BigDeal odbiega od zasady traktowania najniższego kontraktu jako minimaksa. Ta niespójność nie została zachowana w BCDD. - +[W szczególnych przypadkach](/doc/LowestParContract.pl.md), gdy wysokość kontraktu minimaksa dla obu graczy tej samej strony jest różna, BigDeal odbiega od zasady traktowania najniższego kontraktu jako minimaksa. Ta niespójność nie została zachowana w BCDD. + Istniejące w wejściowym pliku PBN tagi traktowano są jako źródło tabeli liczby lew oraz minimaksa teoretycznego w następującej kolejności: * niestandardowe tagi JFR: `Ability` i `Minimax` -- cgit v1.2.3