CCM をつかって魔方陣をもとめる方法

はじめに

CCM では問題をとくのにプロダクション規則と局所評価関数とをつかいます. 魔方陣をもとめるには,1 個のプロダクション規則と 1 個の局所評価関数と をつかいます.

基本のプロダクション規則

2 欄交換規則

プロダクション規則は,データにそれを適用することによって,データの 状態を変化させるものです. アプレットのページでつかわれている 規則のなかでもっとも単純なのは ``Swapping rule'' です. これは 2 個の欄 (ます) がふくむ整数を交換 (swap) する規則です. 右のアプレットについているボタンをおして,「交換」の意味を 確認してください. (右のアプレットの原始プログラム)

CCM においては,このような単純な操作 をことなるますの対に対してくりかえすことによって,解をもとめます. ますの対はランダムに (乱数をつかって) 選択しますが,選択された ますに対して実際に規則を適用するかどうかは,後述の局所評価関数を つかってきめます.その方法についても後述します.

3 欄ローテーション規則

``Rotation rule'' は 3 個の欄がふくむ整数をローテーションする規則です. 3 個の欄をランダムにえらんでローテーションをくりかえす点では 2 欄交換 規則のばあいと同様です.右のアプレットについているボタンをおして, 「ローテーション」の意味を確認してください. (右のアプレットの原始プログラム)

局所評価関数

局所評価関数はそれぞれの欄について定義されます.欄 x の局所評価関数 o(x) の値は,x をつかって計算される行,列または 対角線の和と目標値との差の 2 乗の和の符合を反転させたものと定義します. たとえば,3 次の魔方陣の中央の欄 x5 についていえば, この欄はそれをふくむ行,列および 2 つの対角線と いう 4 つの和をもとめるときにつかわれます.和の目標値は 15 なので, それぞれの和を s51, s52, s53, s54 とすると,局所評価関数は つぎのように定義されます.

o(x5) = - (s51 - 15)2 - (s52 - 15)2 - (s53 - 15)2 - (s54 - 15)2.

この関数は 4 つの和 s51, s52, s53, s54 のすべてが目標値 15 に なったときに最大値 0 をとります. (N クイーン問題, ソート彩色問題 などに おいては局所評価関数は 0 から 1 のあいだのあたいをとるのに対して, このプログラムにおいてはそれとはことなるあたいをとることに注意して ください.)

このような局所評価関数のあたいをより高速に計算できるように, アプレットのページにしめした プログラムに おいては,右図のようなデータ構造をつかっています.すなわち,行,列, 対角線の和をあらかじめ計算しておいて,ある欄の整数を反応規則によって 他と交換したときには,その反応規則のなかでその欄に関係する和をすべて 修正するようにしています.

規則の適用法

プログラムの実行においては,適用候補の欄をランダムに選択します. 選択した欄の組に実際に規則を適用するかどうかは,それらの 局所評価関数をつかってきめます.選択されたすべての欄の 局所評価関数の和をもとめて,それが規則の適用によって増加するときには 規則を適用し,減少するときには規則を適用しません (和が変化しないときにはどちらにするか,あらかじめきめておく). つまり,規則の適用が局所的に方陣の状態を改善するときにはそれを適用し, 改悪するときには適用しないということです.ただし,もちろん局所的に改善 されても全体としては改悪されることもありますし,その逆のこともあります.


[アプレットのページにもどる][例題ホームページにもどる]
著作 (C) 1996, 1999  金田 泰
コメントは yasusi @ kanadas.com におくってください.
作成: 1996-9-23, 改訂: 2003-10-19.