フルオーダーメイド靴」のプレスリリースを行いました。評価関数GAで最適化10*10の問題18*18の問題まとめやることテント・アンド・ツリーというパズルがあります。...play.google.com例題1次の3つのルールを満たすように、黒いマスを「テント」か「芝生」で埋めていきます。木の4近傍には必ず対となるテントが1つあるテントの8近傍には他のテントがあってはならない各行、各列には数字の数だけテントが存在する解答は一意に定まります。(芝生を1マスだけ残してあります)今日は、このパズルをvcoptを用いて解いてみます。実行環境WinPython3.6をおすすめしています。Windowssourceforge.netvcoptの使い方についてはチュートリアルをご参照ください。お手軽最適化パッケージ「vcopt」チュートリアル実行環境Windowsマシンで実行する方にはWinPython3.6をおすすめしています。インストール不要で、USBメモリに入れて持ち運ぶこともできます。...vigne-cla.com2019/09/23vcoptの仕様については最新の仕様書をご参照ください。本記事執筆時とは仕様が異なる場合があります。GA)による本格的な組合せ最適化がお手軽にできる無料のPython...vigne-cla.com2019/09/22考え方1まず、テントが入る可能性があるマス(つまり木の4近傍のマス)の数だけ遺伝子座を用意し、各遺伝子座には0または1の遺伝子が入ることにします。0は芝生、1はテントを表します。例題1の場合は13ヶ所です。あとは評価関数において、パズルのルールが満たされているかを見て、満たされていなければペナルティを科します。木の4近傍にあるテントの数が1でなければペナルティテントの8近傍にある他のテントの数が0でなければペナルティ各行、各列の「テントの数」と「数字」の差がペナルティペナルティの合計が0になるように最適化します。なんだ簡単じゃないか!()考え方2とフラグを立ててしまいましたが、実際にやってみるとうまくいきません。正解がパターン1であれば問題ないのですが、正解がパターン2であるときに困ります。下の木の4近傍にテントが2つあるためペナルティ=1が科されます。最適化ではペナルティ0を目指すのでパターン1に近づきますが、正解はパターン2ですがら、正解から遠ざかっていまいます。そこで、1番目のペナルティを修正します。木の4近傍にあるテントの数が1または2でなければペナルティテントの8近傍にある他のテントの数が0でなければペナルティ各行、各列の「テントの数」と「数字」の差がペナルティ※厳密に言えばこの条件では解が一意に定まらず、「木と対になるテントがある」を見たさない解が出ることがありますが、今回はこれで良しとします。importまだvcoptをpipしていない場合はpipします。vcopt必要なパッケージをimportします。