From 55b7f084dc0fd1bd837a8b80fa7fbcd680aa4872 Mon Sep 17 00:00:00 2001 From: emkael Date: Wed, 28 Feb 2018 19:04:47 +0100 Subject: Article on virtual tables in JFR Pary --- .../02/04/jfr-pary-virtual-table-tournament.tpl | 87 ++++++++++++++++++++++ template/content/main.tpl | 6 ++ 2 files changed, 93 insertions(+) create mode 100644 template/content/2018/02/04/jfr-pary-virtual-table-tournament.tpl (limited to 'template') diff --git a/template/content/2018/02/04/jfr-pary-virtual-table-tournament.tpl b/template/content/2018/02/04/jfr-pary-virtual-table-tournament.tpl new file mode 100644 index 0000000..8a539f3 --- /dev/null +++ b/template/content/2018/02/04/jfr-pary-virtual-table-tournament.tpl @@ -0,0 +1,87 @@ + + +
+
+

Poniższa instrukcja ma za zadanie opisać sposób poprowadzenia w oprogramowaniu JFR Pary turnieju na IMP obliczanego w porównaniu do wyniku innego niż wynikający z zapisów na sali gry.

+

Takie turnieje, rozgrywane "do wirtualnego stolika", porównują zapisy uzyskane przez uczestników do "średniej" ustalonej w sposób sztuczny, np. jako minimaks teoretyczny, jako wynik wzorcowy albo jako średnią w innym turnieju (w tym - butlerze turnieju teamów).

+

Przykład turnieju obliczanego w ten sposób można zaobserwować w wynikach XVI Młodzieżowego Festiwalu Brydżowego, obliczanych jako zbitka turniejów eliminacyjnych do minimaksa teoretycznego.

+
+
+ +
+
+

Zakładamy turniej

+
+
+

W poniższych rozważaniach zakładamy, że nasz turniej liczy N stołów grających, czyli gra w nim 2N par. Przy nieparzystej liczbie par, ewentualną pauzę liczymy jako parę grającą, chodzi nam o liczbę stołów, przy których pary uzyskują wyniki.

+

Zakładamy turniej na 2N+1 stołów (4N+2 pary).

+

Jako sposób liczenia wyników turnieju wybieramy butler,odrzucamy i wybieramy odrzucanie N zapisów z każdej strony.

+

Tak zdefiniowane warunki gwarantują, że wynik w każdym protokole będzie obliczany do środkowego zapisu (mediany). Za chwilę zadbamy o to, żeby ta mediana była taka, jak chcemy.

+
+
+ +
+
+

Monitor turnieju

+
+
+

Pierwsze N stołów rozstawiamy tak, jak rozstawilibyśmy normalnie turniej. To są nasze stoły grające, siedzi przy nich pierwsze 2N par naszej listy startowej.

+

Pozostałe 2N+2 par usadzamy w każdej rundzie przy pozostałych N+1 stołach. W przypadku małego turnieju można to zrobić ręcznie, sadzając w każdej rundzie kolejne pary przy stołach o wysokich numerach. W przypadku większego turnieju - można wygenerować turniej dla dwóch sektorów (drugiego o 1 stół większego niż pierwszy) - dokładne rozstawienie przy nadmiarowych stołach nie ma żadnego znaczenia, dopóki przy każdym takim stole w każdej rundzie "siedzą" nadmiarowe pary.

+
+
+ +
+
+

Ustawiamy wirtualne zapisy

+
+
+

Aby zagwarantować, że w każdym protokole środkowym wynikiem (czyli tym, do którego porównywane będą pozostałe) będzie nasz, z góry określony, wynik, wystarczy wpisać do protokołu N+1 identycznych wyników, równych naszemu. W ten sposób niezależnie od pozostałych (uzyskanych w żywej grze) zapisów, jeden z naszych wyników będzie w protokole medianą.

+

+ W tym celu najpierw ustawiamy na stole nr N+1 (czyli pierwszym nadmiarowym) nasz wynik: +

    +
  • jeśli jest to "pełny" wynik (kontrakt, rozgrywający, liczba lew), możemy zrobić to przy pomocy dodatkowego "pierniczka" (lub narzędzia równoważnego, jak FillBWS)
  • +
  • jeśli jest to wynik liczbowy (np. średnia z protokołu innego turnieju), musimy wpisać go ręcznie do odpowiedniego wiersza tabeli zapisy w bazie danych turnieju (w kolumnie zapi, pozostałe mogą pozostać puste)
  • +
+

+

+ Następnie należy "rozmnożyć" ten zapis na wszystkie pozostałe nadmiarowe stoły. W tym celu wykonujemy w bazie danych turnieju następujące zapytanie SQL: +

+UPDATE zapisy z1 JOIN zapisy z2 ON z2.stol = N+1 AND z1.stol > N+1 AND z1.nrr = z2.nrr
+SET z1.kont = z2.kont, z1.rozg = z2.rozg, z1.wist = z2.wist, z1.wyni = z2.wyni, z1.zapi = z2.zapi;
+ N+1 to numer naszego pierwszego nadmiarowego stołu (tego, w którym ustawiliśmy nasz ustalony wynik). +

+

Taki turniej następnie możemy poprowadzić i obliczyć - średnia w każdym protokole będzie naszym, z góry ustalonym, wynikiem.

+

Należy pamiętać o ustawieniu nadmiarowym parom odpowiednio dużych ujemnych wyrównań - każda z tych par uzyskałaby w przeciwnym razie wynik 0 IMP w turnieju, więc podzieliłaby prawdziwą listę par.

+
+
+ +
+
+

Ukrywamy wirtualne stoły na stronie wyników turnieju

+
+
+

Do zaprezentowania wyników takiego turnieju bez zbędnego mieszania w głowach bardzo długimi protokołami i jeszcze dłuższą listą startową można użyć narzędzia JFRPary Virtual Table.

+

Następnie uruchamiamy je, w wierszu poleceń, zgodnie z instrukcją użycia, podając główny plik turnieju jako parametr.

+

+ Po takim wywołaniu staną się następujące rzeczy: +

    +
  • z listy wyników i listy historii znikną nadmiarowe pary
  • +
  • z protokołów znikną wszystkie zapisy przy stołach, przy których obie pary były parami nadmiarowymi
  • +
  • dodany zostanie z powrotem jeden (pierwszy) z takich zapisów, wraz z opisującym go nagłówkiem
  • +
+

+

Parametrem -t OPIS_STOLIKA sterujemy opisem, jaki pojawi się nad naszym ustalonym zapisem (np. "średnia butlera ligowego" itp.).

+

Program wykrywa jako nadmiarowe pary takie pary, w których oboje zawodniku ma puste imiona i nazwiska. Jeśli te imiona i nazwiska były zmieniane na liście startowej, numery par, które program ma traktować jako nadmiarowe, można podać wprost, jako kolejne argumenty wywołania programu.

+

Tak przerobione strony z wynikami należy następnie ręcznie wrzucić na stronę wyników (program jeszcze nie obsługuje wysyłania plików Gońcem).

+

Każdorazowe wygenerowanie protokołów lub stron z wynikami - przez Kolektor lub "globusik" w Parach - powoduje konieczność ponownego przerobienia stron z wynikami: ukrywanie stołów w wynikach na bieżąco nie jest obsługiwane.

+
+
+ +
+

Opracował: Michał Klichowicz, Komisja IT PZBS

+
diff --git a/template/content/main.tpl b/template/content/main.tpl index ec3ce72..8dfbc4a 100644 --- a/template/content/main.tpl +++ b/template/content/main.tpl @@ -4,6 +4,12 @@