Re: [Neo] Evolution verbessern (was: Tipptests)

2010-09-08 Diskussionsfäden Arne Babenhauserheide
Michael Ostermeier wrote:

 Der Evolutionsalgorithmus an sich ist aber meiner Meinung nach noch
 verbesserbar. Insbesondere ist schon auf der NeoCon ’10 von irgendwem
 gesagt worden, dass am Anfang mehr als ein Paar getauscht werden
 sollte, um zu verhindern, dass nur lokale Minima gefunden werden.

Ich habe dafür mal getestet, wie die Evolution läuft, wenn nach einer 
bestimmten Anzahl von erfolglosen Mutationen immer zwei getauscht werden. 
Das Ergebnis war schlicht, dass mehr Zeit verbraucht wurde, aber die 
Evolution wurde nicht besser (der code hängt noch in evolve drin, IIRC, wird 
aber nicht mehr genutzt). 

Problem: Es gibt viel mehr Doppelvertauschungen als Einzelvertauschungen, so 
dass die Mutationen sehr viel weniger leicht einen großen Teil der 
Möglichkeiten abdecken können. 

Deswegen versuche ich die lokalen Minimal zu vermeiden, indem jedes mal mit 
einem neuen zufallslayout angefangen wird. 

Der einfachste Weg um sicher zu stellen, dass jede Kombination erreicht 
wird, wäre, einfach mit dem schlechtest-möglichen Layout anzufangen (bzw. 
mit einem absichtlich schlechten). 

Eine andere Möglichkeit: Die besten Layouts als Grundlage nehmen. Dann ~5 
zufällige Vertauschungen machen (aus dem lokalen Minimum stoßen) und wieder 
optimieren (was deutlich kürzer dauern sollte). 

 Meine Idee:

Kurz, wie man sie realisieren kann: 

 1. Man erzeugt zufällige Layouts und wählt die besten 10 aus 

./check_neo.py --best-random-layout num of random layouts to try
(macht aktuell nur 1000 Zufallsvertauschungen und beginnt jedes Mal mit Neo)

Das gibt allerdings nur das jeweils beste Layout. Einfach 100-mal ausführen 
und dann die 10 besten nehmen, dann wurden effektiv num_to_try * 100 
getestet :)
(auch wenn es nicht notwendigerweise die echten Top 10 wären). 

 2. Zufälliges Buchstabentauschen
a) nacheinander werden bei jedem Layout drei Buchstabenpaare
   getauscht
b) nach jedem erfolgreichen Tausch fällt das schlechteste Layout raus
c) hat es länger keinen erfolgreichen Tausch gegeben, dann weiter
   mit Zweierpaaren, Einzelpaaren oder 3.

http://bitbucket.org/ArneBab/evolve-keyboard-
layout/src/tip/check_neo.py#cl-1462

Aktuell läuft es umgekehrt, aber halt nur für ein einzelnes Layout. 

Bei 1000 schlechteren (lokales Minimum) gibt es Doppelvertauschungen). 

…ich dachte, den Code hätte ich rausgenommen, aber er springt erst ab 1000 
ein, so dass wir ihn nicht mehr gesehen haben :)

(nicht Geschwindigkeitsrelevant: Nur ein einzelnes log() gegenüber der 
extrem teuren total_cost() Funktion)

Die Dreier- und Doppelvertauschungen haben übrigens das Problem, dass kleine 
Verschlechterungen gemacht werden, wenn eine der Vertauschungen eine große 
Verbesserung bringt. 

Nehmen wir an, x und e wären auf Neo vertauscht. Dann wäre die Vertauschung 
(xe, nb, al) vermutlich eine positive Vertauschung. 

Bei einfach zufälliger Wahl der einzelnen zu vertauschenden Tasten, würden 
nb und al nicht gemacht werden. Dafür hat die Tastatur jetzt aber wieder die 
möglichen Vertauschungen nb und al, die wieder andere, aber kleinere 
Verschlechterungen bringen können. 

Ich weiß nicht, ob der aktuelle Ansatz (einfach viele zufällige Layouts als 
Anfang) oder der Mehrfachvertauschungsansatz effizienter ist. Aber effektiv 
sagt der Mehrfachvertauschungsansatz, dass eine bestimmte Vertauschung nur 
dann sinnvoll ist, wenn bestimmte andere Tasten in bestimmten für sie 
alleine nicht optimalen Positionen sind. Der Einzelvertauschungsansatz 
bekommt das gleiche Ergebnis, indem jedes Mal eine neue Zufallstastatur 
genommen wird. In einigen dieser Tastaturen ist die Vertauschung sinnvoll 
(die anderen Tasten liegen richtig) in anderen nicht. 

Die Auswahl der besten davon sollte uns an lokalen Minima vorbeibringen. 

 3. kontrollierte Evolution der besten 10 Layouts

Was haben wir danach? 

Die Schwierigkeit ist leider, dass sich immernoch nur sehr schwer ermessen 
lässt, wo wir damit eigentlich sind. 

Interessant wären Messungen beider Algorithmen: Wie gut werden die 
Tastaturen nach welcher Zeit. 

PS: Dank frakturfreak werden jetzt im controlled-tail aa und konsorten nicht 
mehr getestet. 



Re: [Neo] Tipptests: Die besten 3 von 1000 Layouts

2010-09-08 Diskussionsfäden Arne Babenhauserheide
Hi Martin, 

Ich hatte dir vorgestern eine ausführliche Antwort geschrieben, die leider 
in einem Crash des Programmes verloren gegangen ist, des wegen wird die hier 
erwas kürzer… 

Martin Roppelt wrote:

 Testbericht 20100826014417 Martin Roppelt

Der Header ist klasse! So kann ich den Test einfach in eine Datei kopieren 
:)

 Wörtervergleiche (vielleicht geben die ja auch noch Hinweise, was besser
 ist):

Diejenigen, die ich hier am wichtigsten finde sind die sehr viel besseren: 

 Yifosener  Yif(oue)ner  Vef↑l↑sinir
 Nesjef  Nisjif  Neujef
 hasen  hasin  hauin
 seite leicht sieti  (uei)te
 gl(df)i(ssgn)et  (gm⇊)ufe(ssgn)it  g↑l↑(df)(iuu)gnet
 Beuörl(dn)v(tm)et  Sebw↑→rl(dn)v(tm)et ? Biyw(rm)uno(td)it

sehr schlecht: 
eu
au
uei
iuu
y
td

gldf
rm

Das sind Bewegungen zu Zeichen am Rand (u,d,y) (möglicherweise müssen die 
noch teurer werden) oder Zeilenwechsel mit nur einem Finger Unterschied (df, 
rm). 

gldf ist allerdings etwas ein Sonderfall, weil von g auf den 
Gegenüberliegenden gewechselt wird (l), dann wieder zurück und nach einem 
Zwischenschritt auf die daneben (df). 

Ist das Problem auch bei glnf gegeben? oder bei glvf? 

Wenn nicht, dann könnte das Problem v.a. an df liegen: Kleiner Finger auf 
Ringfinger und dazu noch ein Zeilenwechsel. 

Liebe Grüße, 
Arne



Re: [Neo] Optimierungsparameter (was: Tipptests: Die besten 3 von 1000 Layouts)

2010-09-08 Diskussionsfäden Arne Babenhauserheide
Martin Roppelt wrote:

 Optimiert wird auf einem
 abstrakten Tastenfeld.

Es geht eigentlich noch einen Schritt weiter: Aktuell wird optimiert, was 
ein gutes Layout ausmacht. Die Rechte Hand eins nach links zu bewegen ändert 
nur die Kosten der einzelnen Tastenpositionen und welcher Finger welche 
Taste bedient, und die sind leicht angepasst. 

Das heißt, wenn der Optimierer das erreicht, was wir wollen, können wir die 
Zielsetzung leicht anpassen und damit dann optimierte Layouts erhalten. 

Liebe Grüße, 
Arne



Re: [Neo] Tipptests: Auflösung

2010-09-08 Diskussionsfäden Arne Babenhauserheide
Hi, 

Hier erstmal die Auflösung: Die Layouts sind: 

 20 
xuc.ö vdsljq´
fiaeo mtrnhk
,üzäy bgßwp 
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──┐
│ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ ←│
├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─┤
│  ⇥ │ x │ u │ c │ . │ ö │ v │ d │ s │ l │ j │ q │ ´ │ Ret │
├┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─┐   │
│   ⇩ │ f │ i │ a │ e │ o │ m │ t │ r │ n │ h │ k │ ⇘  │   │
├┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┴───┤
│  ⇧ │ M4│ , │ ü │ z │ ä │ y │ b │ g │ ß │ w │ p │ ⇗   │
├┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬┬───┤
│Str │ Fe │ Al │  Leerzeichen   │ M4 │ Fe │ Me │Str│
└┴┴┴┴┴┴┴───┘ 
# 19.8263257185 billion total penalty compared to notime-noeffort 
# 5.22759296484 mean key position cost in file 1gramme.txt ( 15.0504573 ) 
# 1.46702574685 % finger repeats in file 2gramme.txt ( 0.627894144 ) 
# 3.37168249001 million keystrokes disbalance of the fingers ( 0.842920622 ) 
# 0.0321410932537 % finger repeats top to bottom or vice versa ( 0.220104704 
) 
# 1.35306785924 % of trigrams have no handswitching (after direction change 
counted x 1 ) ( 0.78796845 ) 
# 3.00276711862 billion (rows²/dist)² to cross ( 0.600553423724 ) 
# 0.034073636258 hand disbalance. Left: 0.465926363742 %, Right: 
0.534073636258 % 
# 0.0575808308 badly positioned shortcut keys (weighted). 
# 1.28742872 no handswitching after unbalancing key (weighted). 
# 3.51417524 movement pattern cost (weighted). 

 21 
xuc.ü vdsljq´
miaeo btrnhk
y,zäö fgßwp 
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──┐
│ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ ←│
├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─┤
│  ⇥ │ x │ u │ c │ . │ ü │ v │ d │ s │ l │ j │ q │ ´ │ Ret │
├┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─┐   │
│   ⇩ │ m │ i │ a │ e │ o │ b │ t │ r │ n │ h │ k │ ⇘  │   │
├┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┴───┤
│  ⇧ │ M4│ y │ , │ z │ ä │ ö │ f │ g │ ß │ w │ p │ ⇗   │
├┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬┬───┤
│Str │ Fe │ Al │  Leerzeichen   │ M4 │ Fe │ Me │Str│
└┴┴┴┴┴┴┴───┘ 
# 19.825044696 billion total penalty compared to notime-noeffort 
# 5.19590183127 mean key position cost in file 1gramme.txt ( 14.95921721 ) 
# 1.54621348386 % finger repeats in file 2gramme.txt ( 0.66178688 ) 
# 3.42663847398 million keystrokes disbalance of the fingers ( 0.856659618 ) 
# 0.036349195039 % finger repeats top to bottom or vice versa ( 0.248922112 
) 
# 1.51856790633 % of trigrams have no handswitching (after direction change 
counted x 1 ) ( 0.88434855 ) 
# 3.02438136579 billion (rows²/dist)² to cross ( 0.604876273157 ) 
# 0.0263628392305 hand disbalance. Left: 0.47363716077 %, Right: 
0.52636283923 % 
# 0.0575808308 badly positioned shortcut keys (weighted). 
# 1.204443 no handswitching after unbalancing key (weighted). 
# 3.47210222 movement pattern cost (weighted). 

 22 
xko.ü vdslzq´
heaiu mtrngf
yjä,ö bcßwp 
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──┐
│ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ ←│
├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─┤
│  ⇥ │ x │ k │ o │ . │ ü │ v │ d │ s │ l │ z │ q │ ´ │ Ret │
├┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─┐   │
│   ⇩ │ h │ e │ a │ i │ u │ m │ t │ r │ n │ g │ f │ ⇘  │   │
├┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┴───┤
│  ⇧ │ M4│ y │ j │ ä │ , │ ö │ b │ c │ ß │ w │ p │ ⇗   │
├┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬┬───┤
│Str │ Fe │ Al │  Leerzeichen   │ M4 │ Fe │ Me │Str│
└┴┴┴┴┴┴┴───┘ 
# 19.9857156405 billion total penalty compared to notime-noeffort 
# 5.14003464848 mean key position cost in file 1gramme.txt ( 14.79837327 ) 
# 1.30490781063 % finger repeats in file 2gramme.txt ( 0.55850688 ) 
# 4.52493023658 million keystrokes disbalance of the fingers ( 1.131232559 ) 
# 0.032682694585 % finger repeats top to bottom or vice versa ( 0.223813632 
) 
# 1.36656628184 % of trigrams have no handswitching (after direction change 
counted x 1 ) ( 0.79582935 ) 
# 3.6710958755 billion (rows²/dist)² to cross ( 0.7342191751 ) 
# 0.0327825705538 hand disbalance. Left: 0.467217429446 %, Right: 
0.532782570554 % 
# 0.1727424924 badly positioned shortcut keys (weighted). 
# 1.225103 no handswitching after unbalancing key (weighted). 
# 3.45895282 movement pattern cost (weighted). 



Zu beachten: 22 ist deutlich schlechter als 20 und 21, hat aber die 
geringsten Fingerwiederholungen. 

An der Auswertung der Tipptests schreibe ich gerade. Dieses Wochenende will 
auch die Qwertz-Tipperin den Tipptest machen. Sobald ich ihre Ergebnisse 
eingearbeitet habe, schreibe ich die Auswertung. Bis dahin ist sie im repo 
unter empirie/2010-08-17-eval.txt

Und 

[Neo] Vorschlag für Erweiterung des Lernmodus

2010-09-08 Diskussionsfäden Matthias Berg
Hallihallo,

Ich hab mal wieder in #Neo reingeschnuppert und mich wieder etwas mit
dem Thema befasst.
Dabei kam ich auf eine Idee, wie man Anfänger noch mehr beim Lernen
unterstützen kann.
http://wiki.neo-layout.org/wiki/%C3%84rgernisse%20f%C3%BCr%20Umsteiger
listet einige typische Probleme für Anfänger auf.
Man könnte im Lernmodus bei den Tastenkombinationen extra nachfragen,
ob diese Funktion wirklich durchgeführt werden solle.
Soll wirklich strg+q (QUIT) gesendet werden?
Buttons: Ja, Nein
Checkbutton: diese Warnung nicht mehr anzeigen
Ein erneutes Drücken derselben Tastenkombination soll wie Ja
genommen werden, damit man nicht jedes Mal noch zusätzlich Enter
drücken muss.
Der Checkbutton sollte am besten nur die aktuelle Warnung
deaktivieren, weil man sicherlich manche Shortcuts schneller lernt als
andere.

In AHK sollte das wohl relativ einfach umzusetzen sein. Aber ich hab
derzeit eh keine Zeit für sowas. :) Bin trotzdem gespannt, ob euch die
Idee zusagt und ob es vielleicht auch umgesetzt wird.
ciao
Matthias