NQueens問題

初版:2011.07.31
update:2012.02.03.23

NQueens問題は、古典的に有名なパズルですので、パズルの説明等は割愛します。(パズルなどを知りたい方は [4] 参考情報をどうぞ)

以下では、NQueens問題のSolverであるQJHについて情報を公開します。QJHの開発は、2009年暮から2010年5月(偶数版)、〜2010年7月(奇数版)に行いました。

QJHは既存のSolverに較べ約10倍の高速化を実現しました。

QJHの基本構想は、”部分解から全体解を構成するというアプローチ”(部分解合成法:Parts Assembly Approach)です。

QJH は、1/4部分解から全体解を合成する方式を採用しました。1/4部分解を求めることは、全体解に比べて遥かに簡単(高速)です。それを合成する基本論理 も単純です。しかし、高速に合成していく過程はちょっと複雑です。パソコンの基本アーキテクチャの基礎知識が必要となります。ソースプログラムはちょっと 複雑で難しいので、第26回ゲーム情報学研究会(2011.07.01 sig-GI-26)で発表した資料とあわせてご覧いただければと思います。

NQueens 問題の解法は、JeffSomers氏の提案されたビット演算法が主流です。QJHのようなアプローチは見かけません。まだまだ、改善の余地があるでしょ う。お気づきの点等がございましたら、掲示板または、deepgreen宛てのメールでご連絡いただければ幸いです。


なお、GPUを使ったSomers版高速Solverはこちらです。(2012.03.23)




[1] QJHの性能
    【測定環境】
    使用PC  : FMV-BIBLO NBF/B50
    CPU       : Intel Core2 DUO processor T8100 2.1GHz
    キャッシュ:3MB
    メモリ      :4GB
    OS        :Windows Vista

  【実測結果】 
N 解の数 QJH takaken版 電通大(qn24b)版
unique解 全数解 探索時間(s) 相対比 探索時間(s) 相対比 探索時間(s) 相対比
4 1          
5 2 10           
6 1          
7 6 40           
8 12 92           
9 46 352           
10 92  724           
11 341  2,680           
12 1,787  14,200           
13 9,233  73,712  0.03    0.02    0.05   
14 45,752  365,596  0.05    0.11    0.22   
15 285,053  2,279,184  0.31    0.70    1.31   
16 1,846,955  14,772,512  0.78  1.00  4.68  6.00 8.25  10.58
17 11,977,939  95,815,104  7.41  1.00  31.97  4.31 1:01.17  8.25
18 83,263,591  666,090,624  25.37  1.00  3:48.23  9.00 7:00.72  16.59
19 621,012,754  4,968,057,848       3:17.59  1.00  29:22.07  8.92 57:16.60  17.39
20 4,878,666,808  39,029,188,884    24:07.04  1.00  3:54:10.34  9.71 7:19:24.77  18.22
21 39,333,324,973  314,666,222,712    3:05:28.23  1.00  1 09:17:19.48  10.77    
22 336,376,244,042  2,691,008,701,644  1 03:08:20.47           
  
   takaken版・電通大(qn24b)版の詳細は、[4]参考情報を参照してください。

[2] QJHの論理構造
   QJHの処理概要について、第26回ゲーム情報学研究会(2011.07.01 sig-GI-26)で発表しました。その時の資料を公開します。

      論文:sig-GI26-11.pdf (約0.6MB)
      OHP:sig-GI-26-11-OHP.pdf (約0.8MB)

[3] QJHソースコード

     開発環境は、Visual C++ 2008 Express Editionです。
   コンパイル時、最適化オプションに関数のinline展開=yesを指定してください
   結果は、バッチコンソールにも出力されますが、詳細ログ(log.txt)がカレントディレクトリに作成されます

  【QJH-even版】
     source : nqueen_dg_QJH_even.cpp
     header : nqueen_dg_QJH_Inc_even.h

  【QJH-odd版】
     source : nqueen_dg_QJH_odd.cpp
     header : nqueen_dg_QJH_Inc_odd.h

[4] 参考情報
  a)  Eight queens puzzle , http://en.wikipedia.org/wiki/Eight_Queens_puzzle
  b) takaken版Solver    NQueen問題(解の個数を求める), http://www.ic-net.or.jp/home/takaken/nt/queen/index.html
  c) qn24b 電通大Solver N-queens Homepage in Japanese , http://www.arch.cs.titech.ac.jp/~kise/nq/index.htm


Home