結果、以下の配列が得られた (★は前置シフト)。
アンシフト | |||||||||||
け | に | と | こ | さ | れ | っ | い | の | る | ま | |
し | た | ★ | か | て | く | ん | ★ | ゛ | な | ー | |
ら | す | よ | は | ょ | き | う | 、 | 。 | ゜ | ・ | |
シフト(★の後) | |||||||||||
ぁ | ゃ | ろ | ほ | ゆ | わ | む | や | え | ぇ | 「 | |
ぃ | お | も | あ | ゅ | め | り | つ | ち | せ | 」 | |
ぅ | ね | そ | へ | ふ | ぬ | み | ひ | を | ぉ |
この文章でのキー位置の表記について注意
普通、キーの位置をあらわすためには QWERTY 配列でその位置にある英字を使う (例: 下段左端のキーを Z と書く)。 しかし、この文書では Dvorak 配列で位置を表している。 これは以下の理由による。
一般的な QWERTY キーボード使用者には読みづらい文書になるが、ご容赦いただきたい。
以下のような特徴をもつ、新しい中指シフト配列を作成する。
現在、中指シフト配列の主流は「月配列2-263」であろう。 月配列は十分に優れた配列だが、ですます調の文・くだけた文を入力するとき、難しい運指が出現しやすい。 これは月配列の元になった新JIS配列が、高校教科書・科学/情報論文・朝日新聞の天声人語などを基礎資料としたからだろう。
新JIS設計当時に比べ、多くの人がPCを使うようになった。 教科書・論文・新聞記事を書く人の割合が相対的に減り、メール・チャット・ブログなど、くだけた文を書く人の割合が増えていると考えられる。以下に例を挙げる。
教科書・論文・新聞記事など | メール・チャット・ブログなど |
なのではありませんか | なんじゃないですか |
私だけではないが | 俺だけじゃないけど |
仕方あるまい | しょうがない |
慎重な議論が求められる | ヤダヤダ!そんなのヤダ!(ジタバタ) |
ここで作る配列は、口語的な、くだけた文の入力に最適化する。肘を軽く開き、脱力して前腕・手首を接地した姿勢を想定する。エルゴノミックではない普通の安価なキーボードを使う。つまり端的に言えば、以下のようになる。
以下の手順で配列を設計した。
' | , | . | P | Y | F | G | C | R | L | / | |
A | O | E | U | I | D | H | T | N | S | - | |
; | Q | J | K | X | B | M | W | V | Z | \ |
。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚
アンシフト | |||||||||||||
★ | ★ | ゛ | ー | ★(シフト) ゛(濁点) ー(長音記号) | |||||||||
、 | 。 | ゜ | ・ | 、(読点) 。(句点) ゜(半濁点) ・(中黒) | |||||||||
シフト | |||||||||||||
ぁ | ぇ | 「 | ぁぇ(小) 「(左カギ括弧) | ||||||||||
ぃ | 」 | ぃ(小) 」(右カギ括弧) | |||||||||||
ぅ | ぉ | ○ | ぅぉ(小) ○(文字なし) |
範囲内のキー 2つのすべての組について、打鍵時間を測定した。
測定結果は KeyTime.txt のとおり。書式は、
ab 15 1555 ~~ ~~ ~~~~ 打 測 合 鍵 定 計 回 時 数 間[msec]
使用キーボード
被験者
以下の 33 キー(Dvorak配列)について、任意の 2つの組み合わせを打鍵する時間を測定した。33*33=1089組ある。
' | , | . | P | Y | F | G | C | R | L | / | |
A | O | E | U | I | D | H | T | N | S | - | |
; | Q | J | K | X | B | M | W | V | Z | \ |
KeyTime.exe を使って、以下のように測定した。
なお、被験者は以下の点に気をつけて打鍵した。
KeyTime.txt から (平均打鍵時間) = (合計時間) / (測定回数) を求めると、以下のようになった。
第2キー | ||||||||||||||||||||||||||||||||||
' | , | - | . | / | ; | \ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | ||
第1キー | ' | 153 | 134 | 82 | 103 | 74 | 297 | 99 | 221 | 101 | 86 | 98 | 173 | 87 | 114 | 94 | 135 | 213 | 178 | 76 | 108 | 88 | 220 | 119 | 253 | 83 | 85 | 98 | 133 | 97 | 106 | 160 | 158 | 101 |
, | 126 | 161 | 77 | 104 | 91 | 235 | 90 | 138 | 117 | 91 | 95 | 172 | 124 | 115 | 109 | 147 | 237 | 170 | 96 | 114 | 99 | 210 | 135 | 293 | 86 | 91 | 97 | 135 | 108 | 120 | 193 | 136 | 110 | |
- | 143 | 141 | 161 | 117 | 189 | 135 | 245 | 142 | 139 | 118 | 148 | 135 | 216 | 153 | 128 | 123 | 117 | 160 | 204 | 135 | 130 | 127 | 138 | 137 | 137 | 208 | 121 | 108 | 177 | 142 | 119 | 130 | 250 | |
. | 123 | 113 | 83 | 166 | 70 | 216 | 98 | 160 | 109 | 106 | 114 | 211 | 117 | 111 | 112 | 156 | 232 | 195 | 73 | 98 | 98 | 184 | 138 | 271 | 125 | 91 | 105 | 123 | 114 | 114 | 195 | 165 | 113 | |
/ | 134 | 136 | 245 | 123 | 169 | 171 | 284 | 151 | 144 | 124 | 138 | 127 | 150 | 132 | 137 | 122 | 146 | 144 | 208 | 168 | 204 | 140 | 125 | 127 | 117 | 231 | 163 | 125 | 240 | 231 | 117 | 111 | 260 | |
; | 304 | 259 | 77 | 232 | 58 | 174 | 78 | 251 | 107 | 83 | 98 | 139 | 94 | 102 | 106 | 150 | 128 | 158 | 83 | 92 | 85 | 188 | 205 | 172 | 83 | 75 | 84 | 139 | 112 | 111 | 147 | 191 | 83 | |
\ | 126 | 127 | 259 | 125 | 276 | 141 | 186 | 134 | 166 | 227 | 196 | 134 | 287 | 247 | 181 | 133 | 134 | 127 | 315 | 161 | 186 | 149 | 130 | 134 | 227 | 219 | 163 | 116 | 197 | 175 | 148 | 136 | 233 | |
A | 245 | 196 | 69 | 114 | 53 | 206 | 94 | 158 | 104 | 92 | 104 | 107 | 93 | 90 | 83 | 102 | 171 | 128 | 72 | 95 | 73 | 119 | 133 | 216 | 66 | 80 | 96 | 102 | 75 | 84 | 145 | 121 | 86 | |
B | 112 | 108 | 129 | 108 | 134 | 134 | 142 | 107 | 177 | 126 | 203 | 105 | 266 | 243 | 194 | 96 | 116 | 95 | 100 | 218 | 121 | 111 | 125 | 132 | 119 | 85 | 107 | 83 | 153 | 176 | 122 | 110 | 121 | |
C | 105 | 106 | 147 | 116 | 120 | 120 | 245 | 130 | 145 | 158 | 105 | 109 | 131 | 110 | 85 | 96 | 112 | 117 | 109 | 138 | 117 | 107 | 103 | 138 | 101 | 127 | 197 | 95 | 217 | 244 | 110 | 116 | 195 | |
D | 105 | 116 | 104 | 101 | 116 | 115 | 204 | 96 | 196 | 93 | 172 | 105 | 202 | 206 | 191 | 113 | 107 | 108 | 95 | 222 | 114 | 110 | 103 | 115 | 111 | 96 | 131 | 80 | 175 | 225 | 88 | 105 | 160 | |
E | 155 | 197 | 77 | 187 | 80 | 171 | 94 | 107 | 112 | 107 | 104 | 168 | 95 | 110 | 97 | 126 | 233 | 128 | 77 | 105 | 91 | 110 | 171 | 167 | 84 | 68 | 98 | 97 | 94 | 84 | 175 | 180 | 103 | |
F | 106 | 97 | 205 | 134 | 116 | 111 | 261 | 129 | 238 | 138 | 208 | 112 | 181 | 206 | 228 | 113 | 128 | 132 | 112 | 266 | 172 | 124 | 108 | 115 | 139 | 154 | 230 | 99 | 289 | 291 | 107 | 158 | 243 | |
G | 101 | 103 | 145 | 94 | 109 | 120 | 266 | 101 | 231 | 103 | 182 | 98 | 205 | 171 | 192 | 87 | 128 | 96 | 97 | 234 | 115 | 105 | 108 | 141 | 95 | 115 | 194 | 89 | 247 | 255 | 118 | 119 | 222 | |
H | 115 | 124 | 111 | 94 | 74 | 121 | 157 | 89 | 192 | 84 | 193 | 100 | 217 | 195 | 183 | 96 | 115 | 103 | 86 | 202 | 96 | 105 | 91 | 113 | 94 | 93 | 90 | 90 | 160 | 198 | 108 | 102 | 128 | |
I | 151 | 182 | 86 | 189 | 78 | 162 | 101 | 135 | 112 | 116 | 98 | 148 | 99 | 129 | 111 | 169 | 216 | 226 | 82 | 100 | 85 | 171 | 227 | 214 | 99 | 93 | 109 | 213 | 101 | 120 | 222 | 222 | 97 | |
J | 220 | 221 | 82 | 262 | 79 | 155 | 99 | 145 | 113 | 95 | 124 | 219 | 129 | 136 | 93 | 169 | 170 | 107 | 74 | 113 | 96 | 202 | 202 | 143 | 97 | 92 | 86 | 166 | 101 | 131 | 175 | 215 | 109 | |
K | 202 | 229 | 85 | 218 | 86 | 156 | 106 | 135 | 128 | 110 | 121 | 169 | 128 | 117 | 114 | 224 | 114 | 167 | 90 | 101 | 93 | 186 | 241 | 150 | 87 | 88 | 98 | 236 | 94 | 113 | 207 | 273 | 85 | |
L | 127 | 128 | 236 | 110 | 201 | 131 | 300 | 125 | 147 | 87 | 113 | 112 | 124 | 104 | 117 | 101 | 125 | 122 | 158 | 142 | 190 | 121 | 128 | 139 | 128 | 213 | 131 | 100 | 269 | 230 | 128 | 103 | 252 | |
M | 129 | 99 | 98 | 97 | 127 | 108 | 135 | 100 | 185 | 109 | 209 | 96 | 255 | 217 | 195 | 95 | 118 | 92 | 113 | 181 | 100 | 108 | 109 | 110 | 113 | 90 | 82 | 92 | 100 | 152 | 100 | 101 | 118 | |
N | 114 | 123 | 202 | 117 | 190 | 133 | 190 | 94 | 123 | 75 | 114 | 102 | 184 | 141 | 91 | 102 | 101 | 108 | 160 | 106 | 200 | 103 | 100 | 123 | 208 | 110 | 90 | 103 | 204 | 138 | 91 | 101 | 172 | |
O | 152 | 206 | 77 | 164 | 82 | 186 | 94 | 113 | 100 | 110 | 93 | 102 | 84 | 97 | 89 | 141 | 191 | 140 | 84 | 97 | 70 | 167 | 110 | 196 | 81 | 65 | 87 | 76 | 105 | 104 | 173 | 150 | 100 | |
P | 130 | 154 | 83 | 115 | 75 | 195 | 99 | 127 | 116 | 109 | 117 | 191 | 111 | 117 | 100 | 242 | 254 | 253 | 71 | 116 | 95 | 156 | 168 | 242 | 82 | 90 | 100 | 213 | 114 | 109 | 240 | 176 | 95 | |
Q | 237 | 263 | 76 | 235 | 82 | 137 | 71 | 157 | 113 | 97 | 98 | 188 | 108 | 113 | 100 | 143 | 141 | 120 | 74 | 91 | 67 | 242 | 230 | 161 | 88 | 75 | 94 | 149 | 87 | 88 | 176 | 243 | 98 | |
R | 113 | 118 | 189 | 86 | 160 | 136 | 246 | 117 | 150 | 88 | 119 | 107 | 132 | 105 | 94 | 108 | 123 | 116 | 91 | 143 | 202 | 110 | 122 | 121 | 164 | 128 | 104 | 92 | 249 | 192 | 106 | 113 | 230 | |
S | 140 | 124 | 208 | 113 | 212 | 137 | 232 | 132 | 142 | 91 | 111 | 96 | 154 | 114 | 89 | 108 | 128 | 130 | 220 | 122 | 102 | 127 | 132 | 146 | 112 | 176 | 95 | 113 | 167 | 147 | 137 | 121 | 208 | |
T | 115 | 122 | 142 | 116 | 133 | 114 | 174 | 108 | 130 | 174 | 138 | 85 | 217 | 164 | 92 | 94 | 110 | 111 | 94 | 115 | 92 | 107 | 98 | 126 | 95 | 90 | 178 | 92 | 149 | 200 | 95 | 109 | 124 | |
U | 149 | 141 | 78 | 123 | 98 | 151 | 117 | 118 | 117 | 109 | 123 | 115 | 123 | 123 | 104 | 197 | 204 | 239 | 84 | 104 | 95 | 121 | 230 | 196 | 97 | 75 | 98 | 162 | 119 | 111 | 215 | 209 | 125 | |
V | 131 | 134 | 142 | 122 | 227 | 112 | 182 | 113 | 161 | 167 | 189 | 106 | 218 | 224 | 153 | 98 | 116 | 111 | 245 | 112 | 205 | 116 | 128 | 145 | 253 | 190 | 100 | 114 | 189 | 126 | 102 | 112 | 164 | |
W | 163 | 120 | 145 | 112 | 217 | 104 | 157 | 110 | 178 | 253 | 216 | 95 | 278 | 259 | 181 | 126 | 123 | 124 | 219 | 124 | 97 | 105 | 117 | 132 | 211 | 136 | 201 | 109 | 125 | 175 | 115 | 126 | 138 | |
X | 245 | 224 | 78 | 222 | 78 | 207 | 92 | 155 | 133 | 99 | 114 | 202 | 154 | 118 | 144 | 217 | 211 | 240 | 71 | 100 | 83 | 196 | 290 | 201 | 104 | 78 | 108 | 219 | 94 | 128 | 163 | 276 | 97 | |
Y | 167 | 217 | 105 | 171 | 98 | 188 | 100 | 149 | 131 | 108 | 125 | 189 | 115 | 129 | 125 | 241 | 253 | 252 | 90 | 121 | 112 | 180 | 209 | 258 | 114 | 80 | 112 | 224 | 103 | 127 | 240 | 175 | 113 | |
Z | 151 | 113 | 272 | 147 | 272 | 147 | 237 | 135 | 172 | 186 | 204 | 126 | 257 | 224 | 126 | 114 | 139 | 127 | 297 | 107 | 162 | 138 | 130 | 141 | 287 | 210 | 132 | 108 | 136 | 145 | 127 | 124 | 174 |
この実験データから、さまざまな運指の時間を計算することができる。
ホームポジションからあるキーまで指を移動させるために必要な時間は、ホームポジションとそのキーの打鍵時間を平均して求まる。
連続した複数の打鍵にかかる時間も求めることができる。例えば以下のよう結果があるとき、
al 3 195 sa 3 390 sl 3 803
それぞれ測定回数が3回だから、平均は al 65msec, sa 130msec, sl 268msec である。 s a l という運指は、s→a が130msec、a→lが65msec だから、s a l は 130+65 = 195msec で打てる…わけではない。実際には s → l という難しい運指がボトルネックとなり、268msecかかってしまう。
まず測定結果はこのようになっているとする。
hs 1 50 ts 1 60 ns 1 70 sh 1 70 ha 1 90 al 1 100 sl 1 300
S H A L の打鍵時間を求めたいとする。 ボトルネックを考慮に入れて、正確な計算をするには、以下のよう考える。(以下は熟練者の指の動きであり、初心者の場合はまた違う計算が必要になるだろう)
' | , | . | P | Y | F | G | C | R | L | / | |
A | O | E | U | I | D | H | T | N | S | - | |
; | Q | J | K | X | B | M | W | V | Z | \ |
このように計算するプログラムを key2time.exe (コンソールアプリ) として作成した。また同等な計算をするクラスを定義し、遺伝的アルゴリズムの評価関数に用いた。
ボトルネックを考慮した計算方法 で記述したように、各キーのホームポジションからの時間を求めた。
この計算方法だと、ホームポジションにあるキーを打つまでの時間が 0 にはならないが、これは「あるキーを押そうと脳が判断してから指がキーを打つまでのタイムラグ」を表すと考えた。 (最初はホームポジションにあるキーを打つ時間を 0 と扱ったが、そうすると「遠いキー1回よりホームのキー2回のほうが速い」ことになり、打鍵数の多い配列が生成されたので)
このように各キー単独での時間を求めると以下のようになった。
' 175 | , 184 | . 146 | P 160 | Y 164 | F 192 | G 152 | C 105 | R 126 | L 139 | / 151 | |
A 112 | O 115 | E 107 | U 91 | I 141 | D 138 | H 90 | T 91 | N 96 | S 97 | - 165 | |
; 178 | Q 193 | J 199 | K 158 | X 176 | B 146 | M 135 | W 170 | V 169 | Z 157 | \ 187 |
また、(反対側の手の) 中指シフトキーを押してからあるキーを押すまでの時間を ボトルネックを考慮した計算方法 の方法で求めると、以下のようになった。
' 205 | , 213 | . 206 | P 189 | Y 199 | F 202 | G 216 | C 213 | R 191 | L 183 | / 187 | |
A 199 | O 197 | E 175 | U 183 | I 185 | D 211 | H 204 | T 204 | N 198 | S 174 | - 184 | |
; 205 | Q 216 | J 200 | K 202 | X 185 | B 219 | M 211 | W 190 | V 201 | Z 210 | \ 201 |
各指の筋力を測定し、これに比例して指の理想使用率を定めた。
まず、料理はかりで各指の押下力を測定した。ただし、使用したのが最大計量2kgのはかりで、指の圧力を一定に保つこともできなかったので、数値の精度はよくない。
測定結果は以下のようになった。
左 | 右 | |||||||||
小 | 薬 | 中 | 人 | 人 | 中 | 薬 | 小 | |||
800 | 1500 | 2300 | 1800 | 1900 | 2400 | 1600 | 900 | 単位:g |
これに比例するように、指の理想使用率を以下のように決定した。(わかりやすいのは百分率(%)だが、配列生成プログラムでは1024分率を用いたので併記してある)
左 | 右 | |||||||||
小 | 薬 | 中 | 人 | 人 | 中 | 薬 | 小 | |||
6 | 11 | 17 | 14 | 14 | 18 | 12 | 7 | 単位:% | ||
62 | 116 | 178 | 140 | 147 | 186 | 124 | 70 | 単位:1024分率 |
遺伝的アルゴリズムによる配列生成では、生成したキー配列の指使用率と、この理想的な指の使用率の差を取り、その差が大きいほど評価関数が悪くなるように設定した。評価関数の定義は後述する。
新配列で入力することを想定するサンプル文を大量に集めた。
文章サンプルとして「2ちゃんねる」を選んだ。 これは以下のような理由による。
2ちゃんねるから、以下のようにサンプルを取得した。
2ちゃんねるの板を上から順に片っ端から見ていき、投稿数が上位6番までのスレをランダムに選び、ひとつの板から一つのスレを取得した (ギコナビのdatファイル)。そのスレの内容をサンプルに追加していった。約70MBのdatファイルを得た時点で、この作業を停止した 。この70MBを「生サンプル」とする。
生サンプルに対して以下の処理を行った。
文章サンプルは約40MBのファイルになった (sample\all2ch_hk.txt)。このファイルは著作権の問題とサイズのため添付していない。
以下の作業を Ngram ディレクトリで行った。
文章サンプルを1文字、2文字、3文字、4文字、5文字、6文字で区切り、文字列の並びの出現頻度の高い順にソートしたデータファイルを作成した。このために ngram.exe を使用した。文章サンプルは半角カナなので、(半)濁点を1文字と数えている。
結果は freq01.txt〜freq06.txt。 書式は「文字列 出現回数」で、出現回数が多い順に並んでいる。
留意点
このままでは (N+1)-gram に含まれる N-gram が重複して数えられている。 このため、これ使って配列を生成すると、長い N-gram に偏重した、短い N-gram の打ちにくい配列ができやすい。 そこで以下のようにして、不完全ではあるが、重複して数えられた N-gram の出現回数を減算した。
もとの4-gram | 5-gramの256位まで | 結果の4-gram | |||
文字列 | 出現回数 | 文字列 | 出現回数 | 文字列 | 出現回数 |
ジブ | 300 | ジブン | 100 | ジブ | 250 |
゙ブン | 200 | ゙ブン | 150 |
分解する文章サンプル ゲンショウ 2-gram 3-gram ゲ ゲン ゙ン ゙ンシ ンシ ンショ ショ ショウ ョウ ンシ に注目すると、3-gram で ンシ を含む要素は ゙ンシ ンショ の2つある。
今後は、以上のように 固定文字・濁点・重複の修正 した N-gram を用いることにする。
打鍵時間・指使用率・N-gramを使って定義した評価関数が最少になるような配列を、遺伝的アルゴリズムで求める。
文字列サンプル は「文字列」と「その文字列の重み」の集合である。文字列サンプルは 重複の修正 を行った N-gram から作る ( mGeneKana.cpp, CMain::InitData() )。その手順は以下のとおり。
具体的には以下のようになる。
以上のように 1-gram 〜 6-gram を読み込むと、4057 個の文字列サンプル要素ができた。
2-gramは2048、3-gramは1024、4-gramは512…という読み込み個数を決めたのは、処理速度の問題である。今回用いたプログラムとPCの性能では、我慢できる時間内に解が求まるには、約4000要素が限度だった。今後PCの処理速度が上がるかプログラムを改良して高速化できれば、今回切り捨ててしまったN-gramも含めた、より多くの文字列サンプルを使ってよりよい配列を作れるだろう。
遺伝的アルゴリズムの評価関数は、以下のように定義した。 結果が小さいほど「よい配列」ということになる。 ( gene.cpp, TGene::GetScore() )
まず文字列サンプルの打鍵時間を求める。
以下のように、指の使用率によるペナルティを求める。 ( gene.cpp, TGene::GetFingeredScore() )
上記の手順で、16倍・ret/1048576 といった定数は恣意的なパラメータである。試行錯誤して、ペナルティがもとの ret の 3.0% 〜 0.1% 程度の値になるように調整した。これらのパラメータを調整すると、もっと指の使用率を厳密に制限する配列や、逆に指の使用率は偏っているが速度は速い配列を作ることもできる。
評価関数は、打鍵時間とペナルティの合計を返す。
つまり、よく出現する文字列が素早く打てない配列や、指の使用率バランスが悪い配列に対して、評価関数は高い値を返す。
乱数による配列の生成。以下のようにして、配列の条件 の 固定文字 を満たすランダムな配列を、256 種類生成した。
まず SWAP関数 (2つの文字の交換) を定義する。
SWAP(位置 a, 位置 b) { a または b にある文字が固定文字であれば、何もしない。 そうでなければ、a, b の位置にある文字を入れ替える。 }
SWAP 関数を使って、以下のようにしてランダムな配列を生成した。o
256 種類の配列すべてについて、以下の手順で SWAP を繰り返すことで改良する。
評価の悪いキー配列を死滅させる。
256 種類の配列に対して、以下の処理を行う。
死滅した個体のメモリをクリアして、次の 4. 交配フェーズ へ進む。
3. 淘汰フェーズ で空いたメモリを使って、新しい配列を作る。新しい配列は、既存の配列のうち評価関数値の低いものの特徴を継承するように、以下の手順で作る。
親を乱数で2つ選ぶ。以下の関数を使って、順位が上 (評価関数値が低い) の配列は選ばれやすく、順位が下 (評価関数値が高い) 配列は選ばれにくくする。
/// 0 〜 n-1 の乱数を発生。 /// 確率は 0 が最高、n-1 が最低で、その間では確率は線形に減少する。 TriangleRand( n ) { int a = random(n) + random(n); if (a>=n-1) a-=n-1; else a=n-2-a; return a; }
この関数の戻り値とその確率は以下のようになる。1位は1.556%、2位は1.544%の確率で親として選ばれることになる。
戻り値 | 確率 | TriangleRand(128)での確率 [%] |
0 | (2*n - 1) / (n^2) | 1.556 |
1 | (2*n - 3) / (n^2) | 1.544 |
2 | (2*n - 5) / (n^2) | 1.532 |
: | : | : |
n-2 | 3 / (n^2) | 0.018 |
n-1 | 1 / (n^2) | 0.006 |
2つの親 (G1, G2) をもとに、新しい配列を作る。これは以下のようにする。
今回用いたプログラムでは、全く同じ配列が作られたときのみ突然変異させた。
SWAPによる改良が完全に終わっているとき、1回のSWAPでは評価関数値が上がる (悪くなる) 方向にしか進まないので無駄である。そこで突然変異は以下の手順で行う。
十分によい配列が得られるまで、 2. 改良フェーズ へ戻って繰り返す。
終了条件は、「10 世代の間、最良の配列がよりよい配列に取って代わられていないとき」とした。終了条件が満たされると、プログラムは現在の状態をファイルに保存し、乱数を初期化しなおして、また 1. 発生フェーズ から繰り返す。
結果、以下の配列が得られた (★は前置シフト)。
アンシフト | |||||||||||
け | に | と | こ | さ | れ | っ | い | の | る | ま | |
し | た | ★ | か | て | く | ん | ★ | ゛ | な | ー | |
ら | す | よ | は | ょ | き | う | 、 | 。 | ゜ | ・ | |
シフト(★の後) | |||||||||||
ぁ | ゃ | ろ | ほ | ゆ | わ | む | や | え | ぇ | 「 | |
ぃ | お | も | あ | ゅ | め | り | つ | ち | せ | 」 | |
ぅ | ね | そ | へ | ふ | ぬ | み | ひ | を | ぉ |
評価関数の値は 18595837407 だった。2位の配列の評価値は 18596165298 だから、0.002% のオーダーまで最適化されている (少なくともこのアルゴリズムでは)。
GeneKana.exe で Import (Ctrl+I) を押し、配列ファイルと文章ファイルを選び、配列を評価した。また比較対象として月配列2-263についても同様の評価をした。
月配列2-263
アンシフト | |||||||||||
そ | こ | し | て | ょ | つ | ん | い | の | り | ち | |
は | か | ★ | と | た | く | う | ★ | ゛ | き | れ | |
す | け | に | な | さ | っ | る | 、 | 。 | ゜ | ・ | |
シフト(★の後) | |||||||||||
ぁ | ひ | ほ | ふ | め | ぬ | え | み | や | ぇ | 「 | |
ぃ | を | ら | あ | よ | ま | お | も | わ | ゆ | 」 | |
ぅ | へ | せ | ゅ | ゃ | む | ろ | ね | ー | ぉ |
Import 機能は、指定された配列ファイルを使って、文章ファイル (半角カナのみ) を打鍵 (英字文字列) に変換し、打鍵の情報を得るものである。
打鍵数 | 打鍵 (英字文字列) の数。中指シフトも1打鍵と数える。 |
time | ボトルネックを考慮した計算方法 で算出した総打鍵時間 [msec] |
左, 人, 中, 薬, 小 | それぞれ 左手全体、左人差し指、左中指、左薬指、左小指の使用率 [%] |
右, 人, 中, 薬, 小 | それぞれ 右手全体、右人差し指、右中指、右薬指、右小指の使用率 [%] |
上段, 中段, 下段 | それぞれ 「',.PYFGCRL/」 「AOEUIDHTNS-」 「;QJKXBMWVZ\」 の使用率 [%] 下段の括弧内の数字は良下段の割合。 |
交互 | 交互打鍵の割合 (TA PB など) [%] |
同指 | 同指異鍵の割合 (TC KU など) [%] |
跳躍 | 同手2段跳躍の割合 (QP GV など)。括弧内の数字は良跳躍の割合。[%] |
和音 | アルペジオ打鍵の割合 (TD JK など) [%] |
良下段・良跳躍
下段・2段跳躍は一般に打ちにくいと言われているが、条件によっては打ちやすいこともある。打ちやすい下段を「良下段」、打ちやすい2段跳躍を「良跳躍」と定義する。
ホームポジションからキーへの時間 で、下段だが速いキーを良下段に、また ktDisp.exe で、2段跳躍だが速いキー組を良跳躍と考える。
良跳躍は、長い中指・薬指で上段キーを打ち、肘を軽く開くと人差し指が自然に届く位置の下段キーを打つパターンとする。一般的なキーボードでは、上段は左に、下段は右にずれているため、X は打ちやすいとは言えない。
良下段 | K B M |
良跳躍 | ,K K, .K K. CB BC RB BR CM MC RM MR |
Dvorak配列での良下段・良跳躍を以下に図示する。
' | , | . | P | Y | F | G | C | R | L | / | |
A | O | E | U | I | D | H | T | N | S | - | |
; | Q | J | K | X | B | M | W | V | Z | \ |
資料収集 で得た約40MBの2ちゃんねるログを評価した。
- | 打鍵数 | time | 左 | 人 | 中 | 薬 | 小 | 右 | 人 | 中 | 薬 | 小 | 上段 | 中段 | 下段 | 交互 | 同指 | 跳躍 | 和音 | |||||
○配列 | 46289784 | 5318916816 | 45.8 | 16.7 | 14.4 | 8.4 | 6.3 | 54.2 | 16.2 | 15.9 | 14.2 | 7.9 | 24.3 | 56.6 | 19.1 (7.9) | 68.1 | 4.3 | 3.0 (0.8) | 12.7 | |||||
月配列2-263 | 46497748 | 5527440890 | 47.0 | 17.9 | 16.3 | 8.4 | 4.5 | 53.0 | 16.6 | 16.3 | 14.0 | 6.1 | 28.5 | 53.6 | 17.9 (6.7) | 68.4 | 4.7 | 3.0 (0.8) | 12.0 |
打鍵数は 0.5% 減っている。左人差し指の負担が減っている。下段は増えているが良下段が増えただけである。同指異鍵は減っている。和音は増えている。○配列は月配列2-263に比べてわずかによいといえるだろう。
ですます調の文章の例として選んだ。
- | 打鍵数 | time | 左 | 人 | 中 | 薬 | 小 | 右 | 人 | 中 | 薬 | 小 | 上段 | 中段 | 下段 | 交互 | 同指 | 跳躍 | 和音 | |||||
○配列 | 3705 | 428720 | 47.2 | 15.8 | 16.7 | 8.8 | 5.9 | 52.8 | 13.0 | 17.0 | 14.5 | 8.2 | 24.5 | 54.3 | 21.2 (7.2) | 68.2 | 3.7 | 3.4 (0.9) | 13.2 | |||||
月配列2-263 | 3754 | 451161 | 49.4 | 16.6 | 18.8 | 8.1 | 5.8 | 50.6 | 13.1 | 17.8 | 13.7 | 6.0 | 25.7 | 56.9 | 17.5 (5.6) | 68.3 | 6.1 | 3.1 (0.4) | 11.1 |
打鍵数は 1.3% 減っている。 指の使用率は似ているが、○配列のほうが小指使用率が高い。 下段は、良下段を除いても、やや多い。 同指異鍵はかなり減っている。 跳躍は、良跳躍を除いた数で見れば、少し減っている。 和音は増えている。 この例文では、下段が多いこと以外は、月配列よりも良いだろう。
やや硬い文章の例として選んだ。記事のページ全体をコピペした後、[編集] [バグの報告] などの機能部分を除去したものを使った。
- | 打鍵数 | time | 左 | 人 | 中 | 薬 | 小 | 右 | 人 | 中 | 薬 | 小 | 上段 | 中段 | 下段 | 交互 | 同指 | 跳躍 | 和音 | |||||
○配列 | 1261305 | 145455793 | 45.1 | 17.1 | 14.5 | 7.1 | 6.3 | 54.9 | 17.6 | 16.5 | 13.9 | 6.9 | 23.9 | 55.3 | 20.8 (9.2) | 68.9 | 4.6 | 3.5 (0.9) | 11.0 | |||||
月配列2-263 | 1249115 | 148305733 | 44.8 | 16.5 | 15.7 | 8.5 | 4.2 | 55.2 | 18.0 | 17.6 | 13.1 | 6.5 | 30.7 | 51.8 | 17.5 (5.7) | 67.9 | 4.3 | 3.0 (0.7) | 12.2 |
人差し指の使用率は、○配列も月配列2-263も多いが、月配列2-263は右人差し指の使用率が際だって高く、○配列は両方の人差し指が多い。 段ごとでは、○配列は上段が減り、中段が多く、下段は増えたが良下段が多い。 交互打鍵は増えたが、同指異鍵や跳躍は増え、和音が減っている。 この例では、使用者の嗜好にもよるが、月配列のほうがやや良いだろう。
かなり硬い文章の例として選んだ。
- | 打鍵数 | time | 左 | 人 | 中 | 薬 | 小 | 右 | 人 | 中 | 薬 | 小 | 上段 | 中段 | 下段 | 交互 | 同指 | 跳躍 | 和音 | |||||
○配列 | 1122 | 129794 | 46.6 | 16.9 | 15.2 | 6.9 | 7.7 | 53.4 | 20.4 | 16.1 | 11.6 | 5.3 | 28.0 | 49.4 | 22.6 (8.5) | 71.9 | 4.5 | 3.2 (0.4) | 10.7 | |||||
月配列2-263 | 1111 | 131548 | 45.9 | 12.8 | 16.2 | 12.2 | 4.7 | 54.1 | 18.0 | 21.3 | 10.3 | 4.5 | 33.0 | 48.1 | 18.9 (4.7) | 70.9 | 3.2 | 2.2 (0.2) | 13.5 |
○配列では、右人差し指の負荷が異様に高く左薬指より左小指が多いなど、指使用率が悪い。月配列2-263ではかなり指使用率が理想に近い形である。 段・運指については、Wikipedia秀逸な記事と同様、○配列のほうが悪い。 硬い文章ではやはり、新JISをもとにした月配列2-263が有利だろう。
2ちゃんねる・めくらぶどうと虹といった、口語調・ですます調の文では○配列のほうがよい。Wikipediaや憲法といった、硬い文章では月配列2-263のほうがよい。
メール・チャット・ブログなど口語調のくだけた文に適した配列を作る、という設計目標は達成できたといえる。
しかし○配列は、硬い文章で極端に打ちにくくなる。口語調・ですます調は打ちやすく、かつ硬い「だ・である」調もさほど打ちにくくならない配列を作るために、文章サンプルに硬い文章を加えるべきかもしれない。