laatste update januari 2023, versie 8.0

het programma balans en aanverwanten

De invoer van de programma's gebeurt met comando's in een console venster.
In MSWindows neem je daar een CMD ("Command Prompt") venster voor,
in Linux of MinGW een terminal venster.

Voor een beschrijving van deze programma's zie

https://www.pjms.nl/BALANS/balans.html

Nieuw in versie 8 van het programma balans is het gebruik van multiprocessing. Om efficient gebruik te maken van computers met meerdere processoren lopen een aantal onafhankelijke optimalisatieprocessen te gelijk. Het aantal parallelle optimalisaties kan gelijk zijn aan het aantal aanwezige cpu's, maar ook groter of kleiner. Zie optie -s voor het specificeren van deze "ensemble grootte", i.e. het aantal gelijktijdige optimalisaties.

Het optimalisatie algoritme is verbeterd en een paar nieuwe opties zijn toegevoegd.

Vanaf versie 7.0 gaat het programma balans verder dan de 2-paren interacties die de kwaliteitsfactor Qf bepalen, maar beschouwt ook de "vacancy quality". In het volgende noemen we Qf1 de kwaliteitsfactor wanneer één paar afwezig is. Qf1av en Qf1max zijn de gemiddelde waarde en het maximum van Qf1. Voor een discussie zie

vacancy_quality.html

Het programma balans.


Ga naar de directory waar programma balans.exe geplaatst is.
Type daarna het commando:
balans [opties] schemafile
bijvoorbeeld: balans -s 1000 nbb14.7.txt
"schemafile" in bovenstaande is een tekstbestand waar het schema in zit. Schemafiles die voldoen aan de standaard kunnen probleemloos verwerkt worden. Sommige uitbreidingen van de standaard zijn toegestaan.
Voor een gedetailleerde beschrijving van de schemafiles, klik hier.
Voor de speciale gevallen dat de schemafile een enkel streepje ('-') is, of afwezig, zie Files.

[opties] staat voor een aantal mogelijke opties.
Mogelijkheden (in het volgende is n een positief getal):

 -c   : check het schema, geen optimalisatie
 -s n:nl : doe optimalisatie net n iteraties. 
        De optionele parameter nl is de ensemble grootte, i.e. het aantal parallelle optimalisaties
 -f n : hou de eerste n posities vast.
 -r n : hou rij n vast (= ronde n)
 -t n : hou kolom n vast (= tafel n)
 -i n : hou paar n vast
 -j n : hou spelgroep n vast (n=getal of hoofdletter)
 -R n : hou alle ronden vast behalve ronde n
 -D n : hou alle tafels vast behalve tafel n
 -I n : hou alle paren vast behalve paar n (en zijn directe tegenstanders)
 -J n : hou alle spelgroepen vast behalve spelgroep n (n=getal of hoofdletter)
 -a <fixerfile>: geef een file met voor iedere rij en kolom een 0 of 1 (0=vrij, 1=vast)
 -v n : paar n is afwezig
 -z   : willekeurige keuze voor NZ en OW vóór de optimalisatie
 -L   : vertaal spelgroepen naar letters
 -p   : vernummer de paren, geef de permutatie op de commandoregel
 -m <filenaam> : voer het vernummerde schema uit naar file <filenaam>
 -m - : schrijf het vernummerde schema naar het scherm.	Zie ook Files		
 -V n : Selecteer de getoonde uitvoer. (-V0 stil, -V1 minimaal ..., zie appendixQnl).
 -Q   : (Quiet) Laat alleen balans-getallen zien. hetzelfde als -V1
 -P n1-n2 (bijv. -P 4-8): voorkeur paar nrs van een afwezig paar.
 -W w1:w2 (bijv. -W 0:1): gewichtsfactoren van Qf1max en Qf1av (default -W 2:1)
 -k 0 : geen optimalisatie van d4 / -k 1: wel optimalisarie van d4
 -S n:c1:c2 (e.g. -S 1:750:7.5): algoritme + optionele parameters, zie appendixSnl
 -T n : maximum tijd in seconden.
 -h   : geef een korte beschrijving van de opties

tafels vasthouden, -f -r -t -i -j -R -D -I -J -a <fixerfile>

Er zijn diverse opties om bepaalde tafels in bepaalde ronden vast te houden.

-r -t -i -j kun je meerdere keren gebruiken, om meerdere subsets tegelijkertijd vast te houden.
-R -D en -I kun je meerdere keren gebruiken, om meerdere subsets tegelijkertijd vrij te laten.
Bijvoorbeeld '-D1 -D3': houdt alle tafels vast behalve tafels 1 en 3.

Optie -f werkt alleen op de eerste n posities.

Optie -a <filenaam> is de meest algemene om tafels vast te houden. Voor een voorbeeld van een fixerfile zie file fixers.txt. Deze kan gebruikt worden met een aanroep zoals:

 balans -a fixers.txt mitchell14.7.txt
De fixerfile mag desgewenst extra spaties en nieuwe regels bevatten.

Opties -f -r -t -i -j overrulen de gegevens uit de fixerfile.

Opmerkingen over het vasthouden van tafels

Als je op alle tafels met dezelfde spelgroep NZ en OW verwisselt, verandert de balans van een schema niet. Daarom kunt je voor elke spelgroep één willekeurige tafel vasthouden zonder verlies van algemeenheid. Veel schema's zijn zo georganiseerd dat tafel 1, of ronde 1, of de eerste paar tafels van ronde 1, alle verschillende spelgroepen hebben. In zo'n geval kunnen de opties -t, of -r, of -f worden gebruikt om die tafels vast te houden zonder verlies van algemeenheid.
Bijv. voor een incomplete Mitchell met 16 paren en 6 rondes:
balans -f6 -s1000 16p6ronvmitchell1.asc
Maar het is niet altijd een goed idee om dit te doen. Voor grote / moeilijke schema's zal zulk vasthouden het leven lastiger maken voor programma balans, en gemiddeld iets slechtere Qf opleveren. Een betere aanpak is om niets vast te houden tijdens zeer lange optimalisatie runs (en gebruik ook optie -S). Wanneer de kwaliteit bevredigend is of er geen optimalisatietijd meer beschikbaar is, kun je het resultaat verfraaien met optie -J van vernum om het schema te herleiden tot dezelfde structuur als wanneer je de eerste ronde of tafel had vastgehouden.
Als je meer dan één ronde / tafel vastlegt, wordt het leven gewoonlijk gemakkelijker voor balans. Maar dan moet je oppassen dat je zo de optimale oplossing niet volledig uitsluit.

aantal (super) iteraties, optie -s

Als je optie -s niet gebruikt neemt het programma een defaultwaarde, momenteel 2000. Dit is vaak voldoende voor kleine schema's, zeg 12 ronden of minder, maar als je erg zeker van je zaak wil zijn is het raadzaam een groter getal te nemen. Voor grote of moeilijke schema's is optie -S ook aan te bevelen (-S1 ...).

Het aantal iteraties kan gevolgd worden door een ':' en een tweede getal, de ensemble grootte.
voorbeelden: -s4000:1 , -s4000:12 , -s10000:-24

Als n ongelijk 0 is worden |n| onafhankelijke toestanden doorgerekend in parallel. Is n positief dan beginnen alle met dezelfde begintoestand. Als n negatief is dan beginnen ze alle, behalve de eerste, in een willekeurige toestand.

Na iedere (super) iteratie worden de leden van het ensemble gesynchroniseerd en hun resultaten vergeleken.

Als de ensemble grootte niet wordt gespecificeerd wordt hiervoor het aantal "threads" gekozen. Dit kan worden overruled met de environment variable OMP_NUM_THREADS

maximum tijd, optie -T

Hiermee geef je de maximum tijd op (in seconden). Bij de limiet die het eerst bereikt wordt, aantal iteraties of tijd, rondt het programma de lopende iteratie af en voert de resultaten uit. Default is geen tijdlimiet.

voorkeur voor paar nrs van een afwezig paar, optie -P eerste-laatste

Het argument bestaat uit twee delen, gescheiden door '-' of een ':'.
voorbeelden: -P 4-8,  -P8
Als eerste=laatste kan het laatste deel worden weggelaten: -P8 is equivalent met -P8-8.
Het programma selecteert de maximale Qf1 in het opgegeven gebied, wanneer er een keuze mogelijk is tussen equivalente schema's.
Default is: beschouw alle paren.

gewichtsfactoren van Qf1max en Qf1av, optie -W w1:w2

Het argument bestaat uit twee delen, gescheiden door ':'.
voorbeelden: -W 1:5 ,   -W0
Als w2 niet gegeven wordt: w2=1.0.
De getallen w1 en w2 zijn het relatieve gewicht dat aan de "vacancy quality" parameters Qf1max en Qf1av gegeven wordt.
De weegfunctie is Fw = w1 * Qf1max + w2 * P * Qf1av
waarin P het aantal paren in het schema.
Normaal zijn de default waarden w1 = 2.0, w2 = 1.0
Maar, als optie -v geselecteerd is, of als P oneven is, wordt de default w1 = 0, w2 = 1.
Qf1max in deze vergelijking is het maximum in het gebied opgegeven met optie -P, maar Qf1av is altijd het gemiddelde over alle paren.
w1 en w2 kunnen in de gebruikelijke notatie voor reële getallen worden opgegeven, en mogen onderdelen bevatten als teken, gehele deel, decimale punt, fractie, exponent, bijv. +1.0e-2

Speciale waarden van w1, w2
w1w2 
0≠ 0 optimaliseer alleen Qf1av
≠ 0 0 optimaliseer alleen Qf1max
00 optimaliseer Qf1max en Qf1av niet
 afwezigw2 = 1.0

optimalisatie van d4, opties -k0 / -k1

Als deze optie is ingeschakeld wordt bij verder gelijke optimale eigenschappen de oplossing met de kleinste d4 gekozen (d4 = 4de moment van de verdeling van de scoregetallen).
-k0 : schakel d4 optimalisatie uit.
-k1 : schakel d4 optimalisatie in (default).

optie -v

Optie -v kan maar een keer per commando gegeven worden. Als je voor het getal bij -v iets opgeeft groter dan het aantal paren waarvoor het schema gemaakt is laat hij het hoogste paarnummer weg.

De normale uitvoer van belans bevat al de kwaliteitsfactoren Qf1(p) voor iedere keuze van het afwezige paar p. Met w2=0 in combinatie met optie -P kan men de optimale balans zoeken voor ieder gewenst paarnummer, maar dat is dan bij maximale Qf voor het volledige schema.
Optie -v kan gebruikt worden als je niet geinteresseerd bent in het volledige schema, maar alleen in de belans van een schema met een afwezig paar.

Algoritme keuze, optie -S n:c1:c2

Voor details van optie S zie appendixSnl.html

vernummering van het schema

optie -L: vertaalt de spelgroepen naar letters.
          Als je bijvoorbeeld een schema hebt dat begint met
             8- 1 1    3- 6 4    2- 7 6    5- 4 7
          maakt optie -L er van:
             8- 1 A    3- 6 D    2- 7 F    5- 4 G
          Uitgebreidere mogelijkheden om de spelgroepen te herschikken
          vind men in 'vernum', opties -N en -n.

optie -p: vernummer de paren. Anders dan -L moet je hier precies opgeven
          hoe je de nieuwe volgorde wil hebben.
          Schrijf onder elkaar een rij getallen die de oude nummers
          weergeven en daaronder een rij met de nieuwe gewenste nummers.
          Herschik nu de kolommen zodanig dat op de eerste rij de
          getallen op volgorde staan. Dan verschijnt op rij 2 de invoer
          die het programma verwacht.
          Voorbeeld. Je wil bovenstaand schema hernummeren tot de
          universele startpositie, dus je wilt van
             8 1 3 6 2 7 5 4
          maken:
             1 2 3 4 5 6 7 8
          Schuif nu de 1, met de 2 die er onder staat, naar plaats 1,
          enzovoorts, zo dat de 2 rijen worden.
             1 2 3 4 5 6 7 8
             2 5 3 8 7 4 6 1
          Die laatste serie is nu wat je dient op te geven bij het
          commando:
              balans -cLp howell4tafels.txt 2 5 3 8 7 4 6 1
          Dit maakt van die eerste regel dus 
              1- 2 A    3- 4 B    5- 6 C    7- 8 D 

opties -Q (= Quiet) en -V (= Verrbose)

Deze opties bepalen de hoeveelheid uitvoer naar het consolescherm. Voor details van opties -Q en -V zie appendixQnl.html.

optie -z (= randomize)

Vóór de optimalisatie worden de NZ en OW posities op willekeurige wijze gerangschikt. De opties om tafels vast te houden worden hierbij gerespecteerd: tafels die zijn vastgehouden doen niet mee. In de uitvoer is het getal "Switched tables" altijd ten opzichte van het oorspronkelijke schema, voordat randomisatie plaats vond. In versies ouder dan 7.63 was dit abusievelijk niet het geval.

uitvoering van het programma

Het programma presenteert nu de balans van het schema zoals ingevoerd en, tenzij je '-c' opgegeven had, gaat het vervolgens optimaliseren. Tijdens het optimaliseren laat het programma ook nog zien het iteratie-nummer, de nieuwe Qf en wat verdere gegevens als het een nieuw optimum vindt.

Vervolgens wordt het geoptimaliseerde schema vertoond, met bijbehorende scorematrix, som van kwadraten, standaarddeviatie en Qf.

Het gevonden schema wordt ook naar een bestand geschreven. Commentaar in dit bestand beschrijft ook nog de belangrijkste eigenschappen van het schema.

Voorbeeld:

balans -r1 -t1 -P15 -s1000 mitchell16.asc
Bereken een 'draaiend schema' uitgaande van het bestand mitchell16.asc, een "Relay Mitchell" voor 8 tafels. Houdt daarbij ronde 1 en tafel 1 vast, laat bij voorkeur paar 15 (Noord op tafel 8) weg als er een paar minder is. (Immers dan vervalt tafel 8 en daarmee het lenen)
Als het goed is leidt dit commando tot een schema met de optimale balans Qf=91.38, Qf1av=85.71, en tevens tot de maximale kwaliteitsfactor Qf1(15) = Qf1max=87.50 bij afwezigheid van paar 15.
Je mag ook spaties gebruiken tussen optie en argument:
balans -r 1 -t 1 -t 8 -s 1000 mitchell16.asc

Als je de uitvoer in een bestand wil hebben in plaats van op het scherm geef je als commando:

 balans [opties] schemafile > uitvoerfile
Voor een voorbeeld van de uitvoer zie outputexample.html

Het programma vernum.

Dit is een gestripte versie van balans waaruit alle optimalisatie- mogelijkheden verwijderd zijn, maar wel een paar extra opties aanwezig zijn om het vernummeren te vergemakkelijken. Opties -R, -D, en -I werken anders dan in balans.

aanroep:

  vernum [opties] schemafile
Zoals bij programma balans geldt ook hier: als schemafile afwezig is wordt _balans.txt gelezen, terwijl '-' betekent: lees standard input, zie ook Files. [opties] staat voor een aantal mogelijke opties.
Mogelijkheden
 -h   : geef een korte beschrijving van de opties
 -Q en -V n : Kies de hoeveelheid uitvoer. (zie appendixQnl.html)
 -A   : uitvoer conform de standaard
 -p   : vernummer de paren (zie boven)
 -L   : vertaal spelgroepen naar letters (zie boven)
 -u   : vernummer naar "Universele Begin Positie"
 -w   : verwissel windrichtingen NZ <--> OW voor alle ronden en tafels
 -z   : willekeurige keuze voor NZ en OW
 -f -r -t -i -j -a fixerfile: (zie boven)
        Deze opties hebben invloed op de werking van -w en -z
 -R <ronde> : verwissel NZ <--> OW van één ronde				
 -D <tafel> : verwissel NZ <--> OW van één tafel in alle ronden			
 -I <paar> : verwissel NZ <--> OW van alle tafels waar dit paar speelt.			
 -J <paar> : verwissel NZ <--> OW van alle tafels waar deze spelgroep gespeeld wordt.			
 -v n : berekening voor het geval dat paar n afwezig is.
 -N   : gebruik in de uitvoer getallen voor de spelgroepen 
        (programma neemt standaard volgorde)
 -n <laagste getal>  : gebruik in de uitvoer getallen voor de spelgroepen
        maar specificeer de volgorde
 -m <filenaam> : voer het vernummerde schema uit naar file <filenaam>
 -K <ntafels> : sorteer de eerste <ntafels> tafels van iedere ronde
                handig als je naar een "spelvast" schema wil
 -b <basis>   : print schema als een set van basisschema's
                om de basisschema's van een topintegraal te vinden
 -o <offset>  : tel <offset> op bij ieder oneven paarnummer
 -e <offset>  : tel <offset> op bij ieder even paarnummer
                bij het samenvoegen van basisschema's tot een topintegraalschema

Gebruik van -n en -N

Bij -n wordt op de commandoregel een reeks verwacht van alle gebruikte tekens voor de spelgroepen in de volgorde die je wil hanteren.

Voorbeeld optie -n

commando:
vernum -n 7 schemafile.txt A B C D E F
maakt van 'A' '7', van 'B' '8', enzovoorts.
Vóór de behandeling:
10 6 6 6 0
 1  2 A    3  4 B    5  6 C    7  8 D    9 10 E    0  0 0
 4  7 A    6  9 B   10  8 C    2  5 D    0  0 0    1  3 F
 9  8 A   10  1 B    3  2 C    0  0 0    7  6 E    5  4 F
 6  3 A    8  5 B    0  0 0    1  9 D    4  2 E   10  7 F
 5 10 A    0  0 0    7  1 C    4  6 D    3  8 E    9  2 F
 0  0 0    7  2 B    9  4 C    3 10 D    5  1 E    6  8 F
Na de behandeling:
10  6  6  6 0 g
 1- 2  7   3- 4  8   5- 6  9   7- 8 10   9-10 11   0- 0  0  
 4- 7  7   6- 9  8  10- 8  9   2- 5 10   0- 0  0   1- 3 12  
 9- 8  7  10- 1  8   3- 2  9   0- 0  0   7- 6 11   5- 4 12  
 6- 3  7   8- 5  8   0- 0  0   1- 9 10   4- 2 11  10- 7 12  
 5-10  7   0- 0  0   7- 1  9   4- 6 10   3- 8 11   9- 2 12  
 0- 0  0   7- 2  8   9- 4  9   3-10 10   5- 1 11   6- 8 12  

Optie -N is een eenvoudige versie hiervan. Als je gebruikt

 vernum -N howell12.txt
is de volgorde van de letters de volgorde waarin ze in het schema voorkomen, en de getallen beginnen met 1.

-n en -N kunnen ook gebruikt worden als de spelgroepen al getallen zijn. Dan op de commandoregel de oude nummers geven in de gewenste volgorde. Als je bijvoorbeeld een schema hebt met spelgroepen 11 .. 17, levert

vernum -n1 klad.txt 17 16 15 14 13 12 11
de vernummering:
oud:    17 16 15 14 13 12 11
nieuw:   1  2  3  4  5  6  7 
Bij gelijktijdig gebruik van -p en -n eerst de paarnummers opgeven, daarna de spelgroepen.

Optie -u
Universele beginpositie. Opgelet! Deze optie vernummert alleen de paren, niet de spelgroepen. Om de spelgroepen op volgorde te krijgen gebruikt optie -N, eventueel in een volgende ronde run door -L

Verdere opties voor de knutselaars

-K, -b, -o, -e ...
Als deze niet werken zoals verwacht hoor ik het graag. Hetzelfde geldt voor verdere suggesties.

Het programma score2

Dit programma berekent de mogelijke scores van een denkbeeldige competitie met 2 sterke paren in een veld van gemiddelde paren. Voor een beschrijving van dit model zie de website.

aanroep:

  score2 [opties] schemafile
Mogelijkheden [n is een geheel getal]
 -T n : geef de score in procent van de sterke paren (normaal 100)
 -e   : uitgebreide uitvoer, alle mogelijke scores per paar voor alle mogelijke
        keuzes van de 2 sterke paren.
 -d   : verdeling van de scores (met soort van grafiek) op het scherm
 -x   : exporteer verdeling van de scores naar een file
 -1   : er is maar 1 sterk paar. bij deze optie worden bovenstaande opties
        genegeerd.
 -h   : geef een korte beschrijving van de opties

Het Bussemaker model

Simulatie volgens het Bussemaker model is "ondergeschoven" in score2. Het model en het gebruik worden beschreven op een aparte pagina.

Files

Overzicht van alle opties

Optiebalansvernumscore2
-h+++
-c+genegeerd 
-s iteraties+ +
-r ronde++ 
-t tafel++ 
-f npos++ 
-i paar nr.++ 
-j spelgroep++ 
-R ronde++ 
-I paar nr.++ 
-J spelgroep++ 
-D tafel++ 
-v vacant paar nr.++ 
-k 0 / -k 1+  
-P vfirst-vlast+  
-W w1:w2+  
-S n:c1:c2+  
-T tijd+  
-V mode+++
-Q+++
-m outputfile++ 
-a fixerfile++ 
-L++ 
-p++ 
-A + 
-u + 
-w + 
-n + 
-N + 
-K tafels + 
-b base + 
-o offset + 
-e offset + 
-e  +
-d  +
-x  +
-T top  +
-1   (= score1)  +
-b  (Bussemaker)  +

ontwikkelomgeving

Deze programma's zijn geschreven in C en werden ontwikkeld in de MINGW32 en in de Linux omgeving, en gecompileerd met gcc of clang. Als random number generator wordt gebruikt Mutsuo Saito and Makoto Matsumoto's SIMD-oriented Fast Mersenne Twister (SFMT) .