フルオーダーメイド靴」のプレスリリースを行いました。out)というパズルがあります。ライトを消せ!的な意味です。t...play.google.com例題1マスをクリックすると、そのマスを含む十字型の5マスがひっくり返ります。マスをすべて消灯させればクリアです。解答は一意に定まりませんが、最少手数の答えがこちらです。同じマスを2回以上クリックすることには意味がないため、各マスとも「1回クリックする」か「クリックしない」の2択しかありません。よって解の組み合わせは225=約3000万通りあります。今日は、このパズルをGA(遺伝的アルゴリズム)を用いて解いてみます。解の一つを見つける方法はこちらをご参照ください。5*5サイズは特別に難しいそうです。ライツアウトの解法Puzzle,パズル,プログラミング,解法www.nct9.ne.jp実行環境WinPython3.6をおすすめしています。Windowssourceforge.netvcoptの使い方についてはチュートリアルをご参照ください。お手軽最適化パッケージ「vcopt」チュートリアル実行環境Windowsマシンで実行する方にはWinPython3.6をおすすめしています。インストール不要で、USBメモリに入れて持ち運ぶこともできます。...vigne-cla.com2019/09/23vcoptの仕様については最新の仕様書をご参照ください。本記事執筆時とは仕様が異なる場合があります。長さ25の遺伝子配列を用意し、各遺伝子は0か1をとることにします。これを5*5の2次元配列にリサイズし、1をクリックするマスとしてプレイします。評価関数では、プレイ後の盤面を見て「点灯しているマス(=1のマス)」の総数を返すことにします。このスコアが0に近づくように最適化を行います。importまだvcoptをpipしていない場合はpipします。vcopt必要なパッケージをimportします。’#’が点灯しているマスです。'##-##']前処理でnumpy配列に変換し、パズルのサイズを取得します。答え盤面(クリックするマス)を入力してパズルをプレイし、結果の盤面を返す関数を作ります。(para)を入力し、これを答え盤面に変換してパズルをプレイし、プレイ後の点灯数を返す関数を作ります。途中経過が気になる方はコメントアウトを解除して詳しく見てみてください。1]score:13適当なparaを生成して入れたところ、スコア(残り点灯数)=13が返ってきました。いう選択肢が25個並んだ2次元配列です。評価値は0を目指します。0]]14秒でスコア0が見つかりました。このように11マスをクリックするとすべて消灯しますが、どうやら最短の解ではないようです。評価関数において、点灯マスの総数を1の位、クリックしたマスの総数を0.1の位とする小数を返すように修正しました。スコア=0.5は、すべてのマスが消灯しており、クリック数が5であることを意味します。0]]収束に55秒かかりましたが、17秒で最少手数の解を見つけました。例題2こちらの問題もなかなか難しいです。「え、そこクリックするの?」という感じです。0]]8秒で最少手数が見つかり、50秒で収束しました。ちなみに、事前にクリック数が分かっていれば8秒で止めることも可能です。一つの解を見つけるのはさほど難しくありません(解法の記事を参照ください)。最小手数の解を見つけるのは大変です。今回はGAの威力が発揮できたのではないでしょうか。(え、このサイズなら全探索のほうが早いだろうって?聞こえないですアーアー)Slack、勉強会、Twitterをよろしくお願いします質問やコメントはSlackでお気軽にSlackに参加する勉強会でコードを配布していますconnpassを見るTwitterでも情報を発信していますTwitterをフォローするvcopt応用vcopt最適化この記事を書いた人Yasuda博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。半額弁当の時間帯を知り尽くしている。「最長しりとり問題」であるポケモンしりとりは真面目な研究テーマです。最適化をやっているとどうしても「NP完全」を理解しなければなりません。テント・アンド・ツリーというパズルがあります。「いろは歌」は組合せ最適化問題であり、「いろはにほヘと」で始まるものが有名です。vcoptでニューラルネットの騙し画像を作る(モザイクノイズ編)2020/01/12vcoptはこちらチュートリアル仕様書プレミアムパッケージフォローする質問やコメントはSlackでお気軽にSlackに参加する勉強会でコードを配布していますconnpassを見るTwitterでも情報を発信していますTwitterをフォローするタイトルとURLをコピーしました。