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


Antwort per Email an