Hi Arne,
danke für die Antwort zum Berechnen von optimierten Layouts mit deinem
Programm.
Hast du etwas Rechenleistung übrig? Dann kann ich dir einfach schreiben,
wie du es selbst machen kannst.
Wenn man nicht deutlich mehr als Python braucht, kann ich auch mal 'ne
Runde rechnen lassen.
Dann ist hier mal die Kurzbeschreibung:
Anforderungen:
* Python 3 → http://python.org/download/
* Das Skript: 2 Möglichkeiten:
(a) statisch:
http://bitbucket.org/ArneBab/evolve-keyboard-layout/get/tip.zip
(b) via hg¹: hg clone
https://bitbucket.org/ArneBab/evolve-keyboard-layout
Schritte:
* (nur für (a): Entpacken)
* mit einer shell (z.B. Eingabeaufforderung) in den Ordner gehen.
* ./check_neo.py --evolve 5 --controlled-evolution -v
* Für Hilfe: ./check_neo.py --help
(das -v bei --evolve bedeutet, dass du mehr Statistikinfos haben willst)
Prima, klappt soweit und evoluiert munter Neo-Layouts.
¹: Mercurial ermöglicht es, dass du eigene Änderungen sehr leicht wieder
hochladen kannst: http://mercurial.selenic.com
Hab's erstmal lokal entpackt, ohne Hg.
Das heisst, dass man mit deinem Skript leicht mal ein paar Varianten
für 4 bis 6 Tauschpaare (da würde ich vermutlich eine Obergrenze
setzen, da Optimierungen darüber wohl immer weniger bringen werden).
Das würde mich interessieren. Könntest Du ein paar solcher Layouts
rechnen lassen oder mit auf die Sprünge helfen, ob / wie ich das
machen kann?
Jupp. Allerdings kommt immer nur ein optimales raus. Um mehrere zu haben,
musst du an Parametern drehen. Die Parameter stehen bei „### Constants“, in
der aktuellen Version ab Zeile 207:
http://bitbucket.org/ArneBab/evolve-keyboard-
layout/src/b0bfcc4112a7/check_neo.py#cl-207
Ah, verstehe.
Dazu noch die Kosten pro Taste:
http://bitbucket.org/ArneBab/evolve-keyboard-
layout/src/b0bfcc4112a7/check_neo.py#cl-330
Mmh, ich hab' jetzt erstmal die Parameter und Kosten unverändert
übernommen.
[Stück für Stück immer zwei Tasten tauschen]
Das würd' ich eben gern mal im Selbstversuch ausprobieren. Im
schlimmsten Fall würde ich das Experiment abbrechen, wenn ich sehe,
dass es nur Ärger bringt und man sich dann ganz schwer umgewöhnen
kann, aber ich habe doch Hoffnung, dass ein weicher Übergang so
möglich sein könnte.
Viel Erfolg!
Danke. Jetzt muss ich erstmal schauen, ob ich ein schönes deutsches
4er, 5er, oder 6er-Tauschlayout finde.
In deinem Skript hab' ich zur Evolution von qwertz die Funktion
evolve_a_layout
kopiert und umbenannt und dann in der Funktion nur noch Mutating Neo
in Mutating Qwertz und die beiden Verweise auf NEO_LAYOUT in
QWERTZ_LAYOUT geändert. So sollte es o.k. sein, wenn ich von Qwertz
ausgehend Layouts finden will? Das Argument zum Aufruf aus der shell /
Konsole hab' ich natürlich auch noch ergänzt / angepasst.
Ein erster Testlauf schien auch zu funktionieren, aber hört dann mit
folgenden Zeilen auf:
[...]
# checked switch ('ü,',) 8460529269.16
# checked switch ('ü.',) 8470214246.98
# checked switch ('ßß',) 8471758187.7
# checked switch ('ß,',) 8451206818.99
# checked switch ('ß.',) 8440117316.39
# checked switch (',,',) 8471758187.7
# checked switch (',.',) 8471045516.23
# checked switch ('..',) 8471758187.7
8471.7581877 finger repetition: 17.883722 position cost: 1281.105931
Traceback (most recent call last):
File U:\evolve-keyboard-layout\check
_qwertz.py, line 1733, in module
evolve_a_layout_qwertz(steps=int(argv[2]), prerandomize=PRERANDOMIZE, quiet=
QUIET, controlled=CONTROLLED_EVOLUTION, verbose=VERBOSE)
File U:\evolve-keyboard-layout\check
_qwertz.py, line 1529, in evolve_a_layout_qwertz
lay, cost = evolve(letters, repeats, trigrams, layout=lay, iterations=steps,
quiet=quiet, controlled=controlled)
File U:\evolve-keyboard-layout\check
_qwertz.py, line 1262, in evolve
lay, cost, better = controlled_evolution_step(letters, repeats, trigrams, st
ep, layout, abc, cost, quiet)
File U:\evolve-keyboard-layout\check
_qwertz.py, line 1236, in controlled_evolution_step
print(lay)
File C:\Programme\Python\lib\encodings\cp850.py, line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2190' in position
68: character maps to undefined
Vergleichbare Meldung bekomme ich, wenn ich die Evolution ohne
Änderung am Quelltext für Neo durchlaufen lasse :-(
PS: War es Absicht, dass die Mail nicht an die Liste ging?
Jein, hatte auf reply geklickt und gesehen, dass Du als Empfänger
ohne Liste angegeben warst. Da hab' ich es so gelassen, da ich nicht
sicher war, ob es für alle interessant ist, aber nun wieder in die
Liste geantwortet ... :-)
Viele Grüße
Peter