ホームページへ戻る  書き込みリストへ戻る
プログラミングパズル雑談コーナー

プログラミングパズルに関心のある人は雑談しましょう!


NQueen問題 - world record 投稿者:deepgreen 投稿日:04月24日(土)23時10分33秒

こんばんは、deepgreenです。

気分転換に、NQueens問題の世界記録を調べてみたら、面白いことがわかりました。


  1. 世界記録は、N=26

        N=24    2004年4月11日    電機通信大学   68CPU x 22日
        
        N=25    2005年6月11日    ProActive      単一CPU換算で50年以上
        
        N=26    2009年7月11日    tu-dresden     FPGA (*1)  x 240日
        
                    *1 : 8*22 2.5 GHz-QuadCore systemsに相当(約176 * 4CPU = 704 CPU)
        

  2.N=26のSolver(TUD版と仮称)
  
      何とtakaken版の対称性チェック処理の考え方が採用されています。
      TUD版は、takaken版の対称性チェック処理のif文をQueenのpre配置により
      不要とすることで、さらに高速化を実現しているようです。
      
  ★★ 高橋謙一郎さんのアルゴリズムが採用されたのは、すばらしい快挙です。
       おめでとうございます。!!!
      
  
  詳細は、下記のURLを参照。
  
      en.wikipedia.org/wiki/Eight_queens_puzzle   ( 全体 )
      (Jeff Somer氏のオリジナル版の約4倍高速(*2)と記述して、高橋謙一郎さんの英語版HPをLink)
      www.research.att.com/~njas/sequences/A000170
      
      queens.inf.tu-dresden.de/                   ( N=26の結果 )
      www.mcsharp.net/nqueens.html                ( Solverの簡単な説明 )
      queens.inf.tu-dresden.de/?l=en&n=r   
        
      proactive.inria.fr/index.php?page=nqueens25  ( N=25の結果 )
      
  
  *2:N=20   Jeff Somerさんの結果 (800 MHz)            20:35:06
               takaken版( Athlon XP 2100+ (1.73GHz)        5:03:35

        --> CPU能力差を無視して、割り算をすると約4倍となる。
            (CPU能力差を考慮すると、やはり2倍程度かな? )


NQueen問題 リコメありがとうございます。 投稿者:tsuyoshik 投稿日:03月05日(金)19時33分32秒


deepgreenさん、リコメントありがとうございます。

コメントのなかで、特に以下の部分、気になりました。
>メモリアクセスそのものもCPUの速度から見れば遅いのでなるべくキャッシュに乗せるような配慮を行う。
ただし、たとえご教示いただいたとしても、今の自分では活用できそうにありません。

とりあえず、一旦撤退させていただきます。

deepgreenさんのご発展お祈り申し上げます。


re:NQueen問題 力不足を痛感いたしました! 投稿者:deepgreen 投稿日:03月03日(水)21時13分25秒

tsuyoshikさん、はじめまして。 deepgreenです。

NQueen問題に挑戦する方がいらっしゃったのは、大変うれしいです。

私も、ビット演算手法はことごとく失敗しました。原因は、探索論理が単純であるが、
絞り込みは強力である点にあると判断しました。論理を追加する場合、かなりの絞り
込みができないと絞り込みのオーバーヘッドの方が大きくなり、逆効果となります。
(ということで、数%の改善で断念しました)

tsuyoshikさんの ”端的な場面は上下半分ずつのDataをとりそれをドッキングする手法”
は、私のHJ版の考え方に似ているかもしれません。

HJ版の基本アルゴリズムは、(N=24を想定した場合)

  1) 部分解(12x24の解)を求めます
  
     この解は約1.5T個ありますので、一度にはメモリに乗せることができませんが、
     takaken版(ビット演算法)を使うと約5Hで求まります。
     
  2) 12x24の解を2つ組み合わせて、24x24の解を生成します。
  
     部分解は、メモリに乗るように、すこしづつ生成して、結合していきます。

     このとき、メモリアクセスそのものもCPUの速度からみれば遅いので
     なるべくキャッシュにのせるような配慮を行います。
     
     また、なるべくunique解のみを生成するような配慮も必要です。

  HJ版の初版(基本バージョン)は、N=18で578秒(takaken版は約4分)と
  大変、遅かったものです。これが、最新版では約60秒になってます。
 それだけ、いろいろな高速化を織り込む必要がありました。
  (できれば、もう少し、改善したいという思いはありますが、...no ideaです)
  
  今、QJ版(4分割の合成)で苦戦しています。
  なんとか基本バージョンは動きましたが、やはり遅いですね。今回は、HJ版の部品・
  アイデアを使っているので、もう少し速くないと。  お先真っ暗です。

tsuyoshikさんも頑張ってください。
  


NQueen問題 力不足を痛感いたしました! 投稿者:tsuyoshik 投稿日:03月02日(火)19時31分02秒


まず、高橋さんの「ビット演算活用のJeff Sommersさんプログラムを再帰様式に書き直したもの」をJavaに移植しました。(全数解明版)
次に、自己版をプログラムするが全て数桁遅い。
続けて、自己版は放棄し、ビット演算手法をベースに何種か手を加えるが効果は全てマイナス。
工夫の主体は、予め複数行の特性をDataにおさめ、それを一つの行として扱う手法、端的な場面は上下半分ずつのDataをとりそれをドッキングする手法です。これは自分のrubikcubeでは相当の威力を発揮したので期待したのですが、効果ありませんでした。要因のひとつは、ビット演算の効率が非常に優れていること、次に、このNQueenの成り立ちが探索が深くなるに従い探索巾が狭くなる構造にあると思いました。

今までは外からでしたが、いちど、同じ土俵に上がり、大学生の問題に小学生が挑むような力不足を痛感しました。わざわざコメントするような内容ではないのですが、反応した者がいることをお知らせする意味で書き込みました。

自分のrubikcubeは3ステップでの解明が終わり一段落いたしました。

http://www.geocities.jp/tsuyoshik1942/rubikcube2.html


NQueen問題-Again (HJ版改) 投稿者:deepgreen 投稿日:01月17日(日)23時18分36秒

高橋謙一郎さん、こんばんは。 deepgreenです。

高橋さんと競いあった昔が懐かしいです。
今回も、誰か一緒に挑戦してくれる人が欲しくて早めにupしました。

DG-HJ版をちょっと改良し、takaken版の約4倍の性能となりました。

DG-HJ版(改)で、ようやくQJ(Quarter Join:4分割解の合成)版の準備ができました。
QJ版は、(HJ版では不十分であった)Join処理の高速化を狙っています。
そうは言っても、どうなることやら ???? 


【実行結果サマリ】

            DG-HJ版(改)           DG-HJ版            takaken版(rerun)     takaken-orginal版
   N= 18      60.045 (0.26)       1:23.88 (0.37)        3:48.23 (1.0)        4:55.50 (1.29)
      19      --                   --                  29:22.07 (1.0)       37:49.96 (1.29)
      20   54:00.057 (0.23)    1:08:56.43 (0.29)     3:54:10.34 (1.0)     5:03:35.16 (1.29)


(追記)
私の方もいろいろありまして、静岡県から生まれ故郷の茨城県に戻ってきました。
その関係で私のHPの契約を解除しました。(2月末以降削除される予定)
この結果は、どこかに残したいと思っていますが、まだ、未定です。


--------------------------------------------------------------------------

【DG-HJ版(改)実行結果】

                 unique          all        ms(1/1000秒) 
               -----------   ------------    ---------
***** N= 4              1              2          0 

***** N= 6              1              4          0 

***** N= 8             12             92          0 

***** N=10             92            724          0 

***** N=12           1787          14200         16 

***** N=14          45752         365596        109 

***** N=16        1846955       14772512       2059 

***** N=18       83263591      666090624      60045 

***** N=20     4878666808    39029188884    3240057   ( 54:00.057)
 


re:NQueen問題-Again (HJ版) 投稿者:高橋謙一郎 投稿日:01月16日(土)20時15分35秒


deepgreenさん、お久しぶりです。

当HPは放置した状態になっており、久しぶりに掲示板を見て驚きました。

それにしても3倍も高速とはすごいですね。当方は浦島太郎のように自分で
書いたソースコードも理解出来なくなっています。
解の個数を数えるのに、n++ ではなく n×m を積み上げていく方法ですよね。
高速化の成功おめでとうございます。

いろいろあってパズルからは遠ざかった生活をしていますが、あの頃の
パズルにかける熱い想いが懐かしく感じています。
大した返事も書けないかも知れませんが何かありましたら、また投稿をお願いします。
とてもいい刺激になります。


NQueen問題-Again (HJ版) 投稿者:deepgreen 投稿日:01月12日(火)23時04分24秒

こんばんは、deepgreenです。

新しいアプローチ?の最新の状況をお知らせします。
”新しい”といってもビット演算をベースにしたtakaken版とは大きく異なる
という意味です。昔、NQueen問題に挑戦した時tryして挫折した方法です。
その当時から、takaken版の完成度は高く、それを超えるには部分解合成法が
有力とみていました。しかし、部分解から全体を合成するjoin処理が重くて
良い結果が得られませんでした。

今回、join処理の高速化を思いついたので、再挑戦をはじめました。
現在は、HJ版(Half-Join:2分割の合成)がほぼ完成し、takaken版に比べて
N=20では約3倍の高速化ができました。


【実行結果サマリ】

               DG-HJ版            takaken版(rerun)      takaken-orginal版
   N= 18        1:23.88 (0.37)        3:48.23 (1.0)        4:55.50 (1.29)
      19         --                  29:22.07 (1.0)       37:49.96 (1.29)
      20     1:08:56.43 (0.29)     3:54:10.34 (1.0)     5:03:35.16 (1.29)


 ** DG-HJ版は、2分割処理の都合で偶数のみ対応しています。奇数を求めるには、
    同じ考えに基づく、別プログラムが必要です。(今のところ予定なし)


--------------------------------------------------------------------------

【DG-HJ版実行結果】

                unique         all       ms(1/1000秒) 
             -----------  ------------    ---------
***** N= 4            1             2            0

***** N= 6            1             4            0

***** N= 8           12            92            0

***** N=10           92           724            0

***** N=12         1787         14200           15

***** N=14        45752        365596          109

***** N=16      1846955      14772512         3261

***** N=18     83263591     666090624        83881   (  1:23.88)

***** N=20   4878666808   39029188884      4136434  (1:08:56.43)


NQueen問題-Again (続き) 投稿者:deepgreen 投稿日:01月11日(月)20時07分52秒

deepgreenです。

電気通信大学で、2004年にN=24の解を求めたとのニュースを見つけました。

  Intel Pentium 4 Xeon 2.8GHzのプロセッサを68個搭載したクラスタで
  22日間。解の数は、227,514,171,973,736(全数解)

  詳細は、以下のURLにあります。

  http://www.arch.cs.titech.ac.jp/~kise/nq/index.htm

  また、このHPには論文とプログラムが公開されていたので、ダウンロードして、
  rerunしてみました。
  
 動作環境 : Pentium4 Xeon 2.8-GHz processor (single processor)

  N      全数解          処理時間(秒)  |  DG-rerun    takaken改造版(DGmod版)
  16                                   |    8.66            4.32秒
  17       95,815,104        55.5      |
  18      666,090,624       384.8      |  448.55         3:34.87 (214.87秒)
  19    4,968,057,848      3168.6      |
  20   39,029,188,884     24329.7      |              3:36:32.96 (12992.96秒) 
 
  ** DG-rerun : 電気通信大学のqn24b_baseをdeepgreenのPCで動作させた結果です。
     deepgreenのPCは2.1GHzなので、ちょっと遅い結果となりました。

     takaken改造版の方が約2倍高速です。どちらもビット演算を基本としていますが、
     qn24b_baseでは、unique解を求めず全数解のみを求めています。その処理の差が
     性能差となっていると思われます。並列処理を考えて、単純な方法を選択したの
     かもしれません。

追記:今、以前の投稿記事をみていたら、塗り壁さんが当時見つけて報告されていま
   したね。deepgreenもみていたと思いますが、すっかりわすれていました。

   N=25の解をどこかで見つけた人はいらっしゃいますか?


NQueen問題-Again 投稿者:deepgreen 投稿日:01月11日(月)19時58分56秒

deepgreenです。久しぶりに、NQueens問題に挑戦しています。

高橋謙一郎さんのHPのNQueenプログラム(以下 takaken版と仮称)をちょっと
改造してみました。


【実行環境】
    CPU : Intel Core2 Duo CPU  T8100  2.1GHz
    メモリ : 4 GB


【実行結果サマリ】

               DGmod版            takaken版(rerun)      takaken-orginal版
   N= 18        3:34.87 (0.94)        3:48.23 (1.0)        4:55.50 (1.29)
      19       27:04.72 (0.92)       29:22.07 (1.0)       37:49.96 (1.29)
      20     3:36:32.96 (0.92)     3:54:10.34 (1.0)     5:03:35.16 (1.29)

   a. DGmod版           : takaken版を数行変更したもの
   b. takaken版(rerun)  : takaken版をdeepgreenのPCでrerunした結果
   c. takaken-orginal版 : 高橋謙一郎さんのHPの結果を転記
   
   bとcの差は、PCの性能差をみるための比較
   aとbの差は、改造の効果を表している

   
★ DGmod版の改善効果はわずかです。
   takaken版の完成度が高く、ビット演算をべースにしたアプローチでの
   これ以上の改善は難しいという感じがします。


-----------------------------------------------------------------------------

【takaken-DGmod版実行結果】

<------  N-Queens Solutions  -----> <---- time ---->
 N:           Total          Unique days hh:mm:ss.--
 2:               0               0             0.00
 3:               0               0             0.00
 4:               2               1             0.00
 5:              10               2             0.00
 6:               4               1             0.00
 7:              40               6             0.00
 8:              92              12             0.00
 9:             352              46             0.00
10:             724              92             0.00
11:            2680             341             0.00
12:           14200            1787             0.00
13:           73712            9233             0.03
14:          365596           45752             0.11
15:         2279184          285053             0.69
16:        14772512         1846955             4.32
17:        95815104        11977939            29.72
18:       666090624        83263591          3:34.87
19:      4968057848       621012754         27:04.72
20:     39029188884      4878666808       3:36:32.96
21:    314666222712     39333324973    1 06:19:05.10


【takaken版rerun実行結果】
===== takaken orginal source ====
<------  N-Queens Solutions  -----> <---- time ---->
 N:           Total          Unique days hh:mm:ss.--
 2:               0               0             0.00
 3:               0               0             0.00
 4:               2               1             0.00
 5:              10               2             0.00
 6:               4               1             0.00
 7:              40               6             0.00
 8:              92              12             0.00
 9:             352              46             0.00
10:             724              92             0.00
11:            2680             341             0.00
12:           14200            1787             0.01
13:           73712            9233             0.02
14:          365596           45752             0.11
15:         2279184          285053             0.70
16:        14772512         1846955             4.68
17:        95815104        11977939            31.97
18:       666090624        83263591          3:48.23
19:      4968057848       621012754         29:22.07
20:     39029188884      4878666808       3:54:10.34


倉庫番  投稿者:daigo 投稿日:11月01日(日)19時37分57秒


解けない面が有るので、バージョンアップしてください。


 ホームページへ戻る  書き込みリストへ戻る