> Die bisherigen Optimierer von Arne und Andreas berechnen beide eine
> Kostenfunktion für jedes generierte Layout. Diese Kostenfunktion ist
> frei von irgendwelchen Vorgaben. Bei dem neuen Ansatz müsste man sich
> der Form des QAPs unterwerfen.

Mein Optimierer verwendet eine (leicht erweiterte) QAP Formulierung, und
ich vermute, bei Arne ist es nicht viel anders.  Das aufstellen der
Matrizen A und B ist von der eigentlichen Optimierung getrennt.

Die leicht Erweiterung in meinem Fall ist ein Term für gleichmässige
Fingerbelastung (nichtlinear in den Buchstabenhäufigkeiten).  Ausserdem
gibt es auf Wunsch noch Trigramme, mit einem Summationsindex mehr.  Bei
Arne sieht es ähnlich aus, soweit ich weiss.

> • mittels Matrix C: Häufige Buchstaben auf guten Plätzen

Nur dann, wenn man in C Häufigkeiten und Aufwände verwurstelt.  Ich
mache das nicht explizit, sondern habe Terme analog zu A*B, nur dass
dort nur ein Summationsindex auftritt.

So wie im Artikel formuliert würde C zum Beispiel erlauben auszudrücken,
dass Belegungen, die eine Referenz-Belegung ähnlich sind besser sind als
solche, die das nicht sind (Stichwort: Ctrl-XCV).  Ich glaube Arne hat
sowas, ich nicht.

> • Shiftkollisionen oder allgemeiner: Modifierkollisionen
>     Allgemein über Optimierung auf mehreren Ebenen (mit Modifiern) habe
>     ich mir noch keine näheren Gedanken gemacht. Prinzipiell lassen
>     sich Shiftkollisionen durchaus berücksichtigen, allerdings
>     bräuchten wir keine nxn-Matrix, sondern eine 2nx2n, was das QAP um
>     einiges erschweren würde (unnötigerweise aus meiner Sicht).

So schlimm ist es nicht.  Der Aufwand vervierfacht sich nur (in einer
naiven Implementierung), man hat ja nach wie vor nur n Tasten.

> • Es lassen sich durch (meta-)heuristische Methoden sehr schnell
>   hinreichend gute Lösungen erzielen. Es erleichtert das Arbeiten an den
>   Optimierungsparametern ungemein, wenn man sie einstellen und nach
>   einigen Sekunden ein Layout präsentiert bekommt, das dem Optimum sehr
>   nahe kommt. Der Arbeitszyklus: 
>   Parameter einstellen >> Gute Lösung finden >> Testen/Beurteilen >>
>   Parameter verändern
>   würde kürzer werden.

Stimmt, Tempo ist wichtig, und ich behaupte, dass mein Optimierer deinen
"einige Sekunden" nahe kommt.

> Es folgt eine kleine Buchstaben-Legende für die Ausgabe des
> hasqap-optimierers³, gleich gefolgt von dem Optimierungsprozess, bei
> dem immer die aktuell beste Lösung in Form einer Permutation ausgegeben
> wird.

Auf Deutsch komme ich auf folgende Auswertung:

Stephan          271.330 Gesamtaufwand  190.231 Lageaufwand        links rechts
                   1.390 Kollisionen     17.048 Shift-Kollisionen  ob  7.9  8.6
  äuopü ßflmvx    71.165 Handwechsel     18.134 Shift-Handwechsel  mi 36.5 30.2
  aietc gsnrhk     1.563 Ein-/Auswärts   --.--- IndirKollision     un  6.1 10.7
  .öy,q dwjzb     15.796 benachbart      21.592 Shift-benachbart  sum 50.5 49.5
                 10.3 11.2 18.0 11.1 --.- --.- 16.1 13.2 10.5  9.7 Sh  3.7  1.7

Nicht schlecht, es wird auch kein Finger über Gebühr belastet.  Zum Vergleich:

Aus der Neo-Welt 244.135 Gesamtaufwand  189.847 Lageaufwand        links rechts
                   1.054 Kollisionen      2.155 Shift-Kollisionen  ob  6.8 11.6
  kuü.ä vgcljf    71.373 Handwechsel     25.977 Shift-Handwechsel  mi 34.5 32.5
  hieao dtrnsß     1.525 Ein-/Auswärts   --.--- IndirKollision     un  5.4  9.2
  xyö,q bpwmz     10.353 benachbart      22.340 Shift-benachbart  sum 46.7 53.3
                  9.2 11.1 16.2 10.2 --.- --.- 16.5 10.9 15.4 10.5 Sh  3.8  1.6

Mit Englisch sieht es nicht ganz so gut aus, aber immer noch ok.

Andreas



Antwort per Email an