楽しいボードゲームとして誕生してから 100 年経った今、数独はどのようにして計算研究の焦点となったのでしょうか。人工知能や量子コンピューターを使用して、スマートな数独ソルバーをゼロから作成する方法を学びます。 詳しく調べる前に、まず歴史を理解しましょうマルク・ブロックは「歴史は学問の母と呼ばれている」と言いました。それでは、有名な数独ゲームがどのように生まれたのかについてお話ししましょう。この物語は19世紀後半に遡り、フランスで始まりました。フランスの日刊紙「ル・シエクル」は、論理ではなく算術を必要とし、1~9ではなく2桁の数字を使用する9x9の推測ゲームを掲載した。ゲームの性質は数独に似ており、行、列、対角線の数字を足すと、同じ数字が得られます。引退した建築家でパズル愛好家のハワード・ガーンズは、現代の数独ゲームを考案したとされており、このゲームは 1979 年に「Sudoku」という名前でデル マガジンに初めて掲載されました。このパズルは、1986 年に日本のパズル会社ニコリによって「数独」という名前で初めて出版されました。 数独パズルを解く際の問題の枠組み数独は、変数セット、ドメイン、制約セットがすべて有限であるため、制約充足問題 (CSP) の実際の例です。各行、各列、および各 3x3 サブテーブルに 1 つの数字のみが含まれるように、9x9 テーブルに 1 ~ 9 の数字を入力する必要があります。数独の別のバリエーションとして、対角数独も存在します。これは、表の各対角線に追加の制約セットを課し、各数字がその特徴を 1 回だけ持たなければなりません。 制約充足領域についてはわかっていますが、最適なソリューションはすべての制約を満たす必要があります。より具体的には、ゲームのルールに従う必要があります。 最適な解決策はセット内のすべての制約を満たすため、パズルは解けます。 計算的には、数独を解くための制約は、いくつかの非常に特殊なブルート フォース アルゴリズムを使用して解決できるため、非決定性多項式時間 (NP) で解決できます。また、問題への入力が多項式長の解の集合に関連付けられている場合、解集合の妥当性も多項式時間でテストできます。 完全に解かれた数独は、ラテン方陣(オイラーによって説明された、n 個の異なる記号で満たされた nxn 配列)の例です。 数独問題はグラフの色付け問題として考えることができます。グラフの色付けには 9 色のみを使用する必要があり、露出した文字は部分的な色として考えることができます。 制約を満たすために設定された人工知能アルゴリズムを使用する計算科学の基本原理は、特定の制約を満たすために論理に頼る能力です。 数独を解くときは、基本的なルールに加えて、特定の勝ちパターンを探すようにソルバーをトレーニングする必要があります。 つまり、問題は、システムがルールに盲目的に従うだけでなく、短期的および長期的な影響を考慮しながらいくつかの決定を下していることです。 これらのパターンはヒューリスティックと呼ばれます。 ゲームの知識やスキルを偶然発見した熟練プレイヤーと同様に、基本的なルールを知っているだけではゲームのエキスパートにはなりません。 したがって、アルゴリズムを開発して問題を解決するときは、有用なヒューリスティックを念頭に置く必要があり、プログラムにそれらを組み込んで、よりスマートで、勝つために役立つものにする必要があります。 数独ソルバーでは、81 個の数字のシーケンスを ' で区切られた文字列として入力します。 ' (ピリオド) は未解決の番号を示します。 この問題を解決するには、「.」をそのセルに収まるすべての可能な数字に置き換えます。 数独の制限により、行、列、またはセルの近くの 3x3 サブスクエアで同じ数字を複数回使用することはできません。 対角数独の場合も、同じ制約を考慮する必要があります。 まず、ピリオドを 1 から 9 までのすべての数字に置き換えます。次のgrid_values関数を使用して、これをプログラムで実行します。
まず、未解決のセルすべてに可能な値を割り当てます。 ここで、未解決のセルを 1 から 9 までのすべての可能な数字に置き換えました。数独の基本ルールから、その行、列、3x3 サブフィールドですでに使用されている数字は 2 回使用できないことがわかります。 したがって、最初にすべての可能な数字で埋めた未解決のグリッドでそれらに遭遇した場合は、それらを排除しましょう。 それでは、Python の消去メソッドを使用して、未解決のセルから無関係な数字を消去する方法を見てみましょう。
したがって、これらの制約を満たしながらも、1 つの数字しか配置できないセルに遭遇することがありますが、その特定のセルにはその数字以外の数字を配置することはもはや不可能です。 まずこれらを記入する必要があります。 適切な解決策があります。 これを「唯一の選択肢」と呼び、数独グリッドセルを解くための最も単純なヒューリスティックです。
これまでの制約充足のプロセスでは、ユニット (行、列、3x3 のサブ正方形など) 内に未解決のセルが 2 つ存在し、残りの特定の数値を 2 つしか割り当てられない状況が発生する可能性があります。 したがって、これら 2 つの数字は、同じセル内の他のセルの可能な数字から実質的に削除されます。 このヒューリスティックは「裸の双子」と呼ばれます。 アルゴリズムの実装では、具体的にはグリッド値のディープ コピーを作成し、裸の双子の実現可能性、つまり 2 つの特定の値のみを受け入れることができる 2 つの未解決セルがあるかどうかをチェックし、ある場合は、先に進んで同じセル内の他のセルからその 2 つの値を削除します。 これを、以下に示す nude_twins 関数を使用してプログラムで実装します。
ここで、これら 3 つの制約充足アルゴリズムを繰り返し適用し、パズルが行き詰まってそれ以上減らすことができないかどうかを確認することで、パズルを可能な限り減らそうとします。 これをプログラム的に行うには、reduce_puzzle 関数を使用します。 私たちが行っていることは、for ループで最初の 3 つの関数を呼び出し、グリッド値の入力シーケンスと出力シーケンス内の解決されたセルの数が同じである場合に関数を終了し、制約充足アルゴリズムだけではそれ以上削減できないことを意味します。
制約充足問題によって数独グリッドがまだ解決されていない場合は、一部のセルに特定の可能な値が割り当てられている部分的な解決が出力されます。 この場合、検索ツリーを使用して、それらの位置にある最適な数字のセットを検索します。 深さ優先探索 (DFS) アルゴリズムを使用して検索ツリーを走査します。 つまり、基本的には、DFS を使用して、同じグリッドを持つ複数のインスタンスを作成し、未解決のセルごとに異なる可能な割り当てを試しました。 検索結果に基づいてグリッドを縮小するように CSP アルゴリズムに再帰的に要求します。 プログラム的には次のように実装します。
入力文字列シーケンスを 2 次元の 9x9 数独グリッドとして表示するには、display sudoku 関数を使用します。
数独シーケンスを解くには、上記の関数を次のように呼び出します。
出力は以下のとおりです。ここでは、1 セットのアルゴリズムによって答えが正常に計算されています。 制約充足問題としての数独を解く量子的アプローチここでは、量子シミュレーテッドアニーリングを使用して簡単な数独グリッドを解いてみます。 まず、シミュレーテッド アニーリングとは何でしょうか? このような最適化問題の場合、その考え方は、いくつかの次善のヒューリスティックを使用し、最適なヒューリスティックのセットを取得して最適なソリューションを得るというものです。 ここでは、DWave AQC モデル (糖尿病量子コンピューティング) を使用して、前述の制約を満たす最適なソリューションをサンプリングします。 ... DWave Kerberos ハイブリッド サンプラーの使用: この例では、DWave に付属するハイブリッド ソルバーを使用しています。 これは、並列検索を実行して最適なヒューリスティックを見つけることによって行われます。 これは量子コンピューティング機能と古典コンピューティング機能の両方を使用するハイブリッド ソルバーです。 また、処理時に非同期ワークフローを使用する分解サンプラーでもあります。 これは、DWave Systems の Ocean SDK パッケージに含まれています。 ローカル開発を開始するには、システムに Python 3.5 以降がインストールされていることを確認してから、次のコマンドを発行します。
バイナリ二次モデル(BQM)を使用した計算 量子コンピュータに直接入力できる制約を構築することはできません。入力するための中間表現が必要です。 そのため、私たちは BQM を使用します。幸いなことに、DWave Ocean SDK には、制約充足問題を BQM に定式化するために使用できる「Combination」と呼ばれるツールがすでに用意されています。 まず、名前が示すように、バイナリ二次モデル自体は、二次式でバイナリで表現される方程式のシステムです。 量子コンピュータは計算の複雑さが増すため、これらの計算を使用することで開発プロセスを大幅に高速化できます。 そこで、ゲームでは、入力変数と内部変数の k 通りの組み合わせのそれぞれに対して最小となるバイナリ二次モデルを返す dimod の組み合わせツールを使用することにしました。 まず、dwave-ocean-sdk から必要なパッケージをインポートし、実際に Sudoku Grid を読み込む前にいくつかの健全性チェックを実行します。
ここで、組み合わせツールを使用して、数独グリッドの行、列、サブスクエア インデックスの利用可能なすべての変数の組み合わせを使用して、バイナリ二次モデルを作成します。
それでおしまい。 私たちは、古典的なコンピューティングを使用したソリューションと、対角の数独グリッドも解くことができる非常に強力な人工知能ヒューリスティックを使用したソリューションの 2 つのインテリジェント ソリューションを実装することに成功しました。 2 番目のアプローチでは、非同期ハイブリッド ヒューリスティック サンプラーを使用します。このサンプラーは、断熱量子計算モデルのシミュレーテッド アニーリングも使用して、制約充足問題をバイナリ二次モデルに変換し、サンプリングして、最適なサンプリング ソリューションを生成します。 |
<<: ジャック・マー氏:教育はデジタル時代に合わせて変えなければならない、そうでなければ子どもたちは機械と競争できなくなる
>>: 3つの大きなトレンドが浮上、我が国のドローン産業の発展の概要
今日では、データ サイエンティストの仕事は非常に一般的になり、機械学習もその中に完全に含まれる可能性...
Q: 対称暗号化アルゴリズムと非対称暗号化アルゴリズムの違いは何ですか? 特に暗号化、署名、ハッシ...
企業は、迅速かつ効率的に適応し、生産性、快適性、持続可能性を向上させるスマート オフィス テクノロジ...
翻訳者 | ジン・ヤンレビュー | Chonglou 2023 年はテクノロジー業界にとってエキサイ...
ここ数か月、私はたくさんのロボットに取り組んできました。このプロセスで私が学んだ教訓をいくつか紹介し...
データ中心の人工知能の構築は、今後のトレンドになりつつあります。 1年以上前、アンドリュー・ン氏は「...
最近、ケータリングボスインサイダーが主催する「Upward 2021・第6回中国ケータリングイノベー...
01 トラフィック監視セキュリティ任務におけるドローンの有望な用途の 1 つは、交通監視システムの...
コア要約:はじめに: この AI + 医療研究の範囲は、CDSS、スマート医療記録、AI + 検査、...
6月19日、生成型人工知能がハードウェア設計などの分野に参入し始めました。最近、ニューヨーク大学の...
[[410355]]北京時間7月9日、ジョージ・ドヴォルスキー氏のスーパー人工知能に関する意見は次...
[51CTO.com クイック翻訳]今日、グラフィックス プロセッシング ユニット (GPU) は、...