免責事項
まず第一に、これは宿題なので、なぜそんなに不自然なのかと聞かないでください。(「何か変えたらどうですか?」とよく言われます)すみません… できません。
また、進化的アルゴリズムを使用する必要があります。つまり、親には子供がいて、突然変異/再結合し、新しい世代を形成し、最終的に解決策につながる可能性があります。
/免責事項
n*2
長さ n の単語があります。n^2
これらすべての単語を含むマトリックスを作成する必要があります。言葉は意味不明かもしれませんが、このマトリックスに収まる必要があります (これはユーザー側の要件です)。
したがってAGE,AGO,BEG,CAB,CAD,DOG
、この結果が得られます(少なくとも2つのうち1つ):
C A B
A G E
D O G
進化的アルゴリズムを使用する必要があります。したがって、自分の情報を染色体にコード化する方法を見つける必要があります。
私が思いついたこと:
各単語は必ず表示され、マトリックス内の開始位置と向き (左右または上下) があります。したがって[Word][Orientation][StartPosition]
、開始位置が[0][0]
/ [0][1]
/ [1][0]
etc (左の列と一番上の行) です。ただし、制限があります。向きが開始位置に合っていることを検証する必要があります。
問題:
染色体は可能な解決策でなければなりませんが、これは解決策の一部にすぎません。
私の解決策は、「適合」するようにすべての単語を含む行列でなければならないため、染色体も何らかの方法で行列全体を表す必要があります。しかし、それにはいくつかの問題があります。1 つの方向で 1 つの開始位置から 1 つの単語しか持つことができません (最初の 2 つの単語を除いて、それらは異なる方向で同じ開始位置を共有します)。これが進化的アルゴリズムを試みる有効な方法とは思えません。特に突然変異/組換えなど、どの段階も機能しているとは思えません。
私はそれを完全に間違っていると考えていますか?もしそうなら...なぜですか?そして、大量のデータを持たずに、すべての段階 (生殖、突然変異/組換え、自然選択 ... 適応度を計算して新しい世代を開始できるようにする) を通過できるように、データをコーディングするにはどうすればよいでしょうか?ガベージ データ (単語が 2 回表示される、単語が失われる、開始位置と比較して単語の方向が間違っている) ?
編集
この表現を使用して、他の多くの自然にインスパイアされたアルゴリズムを実装するため、「適切な」データ表現が必要です。後で私を傷つける可能性のあるその場しのぎは何もありません。
正直いい方法が思いつきません。私には多くの制限があるからです (おそらく、これについて考えすぎて、それらを乗り越えることができず、実際には存在しない可能性があります)。バイナリ表現が本当に欲しいのですが、それは不可能に思えます。