ホームページへ戻る  書き込みリストへ戻る
「コンピュータ&パズル」訪問者の自由メッセージコーナー

お気づきの点や感想要望などなんでもOK!


re:すいません。 投稿者:高橋謙一郎  投稿日:03月18日(土)14時59分10秒


> 出来る事なら、消していただけるとありがたいのですが・・・。

クリアー達成登録をした直後に表示される順位表はリロード(再読込み)
しないと自分の名前が表示されない場合があるようです。

407位を生かして後の2つは次の人達に移行しておきした。
気にせずに是非フリーク版に挑戦してみて下さい。

# 私事ですがFLAPPY95の5-06は無事通過!


すいません。 投稿者:トモトモ  投稿日:03月18日(土)00時19分17秒

WATTAの上級編をクリアーしたは良いが、
間違って入力をし、重複させてしまいました。

407位〜409位です。
皆さん、本当にごめんなさい。
出来る事なら、消していただけるとありがたいのですが・・・。


思考型パズルゲームで遊ぼう 投稿者:高橋謙一郎  投稿日:02月23日(水)20時11分34秒

「思考型パズルゲームで遊ぼう」コーナーの全クリアー登録を再開しました。

特にWATTAに人気が集中してますが、このゲームは元々FLAPPYの
魅力に取り付かれた自分が同じような「ヒラメキ発想」を必要とするパズル
ゲームを作りたいと言うスタンスを持って作りました。

(初代)FLAPPYの全200面は解けたものの「FLAPPY95」は未だ
全クリアー出来てません。どなたかFLAPPY95を全クリアーした方の
自慢話をお待ちしてます。ちなみに私は「5−06」でストップしてます。


re:下限値見積り案(15パズルの最適解)  投稿者:deepgreen  投稿日:01月30日(日)01時44分50秒

大きな勘違いがありました。IDA*サーチですので上限値を気にする必要は
ありません。高橋さんの推測があっていると思います。
PDBという考えは私には新しいアイデアでした。それにしても一連の迷走状態
は恥ずかしいかぎりです。どこかでこのアイデアを活かせるといいのですが、。。。
高橋さん、どうもありがとうございました。


下限値見積り案(15パズルの最適解) 投稿者:高橋謙一郎  投稿日:01月29日(土)23時27分54秒


作者の論文をじっと眺めて(さらに自動翻訳ソフトを使って)、私の最終推測は、
deepgreenさんの推測とは全く異なるのですが、

 (1)PDBは2つ作っておく。target pattern は下図のとおり。

    *xx3   *xxx  *:スペース
    xxx7   xxxx  x:残りの数字
    xxxb   89ax
    cdef   cdef

    周辺PDB  角PDB

 (2)下限値を見積る時この2つのPDBを参照して得られた値の内より厳しい
   (より大きい値)方を取る。作者によると、この2つのパターンは下限値
   を厳しく見積るにはベストの関係にあるらしい。(訳せゴマはそう訳した)

   Intuitively, there two are likely to be among the best at
   providing tight lower bounds for the search.

 (3)下限値を見積る時にMDでも計算してみる。つまり周辺PDBと角PDB
   とMDの3つの内、以後絶対に必要な手数がより厳しい(より大きい値)
   を下限値に採用して、次の枝刈り式を使いIDA*サーチする。

    [現在までの手数]+[下限値]>[今回の探索の深さ]

 (4)あくまでも、最初に見つかった解が最適解となる。

要点は、1手動かすたびに下限値を見積るがその時「何種類かの下限値の見積り
法を試してその内より大きい値を採用する」ということのような気がします。

ただし、それらしい事が書いてあると思われる部分(1ページ分)だけを訳した
結果と私の想像の合成によります。どうやら私の訳した部分の後に「上限値」に
関することが書いてあるようなので、deepgreenさんはその部分に重点を置いた
ようですね。私は力尽きて読めませんでした。

ところで、そろそろ私も倉庫番に帰ろうと思います。アイデアが溜まってきたの
と時間も作れそうなので....


re:想像の補足(15パズルの最適解)  投稿者:deepgreen  投稿日:01月29日(土)21時03分54秒

今年の前半は倉庫番をエンハンスしようと思っているので、15パズルに
あまり深入りするつもりはなかったのですが、脱線してしまいそう。。。

MD(Manhattan distance)は、高橋さんの定義で合っていると思います。
(論文が見つからないので想像の域をでませんが)

PDBからsubgoalまでの最大手数は61手、subgoalからgoalまで
(=8パズル)は最大31手なので、15パズルは最大92手となります。
*の位置関係を考えると最大は90手になると論文に書いてあります。
(最後のところは理解できてません)
いずれにせよ、高々90手で解けてしまうというのは意外な結果です。

PDBのコストに関する高橋さんのご指摘は、もっともですね。PDBの
コストはtarget patternに近づくほど小さくなるので、subgoal−>goalを
無視した分精度が落ちてしまいます。MDの方が良いケースも十分考えら
れます。私の推測は、

  (1)maxhand = 91     (最大値+1)
  (2)max(PDBのコスト、MD)を使って枝刈りをする
  (3)サーチでsubgoalが見つかった時は、maxhandを修正する
       (subgoalからgoalは8パズルとして事前に解いておく)
  (4)サーチ> maxhandとなったら終了で、最後に見つけた解が
        最短解となる

PDBのコストdatabaseは約520MBになるのでちょっとやってみようか
と気軽に手を出せる範囲ではありません。でも、チョット、。。。


間違い(15パズルの最適解) 投稿者:高橋謙一郎  投稿日:01月29日(土)09時25分27秒


ごめんなさい。とんでもないウソを書いてしまいました。

> 下限値の算出は常に動的であり1手動かす度に計算されます。その計算は前回
> 書いた通り、target patternの構成要素の7枚の駒についてはPDBを参照
> して、残り8枚の駒についてはMDを使って求め、その2つをたし算します。

この考えは間違いでした。target patternの構成要素の7枚の駒についてPDB
を参照して得られた下限値である最短手順には,構成要素以外の駒の動きも含んで
います。従って、残り8枚の駒についてはMDを使って求めた下限値とどこかで
重複している可能性があります。単純に2つをたし算するのは間違いでした。

益々分からなくなってきた........


想像の補足(15パズルの最適解) 投稿者:高橋謙一郎  投稿日:01月29日(土)00時08分31秒


説明がちょっと足りなかったようなので補足します。(正直、熱くなってます!)

IDA*サーチにおける枝刈りは、あくまでも次の条件式が満たされた時です。

 [現在までの手数]+[下限値=以後絶対必要な手数]>[今回の探索の深さ]

下限値の算出は常に動的であり1手動かす度に計算されます。その計算は前回
書いた通り、target patternの構成要素の7枚の駒についてはPDBを参照
して、残り8枚の駒についてはMDを使って求め、その2つをたし算します。
そして最初に見つかった解が最適解となり探索を終えます。

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

「これって結構いいアイデアかなぁ」と再認識しました。ロジックに勘違いは
ないと思います。作者が研究をしようとした最初の思い付きは、正にこの考え
をひらめいたのが最初の動機なのかなあと想像しています。これを起点として
さらに研究を深めて探索量を「1/1000」にまでしてしまったような気が
します。

15パズルのソルバーロジックは汎用性が高いので本当に面白い。特に今回の
deepgreenさんの考察には背筋に衝撃が走りました。deepgreenさんの考察に
追加で考察してしまいましたが、でもまだ実際にプログラムを書いて試してみ
ようと言う気になれない、何かまだ足りない気がしているのも事実です。


私の想像(15パズルの最適解) 投稿者:高橋謙一郎  投稿日:01月28日(金)16時59分23秒


今回の説明を読んで一瞬感動してしまいましたが、どうも今回の考え方も何か
ちょっと違うような気がするのです。

どんな初期状態であったとしてもその配置はDBの中に最初から存在すること
になり、直ぐにsubgoalまでの下限値(どうしても必要な手数)が得られます。
subgoalからgoalまでの下限値は0なので、初期状態が与えられた瞬間に
DBを参照するだけでgoalまでの下限値が得られることになります。

この下限値が、ある駒が現在の位置からgoalの位置に達するまでの単純な
距離(縦座標の差+横座標の差)を[1]から[15]までの駒について計算した値の
合計値(この値の事をMDと想像で呼ぶ)よりも大きければ枝刈り効果は確かに
大きくなります。

しかし、必ず大きくはなりません。例えば初期状態が初めからtarget pattern
の形になっていれば下限値は0になります。しかし、target patternの構成要
素以外の部分がgoalの配置と異なっていれば、MDの方が大きくなります。

それでこんな方法はどうでしょう。target patternの構成要素の7枚の駒につ
いてDBを参照して下限値を得て、残り8枚の駒についてはMDで下限値を求
めてその2つを足し算して全体の下限値を得ているのではないでしょうか。

英語が全く読めないので、あくまでも私の想像です。MDとは本当は何なのか
も想像なので何とも想像だらけです。


お詫びと訂正(15パズルの最適解) 投稿者:deepgreen  投稿日:01月28日(金)01時30分43秒

すみません。恥ずかしながら、PDBの理解が全く誤っていました。
前の話はすべて忘れてください。大変申し訳ございません。

target pattern :ゴール状態と一部分が一致するようなパターン(subgoal)

 (goal)    (subgoal) = target pattern
   *123       *xx3   *:スペース
   4567       xxx7   x:残りの数字(don'tcare)
   89ab       xxxb
   cdef       cdef

pattern database : target patternの構成要素(*,3,7,b,c,d,e,f)を任意の
(PDB)         位置にならべたpattrnのすべての集合                    

  パターンの例     (A)      (B)
                  x3xx    *xxc
                  cxdx    xxxd
                  xfex    xxxe
                  7b*x    37bf

PDBのすべてのpatternについてコスト(そのpatternからsubgoalにいたる
最小手数)を求め、データベースを作成する。このデータベースはゴールまで
の距離の下限値(どうしても必要な手数)となる。

   (初期状態)         PDB          (subgoal)       (goal) 
    *48c         +−−−+         *xx3         *123
    159d  ==> |(A)| −−>  xxx7 −−>  4567 
    26ae         |(B)|         xxxb         89ab
    37bf         +−−−+         cdef         cdef

                      <−−−−−−−−−−−>
                      この部分の最小手数をDB化

初期状態からIDA*サーチでsubgoalを探索しますが、そのときの
枝刈りとしてMD(Manhattan distance)ではなく上記のデータベースを参照
します。
高橋謙一郎さんの「MDより精度の高いLower Bound Estimaterが重要」という
ご指摘は大当たりでした。鋭い洞察力ですね。
 


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