요 며칠 알고리즘을 테스트해 보았습니다. 제가 얻은 결론은 다음과 같습니다.
- Simulated annealing은 무난하지만 너무 오래 걸린다.
- Controlled random search는 빠르게 대강 global minimum 근처로 갈 수 있지만, 공간이 연속적이지 않아 최적 배열을 찾지는 못한다.
- 국소 최소값을 찾는 데는 자리바꿈을 하며 greedy algorithm을 사용하는 것으로 충분하다.
- 자판 배열 공간에서 피로도는 국소 최소값이 많은 ill-shaped function은 아닌 것 같다.
따라서, controlled random search(정확히는 controlled random search 2 with local mutation)로 대강의 위치를 잡고 국소 최적화 알고리즘을 통해 최소값을 찾는 것이 무난하다고 생각했습니다.
기계적으로 생성한 배치를 재미삼아 몇 개 올려 봅니다. 알고리즘 문제상 이 배치들이 피로도가 최소인 배열이라는 보장까지는 못 하겠습니다.
최적화한 두벌식입니다. 세벌식 391보다 편하다는데, 믿거나 말거나...
신세벌식도 최적화해 봤습니다. 느낌상으로는 좀더 개선할 여지는 있어 보입니다만...
기존 세벌식에서 모음이 위쪽 숫자열로 파고든 게 마음에 걸리고 해서 만들어 본 형태입니다.
양손 부담이 균형잡히지 않아서 왼손 부담을 오른쪽으로 좀 옮겨 볼까 해서 만들어 봤습니다만 망한 배치 같아요 이건. 최적화도 제대로 안 된 거 같습니다.
첫댓글 http://pat.im/848
이 주소 글에서 제가 만들어 본 그림 7의 설계안과 위의 첫째 배열이 닿소리 조합에서 놀라울 만큼 닮았네요..
제 설계안은 알고리즘을 돌린 게 아니라 닿소리의 이음 잦기를 살펴서 박영효·송계범 자판의 논리대로 배치한 것입니다.
(말뭉치 차이 때문에 조금 다른 배치가 나왔을지도 모르겠네요.)
아직 소인배님의 분석 프로그램을 잘 살펴 보지 못했고 알고리즘을 이해하지 못하지만, 알고리즘의 정확도는 믿음이 갑니다.
결과물의 실용성은 별개 문제더라도 말이지요.