Je dupplique ici un message que j'ai déjà posté ailleurs concernant ce que je vois comme étant l'algorithme pour la V2. À lire les commentaires par-ci par-là j'ai l'impression que certains entendent faire une partie du boulot à la main et basé sur plusieurs heuristiques (par exemple, si on devait faire comme pour la V1: mettre toutes les voyelles à gauche et la ponctuation sous les index).
J'aimerais donc proposer une approche moins arbitraire pour la V2 qui se base sur des paramètres précis. Elle est très inspirée de
http://mtgap.bilfo.com/keyboard.html .
Tout le monde est d'accord là-dessus: on veut un clavier qui minimise l' "effort de frappe" basé sur les doigts utilisés, les digrammes et trigrammes fréquents. Voilà donc l'algo (ou plutôt le modèle) que je propose. Par simplicité on va supposer que les touches maj, altgr et autres sont fixes et qu'on ne fait que décider de l'emplacement des caractères sur les 35 touches centrales:
- on associe à la touche x du clavier une valeur correspondant à sa pénalité et on stocke ca dans un tableau V1[x] (c'est la carte d'accessibilité
http://bepo.fr/wiki/Carte_d%27accessibilit%C3%A9_des_touches)
- on fait pareil pour les digrammes: chaque succession de touches xy on associe une valeur stockée dans un tableau V2[x][y]
- pareil pour les successions de 3 touches: V3[x][y][z] contient la valeur de la séquence de touches xyz.
De l'autre côté on suppose qu'on a un corpus qui a été filtré de telle sorte qu'il soit réduit à 35 caractères (on supprime les touches non présentes ou on remplace û par ^u, etc). Ses stats sont résumées dans 3 tableaux correspondant aux tableaux de pénalité:
- F1[x] contient la fréquence d'apparition de la lettre x
- F2[x][y] contient la fréquence d'apparition de la succession de lettres xy
- F3[x][y][z], vous devinez ce qu'il y a dedans...
Étant donnés ces paramètres, on cherche la disposition qui minimise la pénalité totale du corpus. Pour ca on va dire que f est une permutation des nombres 1,2,...,35 qui place chaque caractère quelque part sur le clavier. On cherche la permutation f telle que
SUM_x F1[f(x)] * V1[x] + SUM_x,y F2[f(x)][f(y)] * V2[x][y] + SUM_x,y,z F3[f(x)][f(y)][f(z)] * V3[x][y][z]
soit minimal. Pour résoudre ce problème d'optimisation on passe par l'algorithme évolutif proposé sur la page du MTGAP:
- on part de 10 dispositions aléatoires
- sur chacune de ces dispositions on échange la position de 2 lettres tirées au hasard: ca fait 20 dispositions en tout
- on évalue les 20 dispositions et on retire les 10 qui ont le score le plus élevé et on garde en mémoire celle qui a le score le plus bas
- on répète jusqu'à ce qu'une disposition attent le score le plus bas pendant 10 rounds consécutifs.
Voilà. C'est tout. On pourrait compliquer le modèle en tenant compte de la place des modificateurs et en cherchant éventuellement à optimiser la couche altgr en même temps mais dans un premier temps on ne doit pas se compliquer la vie inutilement. On a un modèle et un algo qui trouve la disposition optimale suivant les paramètres V1, V2, V3, F1, F2, F3 qu'on lui donne. Si la disposition qu'il nous en ressort est pourrie, ca veut dire que les paramètres qu'on lui a donnés ne sont pas réalistes. Toute la partie délicate sera de faire de l'essai-erreur pour trouver des valeurs aussi réalistes que possibles. Notons également qu'on devra choisir quels caractères on place dans les 35. Comme premier choix je prendrais les 35 les plus fréquents du corpus.
Pour se simplifier la vie, je propose qu'on se restreigne à 5 scores différents pour les di/trigrammes: MAUVAIS, mauvais, neutre, bon, BON. Neutre a une pénalité de 0, les autres seront à fixer. Comme il y a 35^2 digrammes et 35^3 trigrammes je propose qu'on n'associe une pénalité qu'aux di/trigrammes bons/mauvais qui nous viennent en tête et que tous les autres soient mis à 0.
Vous en pensez quoi? Vous avez des trucs à reprocher/ajouter?