Am 28.03.2010 01:24, schrieb Arne Babenhauserheide: > Hi, > > Ich habe check_neo inzwischen so weit, dass es auf die meisten Kriterien > prüfen und ein Layout darauf optimieren kann. > > Allerdings arbeitet das Layout aktuell mit hächstens abgeschätzten > Parametern, > daher brauche ich Hilfe, um es wirklich sinnvoll zu machen. > > Das Layout verwendet Kostenparameter, um die Güte eines Layouts zu berechnen, > und alles steht und fällt damit, wie gut diese Parameter sind (zusammen mit > der Qualität der Wortliste). > > Ihr könnt die Parameter recht einfach selbst anpassen und mit euren Werten > testen (sie stehen im Skript aktuell in den Zeilen 257 bis 276, kommen aber > auch gleich in dieser Mail: http://bitbucket.org/ArneBab/evolve-keyboard- > layout/src/4bc6c132ec95/check_neo.py#cl-257 ). > > Bitte nicht erschrecken, wenn das etwas unübersichtlich wirkt. Sie sind alle > hinter dem Wert auf Englisch erklärt. > > Jeder Wert hier steht für die Gewichtung einer Kostenfunktion. Desto höher > sie > ist, desto wichtiger ist der Punkt in der Berechnung. > > Wenn ihr zu einer davon Fragen oder Anmerkungen habt, dann schreibt es bitte! > > > WEIGHT_POSITION = 1 #: reference > WEIGHT_FINGER_REPEATS = 8 #: higher than a switch from center to side, but > lower than a switch from center to upper left. > WEIGHT_FINGER_REPEATS_TOP_BOTTOM = 16 #: 2 times a normal repeat, since it's > really slow. Better two outside low or up than an up-down repeat. > WEIGHT_FINGER_DISBALANCE = 5 #: multiplied with the standard deviation of the > finger usage - value guessed and only valid for the 1gramme.txt corpus. > WEIGHT_TOO_LITTLE_HANDSWITCHING = 1 #: how high should it be counted, if the > hands aren’t switched in a triple? > WEIGHT_INTENDED_FINGER_LOAD_LEFT_PINKY_TO_RIGHT_PINKY = [ > 1, > 2, > 2, > 3, > 1, > 1, > 3, > 2, > 2, > 1] #: The intended load per finger. Inversed and then used as multiplier > for the finger load before calculating the finger disbalance penalty. Any > load > distribution which strays from this optimum gives a penalty. > WEIGHT_XCVZ_ON_BAD_POSITION = 0.1 #: the penalty *per letter* in the text if > xvcz are on bad positions (cumulative; if all 4 are on bad positions (not in > the first 5 keys, counted from the left side horizontally) we get 4 times the > penalty). > > > Außerdem gibt es noch die Kosten pro Taste, Zeile 356 ( > http://bitbucket.org/ArneBab/evolve-keyboard- > layout/src/4bc6c132ec95/check_neo.py#cl-356 ) > Hier müssen noch die Kosten für die Gesamtbelastung der Finger rausgenommen > werden, da die schon woanders abgedeckt werden. Also sollte nur noch die > Erreichbarkeit der Taste (und die Geschwindigkeit des jew. Fingers) und die > Belastung die ein Druck auf genau diese Taste bringt drinstehen, nicht aber > sowas wie „der Kleine ist eh schwächer, auch wenn genau die Taste für ihn > eigentlich kein Problem ist“. > > # Structured reweighting (but still mostly from experience and deducing from > the work of others). > COST_PER_KEY = [ # 0 heißt nicht beachtet > [0,0,0,0,0,0,0,0,0,0,0,0,0,0], # Zahlenreihe (0) > [0, 12,9,6,4,10,10,4,6,9,12,15,18,0], # Reihe 1 > [0, 5,3,3,2,5,5,2,3,3,5,12,0,15], # Reihe 2 > [15,0,10,11,11,7,12,10,7,11,11,10,15], # Reihe 3 > [0,0,0, 5 ,0,0,0,0] # Reihe 4 mit Leertaste > ] > > Der Punkt braucht allerdings überarbeitung. Wenn sich jemand von euch mal die > Kosten pro Taste vornehmen will, würde ich (dem Vorschlag von Michael > Ostermeier folgend) vorschlagen, dem Zeigefinger nicht wie hier 2, sondern 10 > Strafpunkte zu geben, dann haben wir mehr Flexibilität. Die Bedingung ist, > dass die Punkte ganze Zahlen sind (sonst wird der Code unnötig langsamer). > > > Nun aber dazu, wie ihr es selbst testen könnt (nur unter GNU/Linux geprüft; > ich habe hier nichts anderes): > > 1. Tarball-Snapshot (braucht Python3 → http://python.org/download ) > - wget http://bitbucket.org/ArneBab/evolve-keyboard- > layout/get/55e78a669261.bz2 > - tar xf 55e78a669261.bz2 > - cd evolve-keyboard-layout/ > - ./check_neo.py > > 2. Versionsverwaltung (braucht Python3 und Mercurial): > - (falls noch nicht vorhanden: easy_install mercurial ) > - hg clone https://[email protected]/ArneBab/evolve-keyboard-layout/ > - cd evolve-keyboard-layout/ > - ./check_neo.py > > Der Aufruf started den Vergleich der Ergebnisse für Neo, Qwertz, Nordtast, > Dvorak und Colemak. Alle Vergleiche nutzen die Leipziger Wortliste. Wenn ihr > eine andere Wortlist wollt, müsst ihr nur 1gramme.txt, 2gramme.txt und > 3gramme.txt austauschen. > > > Zusätzlich könnt ihr ein Layout durch zufällige Mutationen entwickeln lassen, > d.h. es werden zufällig Tasten vertauscht, und wenn das mutierte Layout > besser > ist (weniger Strafpunkte hat) als das alte, wird die Mutation behalten. > > Was z.B. interessant sein dürfte: > > ./check_neo.py --evolve 1000 > 1000 Mutationen testen. > > > Ein paar andere Methoden findet ihr via > > ./check_neo.py --help > > Das einfachste evolve scheint aber am effizientesten zu sein. > > Mit der Bash könnt ihr außerdem viele Ergebnisse hintereinander berechnen > (z.B. nützlich, um den Rechner eine Urlaubswoche lang arbeiten zu lassen). > Hier z.B. für 100 Layouts: > > for i in {0..99}; do time ./check_neo.py --evolve 1000 --prerandomize > 10000 -q; done>> 2010-03-28-evolve-1000-results.txt > > „-q“ hier sagt: zeig mir nur das Ergebnis, nicht die Zwischenschritte. > > Das beste findet ihr hier z.B. via grep, sort und tail. Hier für > Fingerwiederholungen > > grep 2gramme 2010-03-28-evolve-1000-results.txt | sort -ur | tail > > Dann nach dem besten Ergebnis suchen. Mein aktuell bestes für > Fingerwiederholungen: > > grep "1.02004994329 % finger repeats in file 2gramme.txt" 2010-03-26- > evolve-10000-results.txt -A3 -B8 > # Evolved Layout > [['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '`', ()], > [(), 'ö', 'w', 'c', 'a', 'ä', 'f', 'h', 'u', 'm', 'y', 'x', '´', ()], > ['⇩', 't', 'n', 'r', 'e', 'o', 'g', 'd', 'i', 's', 'l', 'ß', '⇘', '\n'], > ['⇧', (), 'ü', 'p', 'v', '.', 'q', 'k', 'b', 'j', 'z', ',', '⇗'], > [(), (), (), ' ', (), (), (), ()]] > # 1.30856908 billion total penalty compared to notime-noeffort > # 14.8497008604 million keystrokes disbalance of the fingers > # 1.02004994329 % finger repeats in file 2gramme.txt > # 0.212532496307 % finger repeats top to bottom or vice versa > # 8.94816062502 % of trigrams have no handswitching (uppercase ignored) > # 4.00409258152 mean key position cost in file 1gramme.txt > > > Nebenbei: Die Befehle hängen alle an die Ausgabedatei an, so dass es nur eine > sehr geringe Chance gibt, dass sie sich in die Quere kommen, wenn ihr einfach > mehrere nebeneinanden startet. Am effizientesten ist einer pro Prozessorkern. > > Ich lasse dieses Wochenende so eine Rechnung laufen, allerdings gleich mit > 10 000 Mutationsschritten, so dass bei mir ein einzelner Durchlauf knapp 5 > Stunden dauert. > > > Nun aber viel Spaß beim Spielen :) > > Ich würde mich über eure Rückmeldung freuen - und natürlich auch darüber, > wenn > ihr eure interessantesten Ergebnisse schreibt. > > Liebe Grüße, > Arne > > PS: Solltet ihr auf einen Bug stoßen, dann schreibt das bitte auch. Ich habe > die letzten Tage recht viel umstrukturiert, so dass sich noch ein paar Fehler > im Code verstecken könnten…
Ich bekomme den Fehler:
Traceback (most recent call last):
File "D:\Neo\NEOlytic\check_neo.py", line 1426, in <module>
check_the_neo_layout(quiet=QUIET)
File "D:\Neo\NEOlytic\check_neo.py", line 1343, in check_the_neo_layout
data1 = read_file("1gramme.txt")
File "D:\Neo\NEOlytic\check_neo.py", line 487, in read_file
data = f.read()
File "C:\DEV\python31\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position
1306: character maps to <undefined>
Was das AFAIK das „Á“ ist… Weiß jemand warum er das nicht mag?
Gruß Florian
signature.asc
Description: OpenPGP digital signature
