Tak dneska naposledy. Už mě to totiž nebaví . Tentokrát jsem se zabýval problémem, jak dostat nalosování z Excelu do SORGu (mimochodem, je to obdivuhodné dílo). Nakonec celkem jednoduše, protože plně automatické aktualizace jsem se po jistém rozvažování vzdal.
SORG ukládá data příslušná soutěži do textového souboru s příponou xml. Soubory xml se normálně otevírají v prohlížeči, ale jde opravdu o textový soubor, který lze otevřít například v poznámkovém bloku. Obrazovka se souborem „test_losovani_soutez.xml“ vypadá následovně:
Sekce s nalosováním je ohraničená návěštími „draw“ a „/draw“.
Jednotlivé řádky poté obsahují identifikační číslo pilota mezi návěštími označujícími let, skupinu a startoviště.
Stačilo tedy do výpočtu přidat vygenerování textového souboru ve stejném formátu (soubor se jmenuje „optimalizace_20095_vystup.txt“ a ukládá se do stejného adresáře, v němž byl spuštěn optimalizační program „optimalizace_200905.xls“), jako chce SORG.
Tedy, postup je následující:
- Vytvořit soutěž v SORGu;
- V Excelu vygenerovat rozlosování, které se uloží do textového souboru;
- Nahradit sekci „draw“ (což je anglicky losování) v datech soutěže novými daty z textového souboru.
Tak, a teď „problémky“.
Prvním bylo definování zakázaných dvojic pilotů, kteří proti sobě letět nesmějí. Například v tomto příkladu jsem předpokládal, že se soutěže se zúčastní 13 pilotů, zatímco míst ve startovním poli je 15 (5 startovišť a 3 skupiny). Je tedy žádoucí, aby (například) hypotetičtí piloti 14 a 15 nikdy neletěli proti sobě, aby tak ve startovní matici nebyla v jednom řádku dvě prázdná místa.
Na listu List1 (prosím přečtěte si předchozí díl, v němž je popsáno ovládání programu) je možno zadat zakázané dvojice. Uvažuje se jich ale pouze tolik, kolik udává první číslo. V ukázaném případu je tedy pouze jedna zakázaná dvojice 14-15. Algoritmus nezaručuje, že se zakázané dvojice nesejdou, mají jen nepříznivou váhu (podle stejného principu, na jakém je celé losování založeno – hledá se dost dobré, nikoliv nezbytně nejlepší řešení). Zdá se ale, že ve skoro každém řešení je dost nul, které tak algoritmus přiřadí zakázaným dvojicím bez toho, aby to mělo vliv na celkové skóre; ale spoléhat se na to nedá.
Další na řadě byla otázka, zda SORG „sežere“ nalosování, v němž jsou piloti (tj. 14 a 15), které vlastně nezná. Pozorný čtenář si povšimne, že na prvním obrázku, hned na začátku v prvním letu a první skupině je neobsazené startoviště číslo 2. Excel vrací tabulku kompletní, na druhém startovišti je pilot číslo 14. K mému překvapení si s tím SORG poradil.
Při načtení upraveného souboru ohlásil chybu, protože piloty 14 a 15 neměl nadefinované, ale „chybu“ si sám opravil a nabídl uložení (Aktualizovat data) opraveného souboru. Spadl mi kámen ze srdce .
Posledním komplikací je identifikace (nebo identifikátory) soutěžících. SORG uvnitř také pracuje s celými čísly, každý soutěžící má své (viz první obrázky).
Za číslu v SORGU jsou reální piloti – na každého pilota má program celý svazek , i když důležité je asi jen jméno, identifikační číslo a licence.
Pokud se losuje v duchu „padni komu padni“, tak problém nevznikne. Excel označuje piloty pouze čísly (dříve číslu předcházelo P jako pilot, ale písmeno bylo vlastně zbytečné) a protože se losuje náhodně, jsou piloti dobře promíchaní. Když chci ale zakázat, aby proti sobě letěli třeba otec se synem, musím znát jejich ID čísla v SORGU a ta zadat do Excelu jako zakázanou dvojici.
Zdá se mi, že ID čísla pilotů odpovídají pořadí, v jakém se piloti hlásili do soutěže na Stoupáku. Pokud se piloti vybírají z vnitřního seznamu v SORGU, tak se zdá, že pořadí je abecední. Nejjednodušší je asi podívat do datového souboru (xml) soutěže, kde je vše popsáno (viz obrázek výše).
Na úplný závěr ještě zmíním, že jsem z programu vyhodil „hladový algoritmus“, byl zbytečný, a v rámci pokusů o zrychlení výpočtu zavedl možnost při optimalizaci vždy zkoumat jen jedno kolo (hledá se dvojice pilotů k přehození pouze v rámci jednoho kola, nikoliv všech kol soutěže).
Takový zrychlený postup lze s výhodou použít k „odřezání špiček“, tj. odstranění nejhorších výstřelků v nalosování. Systematické prohledávání je samozřejmě lepší, ale pro velké počty pilotů může být kvůli dlouhým výpočetním časům nereálné.
Excelový program („optimalizace_200905.xls“) v ZIP ke stažení.
Honza
6.9.2020