Robipo a écritPour que le croisement d'une disposition entière soit intéressant il faudrait que ça ait du sens de mélanger deux bonnes dispositions pour en générer une troisième intéressante. Or, si on prend deux bonnes dispositions (disons le bépo et le bvofrak), déjà je vois pas trop comment on pourrait faire (pour chaque touche on prend aléatoirement du bépo ou du bvofrak ? -> ça va générer plein de doublons, des touches manquantes, ...), bref du gros n'importe-quoi.
On peut lancer l’algorithme génétique pour une seule partie du clavier, et là tu peux inverser les lettres comme tu veux. Et évidemment il faudra essayer plusieurs partitions en deux parties des caractères que l’on veut placer en accès direct sur le clavier. On peut d’abord tester si la partition est équilibrée entre les deux mains pour élaguer.
Robipo a écritJe pense qu'il faut partir d'une approche construction/génération comme on le ferait nous à la main, c'est-à-dire on commence par placer les touches les plus fréquentes aux meilleurs emplacements (genre espace sur la barre, E sur l'index droit ou l'index gauche). Évidemment, il n'y a jamais de « bonne réponse », par exemple l'algo doit mettre le E sur la gauche ou la droite ? On a pas de réponse donc on peut créer deux branches de possibilités, etc etc. Le hic c'est que ça risque de créer des branches de façon exponentielle, pour parer ce problème, il faudrait calculer des stats pour des « embryons » de dispositions et ainsi pouvoir élaguer assez rapidement les débuts de branches non intéressants.
On peut tester digrammes (roulements + alternance) sur la rangée de repos. En ayant un nombre de rangées de repos efficaces déjà calculées, on réduit le nombre de partitions des caractères à placer possible. Eh ouais, j’avais déjà réfléchi à cette idée. Après on peut appliquer le principe plus loin que la rangée de repos, mais faut voir.
«blablabla optimisation linéaire» → je vois pas d’où on aurait une fonction en fait.
blen a écritVu que c'est un algo qu'on ne va faire tourner que quelques fois, pas besoin qu'il soit super-optimisé. D'ailleurs vous pensez vraiment que ça va être si long à faire tourner, assez pour que ça vaille le coup d'utiliser BOINC ?
D'ailleurs je me disais qu'utiliser un langage rapide à coder, comprendre, et modifier serait plus adapté. Comme Python par exemple, ce qui permet de profiter des nombreuses librairies avancées. C'est pas pour rien que les scientifiques utilisent principalement ce genre de langage, et ce qu'on veut faire est typiquement un algo scientifique.
Je serais plutôt d’accord, mais là non. Faudrait voir si on arrive à élaguer assez, et un langage rapide, ça permet de faire un test sur un plus gros corpus et/ou sur plus de dispositions. Si on ne prend en compte que 30 caractères à placer (pour simplifier, 15 de chaque côté), ça fait 30! soit 2,952328e38 dispositions. Donc (2 et 30 zéros derrières) dispositions de clavier possibles. Ce qui est ÉNORME (là je devrais mettre ça en gras italique souligné police 96 rouge clignotant qui s’imprime sur toutes les imprimantes de chez toi en même temps), ça mettrais juste des années à les générer et surtout à les tester sur des corpus.
Maintenant imaginons qu’on veuille réduire ce nombre. Si on applique ce que j’ai dit plus haut, et qu’on a, prenons un nombre fantaisiste, 20 rangées de repos quasi-optimales, on a un groupe de 22 lettres à partitionner. Ensuite pour une partie de clavier, on choisit une rangée de repos + une partition du groupe de 22 lettres: 2 × 11! / (11! × 11!) = 2 × 11! = 79833600. Déjà beaucoup moins, mais si on doit passer le corpus sur 80 millions de dispos sur un ordinateur, on est pas rendu.
Après faudra qu’on étudie d’autres techniques et qu’on affine les existantes pour réduire le nombre de dispositions potentiellement potables et faire tout ce merdier en parallèle. Après si on arrive à un nombre raisonnable, on peut toutes les tester en faisant tourner le truc H24 sur plusieurs ordinateurs, mais bon ça serait mieux d’avoir un truc qui ne soit pas trop long, parce que si à chaque fois qu’on fait une modif ça prend 48H, on est pas rendu. :p