Re: [Neo] Vergleich Qwertz - Neo2 + Optimierung genetischer Algorithmus

2019-02-01 Diskussionsfäden Thomas Fehér
On 1/17/19 9:03 PM, Daniel Schröter wrote:
> Hallo liebe Neo-Community,
>
> ich bin letztes Jahr auf das Neo-Layout gestoßen und fand die Idee
> direkt faszinierend. Beim Durchlesen der Seiten habe ich einen genauen
> Vergleich der bisher bestehenden Tastaturlayouts und Neo2 vermisst. Also
> habe ich mich daran gemacht ein kleines Python-Programm zu schreiben,
> das einen beliebigen Text mit einem vorgegebenen Layout „abtippt“ und
> die Anschläge der einzelnen Finger sowie die insgesamt zurückgelegte
> Distanz ausgibt. Das Ergebnis kann sich sehen lassen; hier der Vergleich
> von Qwertz zu Neo2:
>
> *Text*
>
>
>
> *Anzahl*
>
> *Zeichen*
>
>
>
> *Strecke*
>
> *Qwertz [m]*
>
>
>
> *Strecke*
>
> *Neo2 [m]*
>
>
>
> *Einsparung [%]*
>
> Jung- Die Eroberung der Maschinen
>
>
>
> 368.704
>
>
>
> 5.593
>
>
>
> 4.564
>
>
>
> 18,40
>
> C++Code
>
>
>
> 91.605
>
>
>
> 2.232
>
>
>
> 1.522
>
>
>
> 31,79
>
> Bogdanow - Der rote Planet
>
>
>
> 292.615
>
>
>
> 4.495
>
>
>
> 3.712
>
>
>
> 17,43
>
>  
>
> In einem 2. Schritt habe ich dann das Programm um einen genetischen
> Optimierungsalgorithmus erweitert, um zu sehen wieviel
> Optimierungspotential noch vorhanden ist. Die Vorgabe zur Optimierung
> ist relativ simpel gehalten: Minimierung der zurückgelegten Distanz der
> Finger (Gewichtung 75 %) + eine Gleichverteilung der Anschläge auf beide
> Hände mit 25 % der Anschläge für die Zeigefinger, 10 % jeweils für
> Mittel- und Ringfinger und 5% für die kleinen Finger (Gewichtung 25 %).
> Zusätzlich sind einige Tasten fix und dürfen in ihrer Position nicht
> geändert werden (z. B. Shift, Enter, Leertaste, usw.). Um die
> Komplexität des Modells im Rahmen zu halten wird zudem immer nur eine
> Ebene optimiert. D.h. bisher habe ich mir nur die erste Ebene mit
> Kleinbuchstaben vorgenommen und vorab den Optimierungstext in
> Kleinbuchstaben umgewandelt. Sonderzeichen, die nicht auf der ersten
> Ebene enthalten sind, wurden nicht berücksichtigt. Hier das Ergebnis
> eines ersten Optimierungslaufs über 1000 Generationen:
>
> Die Tatsache, dass Buchstaben wie „y“ und „ö“ im zentralen Block für die
> Zeigefinger landen, zeigt, dass die Fitness-Funktion sowie die Parameter
> zur Fingerhäufigkeiten wohl noch besser gewählt werden könnten. Auch
> ergeben sich bei mehrmaligem Ablauf der Optimierung immer wieder neue
> Lösungen mit guten Ergebnissen. Interessant aber, dass die Distanz der
> Fingerbewegung im Vergleich zu Neo2 nochmal um etwa 15% reduziert wurde:
>
>  
>
> Eine sinnvolle Erweiterung der Fitness-Funktion wäre mit Sicherheit eine
> Berücksichtigung von Tippfolgen mit Wechsel zwischen linker und rechter
> Hand und evtl. eine Rückkehr zur Grundstellung bzw. die Vorgabe von mehr
> festgelegten Tasten. Derzeit gilt die Annahme, dass der Finger nach dem
> Tippen einer Taste genau an dieser Stelle verweilt, bis der nächste
> Tastendruck für denselben Finger erfolgt. Bei Interesse stelle ich gerne
> den Quellcode in Form eines Jupyter-Notebooks zur Verfügung.
>
> Viele Grüße
> Daniel
>
>  
>

Hallo Daniel,

falls du es noch nicht kennst, schau dir mal "bone" an
(http://wiki.neo-layout.org/wiki/Bone). Das wurde meines Wissens nach
mit einer genetischen Optimierung entworfen und wird schon von einigen
in der Praxis benutzt, unter anderem von mir. Ich kann nur sagen, dass
es sich wesentlich flüssiger schreibt als Neo2.

Grüße,

Tom



Re: [Neo] Vergleich Qwertz - Neo2 + Optimierung genetischer Algorithmus

2019-01-18 Diskussionsfäden Arne Babenhauserheide
Hallo Daniel,

Wenn du noch nach Ideen für Fitness suchst, kannst du auf der
Dokumentation meines Optimierers aufbauen.

→ 
https://bitbucket.org/ArneBab/evolve-keyboard-layout/src/c4df8323467538ac274c58f28c1b82ea5d58efa1/README_de.txt#README_de.txt-65

Meine Erfahrung ist zumindest, dass noch viel Optimierungspotential ist,
dass aber viel Detailarbeit notwendig ist, um die intuitiv gewählten
Entscheidungen bei Neo2 zu replizieren.

Ich tippe inzwischen seit Jahren auf cry, bin damit aber nicht völlig
zufrieden. Leider schaffe ich es seit zwei Jahren nicht, mir die Zeit zu
nehmen, meine letzten Optimierungen zu realisieren (effiziente
Berechnung der Glattheit (regularity) des Tippens).

Liebe Grüße,
Arne

Daniel Schröter  writes:

> Hallo Manuel,
>
> vielen Dank für deine Rückmeldung. Ich habe den Code bei GitHub hochgeladen:
>
> https://github.com/daneil86/KeyboardOptimization/tree/master
>
> Zu deinen Fragen:
> 1. Bei der Evaluierung Qwertz vs. Neo2 habe ich auch die 2. Ebene 
> berücksichtigt. Nur bei der Optimierung wurde dann nur noch die erste Ebene 
> berücksichtigt. Um anschließend nicht Äpfel mit Birnen zu vergleichen, ist 
> dann beim Vergleich von Optimierter Version zu Qwertz und Neo2 jeweils nur 
> die 1. Ebene miteingeflossen.
> 2. Die 5% als Vorgabe zur Optimierung für die kleinen Finger habe ich aus dem 
> Bauch heraus getroffen. Da kann man sicherlich noch bessere Parameter wählen. 
> Aber wie du schon erwähnt hast ist dabei zu beachten, dass in der aktuellen 
> Version das Drücken von Shift nicht berücksichtigt wird, da nur ein Layer.
> 3. Für mich war erstmal die Hauptfrage wieviel Optimierungspotential noch 
> drin steckt. Ich sehe es aber auch eher kritisch, da zum einen die Frage 
> besteht ob die zurückgelegte Fingerdistanz das ausschlaggebende Kriterium ist 
> und zum anderen hat das Neo2-Layout unter ästhetischen Gesichtspunkten 
> eindeutig die Nase vorne. Ich denke wenn genetische Optimierung in ein neues 
> „Neo3“ einfließen würde, wäre es mit Sicherheit eher für neue Nutzer 
> interessant. Abgesehen davon war für mich auch eine Hauptmotivation, dass ich 
> schon immer mal einen genetischen Algorithmus anwenden wollte und auch noch 
> nie etwas in Python gemacht habe .Die Tastaturoptimierung erschien mir da ein 
> schönes Anwendungsbeispiel zu sein.
>
> Viele Grüße
> Daniel
>
>
> Von: Manuel 
> Gesendet: Donnerstag, 17. Januar 2019 23:05
> An: Neo-Layout ; Daniel Schröter 
> 
> Betreff: Re: [Neo] Vergleich Qwertz - Neo2 + Optimierung genetischer 
> Algorithmus
>
> Hallo Daniel,
> vielen Dank für diese Untersuchung, hochinteressant! Ganz ehrlich: Beim lesen 
> des Betreffs 'genetischer Algorithmus' hab ich schon befürchtet, dass da 
> jemand kommt à la: Hallo, bin über das Buzzword genetischer Algorithmus 
> gestolpert, ich kann nicht programmieren und jemand soll mir Neo daraufhin 
> analysieren so-und-so sind meine Vorstellungen wie man das umsetzt... nein, 
> du hast es einfach gemacht ohne um den heißen Brei rum zu reden! Klasse!
> Ich interessiere mich für deinen Code und würde mich freuen wenn du deine 
> Implementierung als ipythonnotebook/git[lab,hub] verfügbar machen würdest.
> Zu deiner Untersuchung:
> 1. Mich wundert, dass beim C++ Code die Einsparung so groß ist gegenüber den 
> anderen beiden Texten. An den {}() liegt es ja nicht − du rechnest ja erstmal 
> nur mit der ersten Ebene, ohne Sonderzeichen. Woran liegt's?
> 2. Das 'z' in der Grundreihe lies mich stutzen: Wie kommst du auf die 5% für 
> den kleinen Finger? Damit er frei bleibt für Shift, Strg und Meta?
> 3. Zum Schluss noch eine destruktive Frage: Ich schätze die Umlernzeit zu 
> einem neues Layout auf 1 Monat bis es benutzbar ist und 6 Monate bis man es 
> flüssig tippen kann. Wer würde von Neo2 auf ein genetisch optimiertes Neo3 
> mit sagen wir 20% weniger Fingerweg umsteigen? Oder ist das für die neue 
> Generation Neo-user gedacht?
> Optimale Grüße,
> Manuel
> Am 17.01.19 um 21:03 schrieb Daniel Schröter:
> Hallo liebe Neo-Community,
> ich bin letztes Jahr auf das Neo-Layout gestoßen und fand die Idee direkt 
> faszinierend. Beim Durchlesen der Seiten habe ich einen genauen Vergleich der 
> bisher bestehenden Tastaturlayouts und Neo2 vermisst. Also habe ich mich 
> daran gemacht ein kleines Python-Programm zu schreiben, das einen beliebigen 
> Text mit einem vorgegebenen Layout „abtippt“ und die Anschläge der einzelnen 
> Finger sowie die insgesamt zurückgelegte Distanz ausgibt. Das Ergebnis kann 
> sich sehen lassen; hier der Vergleich von Qwertz zu Neo2:
> Text
> Anzahl
> Zeichen
> Strecke
> Qwertz [m]
> Strecke
> Neo2 [m]
> Einsparung [%]
> Jung- Die Eroberung der Maschinen
> 368.704
> 5.593
> 4.564
> 18,40
> C++Code
> 91.605
> 2.232
> 1.522

Re: [Neo] Vergleich Qwertz - Neo2 + Optimierung genetischer Algorithmus

2019-01-18 Diskussionsfäden Daniel Schröter
Hallo Manuel,

vielen Dank für deine Rückmeldung. Ich habe den Code bei GitHub hochgeladen:

https://github.com/daneil86/KeyboardOptimization/tree/master

Zu deinen Fragen:
1. Bei der Evaluierung Qwertz vs. Neo2 habe ich auch die 2. Ebene 
berücksichtigt. Nur bei der Optimierung wurde dann nur noch die erste Ebene 
berücksichtigt. Um anschließend nicht Äpfel mit Birnen zu vergleichen, ist dann 
beim Vergleich von Optimierter Version zu Qwertz und Neo2 jeweils nur die 1. 
Ebene miteingeflossen.
2. Die 5% als Vorgabe zur Optimierung für die kleinen Finger habe ich aus dem 
Bauch heraus getroffen. Da kann man sicherlich noch bessere Parameter wählen. 
Aber wie du schon erwähnt hast ist dabei zu beachten, dass in der aktuellen 
Version das Drücken von Shift nicht berücksichtigt wird, da nur ein Layer.
3. Für mich war erstmal die Hauptfrage wieviel Optimierungspotential noch drin 
steckt. Ich sehe es aber auch eher kritisch, da zum einen die Frage besteht ob 
die zurückgelegte Fingerdistanz das ausschlaggebende Kriterium ist und zum 
anderen hat das Neo2-Layout unter ästhetischen Gesichtspunkten eindeutig die 
Nase vorne. Ich denke wenn genetische Optimierung in ein neues „Neo3“ 
einfließen würde, wäre es mit Sicherheit eher für neue Nutzer interessant. 
Abgesehen davon war für mich auch eine Hauptmotivation, dass ich schon immer 
mal einen genetischen Algorithmus anwenden wollte und auch noch nie etwas in 
Python gemacht habe .Die Tastaturoptimierung erschien mir da ein schönes 
Anwendungsbeispiel zu sein.

Viele Grüße
Daniel


Von: Manuel  
Gesendet: Donnerstag, 17. Januar 2019 23:05
An: Neo-Layout ; Daniel Schröter 

Betreff: Re: [Neo] Vergleich Qwertz - Neo2 + Optimierung genetischer Algorithmus

Hallo Daniel,
vielen Dank für diese Untersuchung, hochinteressant! Ganz ehrlich: Beim lesen 
des Betreffs 'genetischer Algorithmus' hab ich schon befürchtet, dass da jemand 
kommt à la: Hallo, bin über das Buzzword genetischer Algorithmus gestolpert, 
ich kann nicht programmieren und jemand soll mir Neo daraufhin analysieren 
so-und-so sind meine Vorstellungen wie man das umsetzt... nein, du hast es 
einfach gemacht ohne um den heißen Brei rum zu reden! Klasse!
Ich interessiere mich für deinen Code und würde mich freuen wenn du deine 
Implementierung als ipythonnotebook/git[lab,hub] verfügbar machen würdest.
Zu deiner Untersuchung:
1. Mich wundert, dass beim C++ Code die Einsparung so groß ist gegenüber den 
anderen beiden Texten. An den {}() liegt es ja nicht − du rechnest ja erstmal 
nur mit der ersten Ebene, ohne Sonderzeichen. Woran liegt's?
2. Das 'z' in der Grundreihe lies mich stutzen: Wie kommst du auf die 5% für 
den kleinen Finger? Damit er frei bleibt für Shift, Strg und Meta? 
3. Zum Schluss noch eine destruktive Frage: Ich schätze die Umlernzeit zu einem 
neues Layout auf 1 Monat bis es benutzbar ist und 6 Monate bis man es flüssig 
tippen kann. Wer würde von Neo2 auf ein genetisch optimiertes Neo3 mit sagen 
wir 20% weniger Fingerweg umsteigen? Oder ist das für die neue Generation 
Neo-user gedacht?
Optimale Grüße,
Manuel
Am 17.01.19 um 21:03 schrieb Daniel Schröter:
Hallo liebe Neo-Community,
ich bin letztes Jahr auf das Neo-Layout gestoßen und fand die Idee direkt 
faszinierend. Beim Durchlesen der Seiten habe ich einen genauen Vergleich der 
bisher bestehenden Tastaturlayouts und Neo2 vermisst. Also habe ich mich daran 
gemacht ein kleines Python-Programm zu schreiben, das einen beliebigen Text mit 
einem vorgegebenen Layout „abtippt“ und die Anschläge der einzelnen Finger 
sowie die insgesamt zurückgelegte Distanz ausgibt. Das Ergebnis kann sich sehen 
lassen; hier der Vergleich von Qwertz zu Neo2:
Text
Anzahl
Zeichen
Strecke
Qwertz [m]
Strecke
Neo2 [m]
Einsparung [%]
Jung- Die Eroberung der Maschinen
368.704
5.593
4.564
18,40
C++Code
91.605
2.232
1.522
31,79
Bogdanow - Der rote Planet
292.615
4.495
3.712
17,43
 
In einem 2. Schritt habe ich dann das Programm um einen genetischen 
Optimierungsalgorithmus erweitert, um zu sehen wieviel Optimierungspotential 
noch vorhanden ist. Die Vorgabe zur Optimierung ist relativ simpel gehalten: 
Minimierung der zurückgelegten Distanz der Finger (Gewichtung 75 %) + eine 
Gleichverteilung der Anschläge auf beide Hände mit 25 % der Anschläge für die 
Zeigefinger, 10 % jeweils für Mittel- und Ringfinger und 5% für die kleinen 
Finger (Gewichtung 25 %). Zusätzlich sind einige Tasten fix und dürfen in ihrer 
Position nicht geändert werden (z. B. Shift, Enter, Leertaste, usw.). Um die 
Komplexität des Modells im Rahmen zu halten wird zudem immer nur eine Ebene 
optimiert. D.h. bisher habe ich mir nur die erste Ebene mit Kleinbuchstaben 
vorgenommen und vorab den Optimierungstext in Kleinbuchstaben umgewandelt. 
Sonderzeichen, die nicht auf der ersten Ebene enthalten sind, wurden nicht 
berücksichtigt. Hier das Ergebnis eines ersten Optimierungslaufs über 1000 
Generationen:

Die Tatsache, dass Buchstaben wie „y“ und „ö“ im zentralen Block für die 
Zeigefinger