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 <neo-hardw...@gmx.de> 
Gesendet: Donnerstag, 17. Januar 2019 23:05
An: Neo-Layout <diskussion@neo-layout.org>; Daniel Schröter 
<daniel.schroe...@gmx.de>
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 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
 


Antwort per Email an