Optie S: Algoritmes in het programma balans

-S n:c1:c2

Het argument bestaat uit drie onderdelen, gescheiden door een ':'.
voorbeelden: -S2,  -S2:75,  -S2:75:0.01,  -S1:22.5:17.5,  -S 0:11:50
Het algoritmenummer n is verplicht. De betekenis van de optionele getallen c1 en c2 hangt af van n. Momenteel zijn er drie algoritmen gedefinieerd, 0, 1 and 2.

-S0 selecteert het default snelle algoritme, waarbij c1:c2 (default 1:2000) de begintemperatuur en de piektemperatuur zijn. Weglaten van de -S optie is dus equivalent met -S0:1:2000. Hoe hoger de temperatuur (T), hoe groter de kans dat we tijdelijk een draaiing accepteren die som van de kwadraten verhoogt (en dus Qf verlaagt). Zulk een toename kan nodig zijn om later een lagere waarde te vinden. T=1 is zo laag dat praktisch alleen rechtstreekse verbeteringen geaccepteerd worden. Daarmee starten we in de default modus. Later, als T de piekwaarde 2000 bereikt, gaat de zoektocht meer vrijelijk te werk, en benadert een "random walk". Met -S0 gaat de temperatuur snel op en neer met slechts ongeveer 100 iteraties van top tot top.

-S1 selecteert langzame exponentiele koeling (of opwarming) van temperatuur c1 tot temperatuur c2. Dit algoritme is niet aan te bevelen voor loopschema's waarvoor de default -S0 gemakkelijk de optimale Qf vindt en de rest van de tijd besteedt aan het optimaliseren van Qf1max/Qf1av/d4. -S0 is geschikter in zo'n geval. -S1 is speciaal bedoeld voor gevallen waarin de optimale Qf moeilijk te vinden is.
De default waarden voor c1:c2 zijn eem ruwe schatting en gezet op P:P/4 waarbij P het aantal paren in het schema is. Bijvoorbeeld voor een schema met 56 paren is -S1 equivalent met -S1:56 en met -S1:56:14.

-S2 selecteert "slow adaptive ensemble cooling (or heating)" vanaf temperatuur c1 met een ongeveer constante thermodynamische snelheid die evenredig is met c2. Het is een ruwe benadering maar snel en eenvoudig, waarbij de relaxatietijd wordt geschat door vergelijking van de gesimuleerde statistische spreiding van individuele leden van het ensemble versus het ensemble as geheel. -S2 is in principe een ietwat uitgebreide versie van -S1 en dus weer bedoeld voor gevallen waarin de beste Qf moeilijk te vinden is.
De default c1 (de begintemperatuur) is 2000. De default c2 (de snelheid) is 0.35*(P*r)1.361/iter waarbij P = aantal paren, r = aantal ronden, iter = aantal iteraties. Bijvoorbeeld het optimaliseren van een schema voor 56 paren en 55 ronden met 15000 iteraties met -S2 is equivalent met -S2:2000 en ongeveer hetzelfde als -S2:2000:1.31.

Het default -S0 algoritme is altijd aan te bevelen voor een of enkele korte runs voordat -S2 of -S1 wordt geprobeerd, eveneens voor enkele korte runs, ieder 20000 iteraties of zo. Dit vergemakkelijkt het inschatten van een beter temperatuurinterval voor langere runs dan het default interval.
Voor -S1 is de default eindtemperatuur vaak te laag, waardoor de zoektocht te snel in een lokaal optimum belandt, en veel CPU tijd wordt verspild zonder hieruit te kunnen ontsnappen. In zeldzame gevallen is ook de default starttemperatuur te laag.
-S2 hoort makkelijker te zijn af te regelen dan -S1 wanneer je een ensemble grootte van tenminste 6 hanteert, liefst 8 of 12 (of meer; voor het meest efficiente gebruik een veelvoud van het aantal CPU cores). Het is veel minder afhankelijk van de starttemperatuur. De default starttemperatuur is erg conservatief en kan meestal zonder bezwaar verlaagd worden tot een waarde in de buurt van het aantal paren, speciaal in combinatie met -z of een negatieve ensemble grootte (zie optie -s). Een nauwkeurige inschatting van de snelheid is eveneens niet essentieel, als die tenminste hoog genoeg is maar niet zo hoog als een aantal malen de ideale waarde. De default waarde is waarschijnlijk aan de veilige kant, i.e. vaak iets hoger dan de optimale waarde, maar soms ook vrijwel gelijk aan de ideale waarde.
Na een matig lange -S1 of -S2 run kan vaak een verdere verbetering gevonden worden door opwarmen vanaf onder tot iets boven de temperatuur waar de huidige oplossing gevonden was. Snelle verbeteringen komen veel minder vaak voor wanneer je start met een oplossing die met -S0 is gevonden. De reden is dat het -S0 algoritme zulke herhaalde pogingen door opwarmen automatisch bevat, en intensief op zoek gaat in de buurt van nieuwe optima. Een korte -S0 run kan wel nuttig zijn om het resultaat van een lange -S1/-S2 run te consolideren.

Terug naar README