お気づきの点や感想要望などなんでもOK!
> 出来る事なら、消していただけるとありがたいのですが・・・。 クリアー達成登録をした直後に表示される順位表はリロード(再読込み) しないと自分の名前が表示されない場合があるようです。 407位を生かして後の2つは次の人達に移行しておきした。 気にせずに是非フリーク版に挑戦してみて下さい。 # 私事ですがFLAPPY95の5-06は無事通過!
WATTAの上級編をクリアーしたは良いが、 間違って入力をし、重複させてしまいました。 407位〜409位です。 皆さん、本当にごめんなさい。 出来る事なら、消していただけるとありがたいのですが・・・。
「思考型パズルゲームで遊ぼう」コーナーの全クリアー登録を再開しました。 特にWATTAに人気が集中してますが、このゲームは元々FLAPPYの 魅力に取り付かれた自分が同じような「ヒラメキ発想」を必要とするパズル ゲームを作りたいと言うスタンスを持って作りました。 (初代)FLAPPYの全200面は解けたものの「FLAPPY95」は未だ 全クリアー出来てません。どなたかFLAPPY95を全クリアーした方の 自慢話をお待ちしてます。ちなみに私は「5−06」でストップしてます。
大きな勘違いがありました。IDA*サーチですので上限値を気にする必要は ありません。高橋さんの推測があっていると思います。 PDBという考えは私には新しいアイデアでした。それにしても一連の迷走状態 は恥ずかしいかぎりです。どこかでこのアイデアを活かせるといいのですが、。。。 高橋さん、どうもありがとうございました。
作者の論文をじっと眺めて(さらに自動翻訳ソフトを使って)、私の最終推測は、 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さんはその部分に重点を置いた ようですね。私は力尽きて読めませんでした。 ところで、そろそろ私も倉庫番に帰ろうと思います。アイデアが溜まってきたの と時間も作れそうなので....
今年の前半は倉庫番をエンハンスしようと思っているので、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になるのでちょっとやってみようか と気軽に手を出せる範囲ではありません。でも、チョット、。。。
ごめんなさい。とんでもないウソを書いてしまいました。 > 下限値の算出は常に動的であり1手動かす度に計算されます。その計算は前回 > 書いた通り、target patternの構成要素の7枚の駒についてはPDBを参照 > して、残り8枚の駒についてはMDを使って求め、その2つをたし算します。 この考えは間違いでした。target patternの構成要素の7枚の駒についてPDB を参照して得られた下限値である最短手順には,構成要素以外の駒の動きも含んで います。従って、残り8枚の駒についてはMDを使って求めた下限値とどこかで 重複している可能性があります。単純に2つをたし算するのは間違いでした。 益々分からなくなってきた........
説明がちょっと足りなかったようなので補足します。(正直、熱くなってます!) IDA*サーチにおける枝刈りは、あくまでも次の条件式が満たされた時です。 [現在までの手数]+[下限値=以後絶対必要な手数]>[今回の探索の深さ] 下限値の算出は常に動的であり1手動かす度に計算されます。その計算は前回 書いた通り、target patternの構成要素の7枚の駒についてはPDBを参照 して、残り8枚の駒についてはMDを使って求め、その2つをたし算します。 そして最初に見つかった解が最適解となり探索を終えます。 ----------------------------------------------------------------- 「これって結構いいアイデアかなぁ」と再認識しました。ロジックに勘違いは ないと思います。作者が研究をしようとした最初の思い付きは、正にこの考え をひらめいたのが最初の動機なのかなあと想像しています。これを起点として さらに研究を深めて探索量を「1/1000」にまでしてしまったような気が します。 15パズルのソルバーロジックは汎用性が高いので本当に面白い。特に今回の deepgreenさんの考察には背筋に衝撃が走りました。deepgreenさんの考察に 追加で考察してしまいましたが、でもまだ実際にプログラムを書いて試してみ ようと言う気になれない、何かまだ足りない気がしているのも事実です。
今回の説明を読んで一瞬感動してしまいましたが、どうも今回の考え方も何か ちょっと違うような気がするのです。 どんな初期状態であったとしてもその配置は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とは本当は何なのか も想像なので何とも想像だらけです。
すみません。恥ずかしながら、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が重要」という ご指摘は大当たりでした。鋭い洞察力ですね。