問題タブ [magic-square]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 魔方陣関数 Matlab
プロジェクトの場合、matlab のマジック関数と同じことを行う独自の関数を作成することになっています。私は明らかに誰かに私の問題を書き出すように頼んでいるわけではありませんが、誰かが私がそれをどのように開始できるか、またはサンプルコードのアイデアを私に与えることができれば、それは大歓迎です! 私はこれを開始する方法について完全に迷っています...
java - 遺伝的アルゴリズムで魔方陣を解く: 母集団のスコアはすぐに収束しますが、ゴールには到達しませんか?
GA についてもっと学びたいという欲求が再び燃え上がり、たくさん読んで何もしないのではなく、逆の方法で始めることにしました。問題を選んで、それを解決しようとします。
私は魔方陣問題を選びました。染色体をエンコードするために、私はPermutation Encodingを使用しており、 Mutation()およびNewChild(parent1, parent2, pivot) には次のメソッドを使用しています。
私の選択アルゴリズムは少し奇妙で、インターネットで見つかった例を基にしています。
スコアは、次のように、行/列/対角線の合計と魔法の定数の差の 2 乗に基づいて計算されます。
私が気付いたのは、収束が非常に速く、スコアが 1..7 (少ないほど良い) に達すると改善が止まるということです。
私はこれを次のように見ています:それは局所最適、潜在的な井戸に到達し、そのように呼ぶことができれば、突然変異が十分に異なっていないため、近くの丘を飛び越えませんか?
突然変異率を 5 ~ 80% に変更して、染色体集団に 10 ~ 20% のエリート グループを残し、集団サイズを 16 ~ 32 染色体から変更しようとしましたが、うまくいきませんでした。
私は何を間違っていますか?人口スコアをゼロに収束させるには、どのような改善を使用できますか?
必要に応じて、完全なソース コードを投稿することができます。
更新:サイズ 5 の立方体の収束率は次のようになります。交差率は 60%、突然変異率は 10% です。
python - 魔方陣の並べ替え
魔方陣を解くための再帰順列関数を書くのに少し苦労しています。この関数では、2 次元配列は使用できず、リストのみを使用できます。以下は私が現在持っているものです:
size
コマンドライン引数を使用してユーザーが定義します。
上記の関数が値を並べ替えるというタスクを達成するかどうか、私は少し混乱しています。
performance - パズルプログラミング-最適化することは不可能ですか?
私はさまざまな数のパズルを解くためのプログラムを書いてきましたが、最適化できない不当に複雑な検索アルゴリズムを常に設計しています。
たとえば、あるパズルでは、以下の1から9までの数字の3x3グリッドが与えられます。
任意の行または列の数値を任意の方向に循環させることができます。以下は、数字の一番上の行を右にシフトする例です。グリッドの端にある場合、番号はループします。
各列、行、対角線の数字の合計が15になる魔方陣を作成するまで、この方法で数字を移動する必要があります。
可能なすべての移動シーケンスをテストするためにDFSブルートフォースアルゴリズムを作成しましたが、各ターンで使用可能な移動の数は指数関数的に増加し(約12 ^ [現在のターン])、役に立たなくなります。
正しい動きを見つけるにはBFSが最適であるように思われますが、バックトラックするには、グリッドのコピーを数千とは言わないまでも数百を保存する必要があります。
私はいつもこの種の問題に遭遇します。BFSアルゴリズムとDFSアルゴリズムはどちらも、それぞれ大量のメモリと時間を使用します。これらのようなアルゴリズムを最適化して、より高速かつ効率的に実行できるようにするための支援が必要です。おそらく、数字のパターンと関係を認識したり、アルゴリズムロジックを与えて目標に向かって取り組むことが役立つでしょうか?(それが何を伴うのかわかりません)。
編集:
私の固定アルゴリズムは魅力のように機能します。私の順列に番号を付ける方法を学ぶことは不可欠でした。皆さん、ありがとうございました!
java - スキャナー入力の問題
ユーザーからの入力をスキャナーから取り込み、その入力を 2D 配列に入れるにはどうすればよいですか。これは私が持っているものですが、それが正しいとは思いません:
私がやろうとしているのは、2D 配列を作成して魔方陣を作成することです。ブール値の部分がわかりました。ブール値メソッドが数値をテストできるように、ユーザーの一連の数値を配列に入力するのに助けが必要です。すべての助けに感謝します
java - 魔方陣再帰無限ループJava
固定 N 次元に対して可能なすべての魔方陣を生成できるプログラムを作成しようとしています。対角線のセルに値を入力してから、行に値を入力します。
行を埋めるときに無限サイクルで立ち往生しているようですが、その方法や理由がわかりません。行または列の合計が正しいかどうかをチェックする合計チェックは実装していませんが、ここでは関係ありません。
誰かが私を助けることができれば、私はとても素晴らしいです。コードベロー
}
prolog - Prolog: clp(FD) を使用せずにすべての 3x3 魔方陣を見つける
可能なすべての 3x3 魔方陣を見つけたいです。
英語のウィキペディアからの引用:
魔方陣は、各行と各列の数値、および主対角線と副対角線の数値をすべて加算した、正方格子内の個別の数値 (つまり、各数値が 1 回使用される) の配列であり、通常は整数です。同数まで。
1 つのサンプル ソリューションを次に示します。
8 1 6
3 5 7
4 9 2
を使用せずにすべてのソリューションを見つける Prolog プログラムを作成するにはどうすればよいlibrary(clpfd)
ですか?
c - C - 2D 配列 - 魔方陣の次数 4
基本的に、次数 4 の魔方陣を生成する必要があります。つまり、行と列は 4 で割り切れます。
提供されたアルゴリズムは
- 配列をトラバースし、対角部分集合を埋めます
- 配列を後方にトラバースし、残りを埋める
上記のコードで 4x4 配列を作成しましたが、これは 8x8、12x12 などに拡張されますが、対角サブセットを埋めるパート 1) で立ち往生しています(たとえば、8x8 を 4x4 に分割し、代わりにその対角線を取得します)。 ..それを行う方法がわかりません。対角線自体を埋めることができただけです
tldr、上記は対角かどうかを知るために使用する条件です。対角ではなく対角サブセットであるかどうかを知るために条件を変更する方法はありますか?
ありがとう
c - 2D配列を印刷するとジャンクが印刷されます(魔方陣)
魔方陣を印刷する C プログラムを作成しようとしています。ただし、正方形を作成するときにエラーが発生します。これらのバグの原因を突き止める手助けをしてくれる人はいますか? 以下は、関連するコードと出力です。
コード:
出力:
c++ - 魔方陣、行、列、対角線を合計するためにこれを取得することはできません
行、列、および主な対角線を合計して出力する必要があります。誰かが私が間違っていることを教えてもらえますか?これは私が使用するように与えられたコードですが、合計を出力するように取得できないようです。以下のコードに、問題が存在すると思われる場所、合計が開始される場所、停止する場所にコメントを付けます。私はこれを自分で理解するのに苦労しているので、助けていただければ幸いです。出力は、4番目の行と列の行、列、対角線の合計が15に等しい3 x 3の行列である必要があります。私の出力は、行、列、および対角線を合計していません。