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