WIP
[evolve-layout.git] / empirie / 2010-08-17-gedanken.txt
blob2ed9222b86376d217eae269371fa32bbfba0578a
1 Unsortierte Gedanken zum optimieren in dieser Runde
2 ===================================================
4 * Die Fingerlast ist aktuell Kleiner 1, Ring und Mittel 2, Zeige 2,6. Vielleicht sollten wir das ändern auf Kleiner 1, Ring 2, Mittel und Zeige 2,6. Vielleicht sogar nur 1,6 für den Ringfinger (o.ä.). 
6 * Die Bewegungsmuster müssen getestet werden. Sie sind bisher der am wenigsten klare Teil der Optimierung.
8 * grep-Kaskaden, um alle Parameter bis auf einen halbwegs festzuhalten. 
10 * Die Kosten des Ringfingers unten sind vermutlich zu niedrig.
12 * Finden der optimalen Gewichtung:
13   Man wählt aus den 1000 Layouts die mit möglichst gleichen Werten in
14   den Einzeldisziplinen aus, wobei allen gemeinsam ist, dass ein Wert
15   um einen gleichen Wert (anteilig an der Gesamtpunktzahl) abweicht.
16   Tippt sich dann eines dieser Layouts besser, so weiß man, dass dieser
17   Parameter bisher zu wenig gewichtet war.
18   idealisiertes Bsp.:
19    #  Par. 1  Par. 2  Par. 3  Par. 4  Par. 5  Gesamt
20    1     119      94      79      75      68     435
21    2     103      98      83      79      72     435
22    3     123      78      83      79      72     435
23    4     123      98      63      79      72     435
24    5     123      98      83      59      72     435
25    6     123      98      83      79      52     435
27 * Sollte man die Parameter vielleicht nichtlinear bewerten, sodass
28   negative Ausreißer bei einzelnen Parametern stärker gestraft werden?
29   Bsp.:
30    #  Par. 1  Par. 2  Par. 3  Par. 4  Par. 5  Gesamt
31    1     119      94      79      75      68     435
32    7     109      84      69     115      58     435
33   Hier haben beide die gleiche Gesamtpunktzahl, 7 aber einen starken
34   Ausreißer bei Parameter 4. 
35   → Um dafür eine einfachst mögliche Methode zu nutzen (quadratisch), müssen wir sie normieren. Kosten = ∑ (p + p²) (p: gewichteter Parameter mit Wert um 1) würde Abweichungen nach oben stärker bestrafen, nach unten aber linear agieren. Die Normierung benötigt aber zusätzliche Arbeit. 
37 * Für ein paar besonders schlechte Übergänge (äv, öx, öl, …) könnten wir Sonderkosten einführen. 
39 Buchstabenhäufigkeiten
40 ----------------------
42 Die häufigsten 8 Buchstaben + Leerzeichen nehmen im Deutschen 65% der Anschläge ein (unter den Fingern?). Die 12 häufigsten bereits 75%. Die 19 häufigsten belegen 91% (Finger + einfach Streck: die einfach zu erreichenden Tasten). Rechnen wir noch Zeigefinger unten zu den guten Tasten und ersetzen kleiner Streck durch kleiner unten, kommen wir auf 93% bei den häufigsten 21 Zeichen. In einem 100-Zeichen-Text hätten wir in einem nur auf positionen optimierten Text also 7 Klicks auf schlecht zu erreichende Tasten, ansgesamt also wohl 5-7 nicht ideal zu tippende Wörter. Von vielleicht 20. Die 4 schlechtesten (a[28:32], in Neo die Tasten xqßz) machen nur 0.8% aus, es wird also in einem 100-Zeichen Text ungefähr ein Wort mit richtig schlechtem Zeichen auf der Grundebene geben. Die 28 besten machen allerdings nur 98% aus, da einige Zeichen nicht auf der Grundebene sind. Das ist die Buchstabenverteilung unserer Sprache, so dass wir es nicht umgehen können. Optimierung auf weitere Parameter außer den reinen Positionskosten wird die Anzahl der schlechten Positionen etwas erhöhen. 
43   Ich fände es schön, wenn wir öä,.ß und z nochmal niedriger halten könnten als bisher. dazu vielleicht noch xq für Leute mit kurzem kleinen Finger. Und dabei für die Kosten nicht nur die Zeit und Anstrengung rechnen, sondern auch die Störung des Schreibflusses durch die schlechten Tasten. 
44   Praktisch würde ich gerne testen, die Kosten von xqöä,.zß zu verdoppeln. 
45   
46   Daten:   
47   # a = [(häufigkeit, buchstabe), …] aus 1gramme.txt, großbuchstaben mit den kleinbuchstaben vereint.
48   b = [(i,j) for i, j in a if j == j.lower()]
49   c = [(i,j.lower()) for i, j in a if j != j.lower()]
50   a = b[:]
51   for i, j in c: 
52     if j in [k for l, k in b]: 
53       idx = [k for l, k in b].index(j)
54       a[idx] = a[idx][0] + i, a[idx][1]
56   >>> sum([i for i, j in a])
57   334378795
58   >>> s = sum([i for i, j in a])
59   >>> a[:9]
60   [(46474641, ' '), (45001174, 'e'), (27445450, 'n'), (21757021, 'i'), (21136496, 'r'), (17563086, 't'), (17771468, 's'), (16292906, 'a'), (13221393, 'd')]
61   >>> len(a)
62   117
63   >>> sum([i for i, j in a[:9]])/s
64   0.6778648598216284
65   >>> sum([i for i, j in a[:12]])/s
66   0.7751037801305553
67   >>> sum([i for i, j in a[12:24]])/s
68   0.18442048934353028
69   >>> sum([i for i, j in a[24:36]])/s
70   0.03369446618168476
71   >>> sum([i for i, j in a[:16]])/s
72   0.8678191749569526
73   >>> sum([i for i, j in a[:19]])/s
74   0.9116715580005604
75   >>> sum([i for i, j in a[:21]])/s
76   0.9328267870574748
77   >>> sum([i for i, j in a[:24]])/s
78   0.9595242694740855
79   >>> sum([i for i, j in a[28:32]])/s
80   0.007781354675914781
81   >>> (sum([i for i, j in a[:12]])/s ) / (sum([i for i, j in a[12:24]])/s)
82   4.6051442950186
83   >>> (sum([i for i, j in a[12:24]])/s ) / (sum([i for i, j in a[24:36]])/s)
84   3.4217716169245835
85   >>> (sum([i for i, j in a[:12]])/s ) / (sum([i for i, j in a[24:36]])/s)
86   15.757752040536815
87   >>> a_new = [(46474641, ' '), (45001174, 'e'), (27445450, 'n'), (21757021, 'i'), (21136496, 'r'), (17771468, 's'), (17563086, 't'), (16292906, 'a'), (13221393, 'd'), (11850582, 'h'), (10390119, 'l'), (10273932, 'u'), (8344522, 'g'), (7604943, 'c'), (7577990, 'o'), (7474607, 'm'), (5717030, 'b'), (4841194, 'f'), (4105083, 'k'), (3950140, 'w'), (3419024, 'z'), (3123720, '.'), (2808032, 'p'), (2700016, ','), (2571853, 'v'), (1864032, 'ü'), (1623893, 'ä'), (811040, '-'), (773556, '"'), (762568, 'j'), (731669, 'ö'), (647943, '0'), (448752, '1'), (439924, 'ß'), (301687, '2'), (301143, 'y'), (289798, ':'), (261624, '9'), (206463, '5'), (188215, '3'), (157950, '4'), (152334, 'x'), (133645, '6'), (130285, '8'), (128866, '('), (128814, ')'), (118844, '7'), (90799, "'"), (82573, '?'), (72411, 'q'), (29423, '/'), (24430, ';'), (19996, '!'), (12879, 'é'), (6381, '&'), (2616, '%'), (1640, '+'), (1516, 'á'), (1318, '`'), (1249, '§'), (1089, 'è'), (936, '\x84'), (899, '\x93'), (834, 'ó'), (680, 'à'), (657, 'í'), (634, 'ç'), (601, '['), (596, ']'), (510, 'ë'), (481, '\x96'), (412, '»'), (410, '='), (390, '«'), (291, '°'), (277, 'ô'), (261, 'ñ'), (232, '@'), (206, '$'), (192, 'ú'), (181, 'ã'), (161, 'ø'), (152, 'â'), (137, 'ê'), (112, '>'), (92, '<'), (78, 'å'), (78, '_'), (69, 'î'), (66, 'ï'), (52, 'æ'), (49, '¤'), (49, '\x92'), (41, 'ò'), (24, 'û'), (24, '^'), (22, 'ì'), (18, 'ù'), (17, '²'), (16, '\x82'), (12, 'µ'), (9, '×'), (8, '½'), (7, '#'), (6, 'õ'), (6, '£'), (5, '\x91'), (4, '±'), (2, '¼'), (2, 'º'), (2, '®'), (2, '}'), (2, '{'), (1, 'ÿ'), (1, 'ý'), (1, '¾'), (1, '³')]