以前にこの質問をstackoverflowに投稿しましたが、オフトピックとして閉じられました。私はそれがここで生き残ることを望みます。
私のクライミングジムでは、ルートは時々再設定する必要があります。次の規則が適用されます。
- 私たちは、さまざまな量のさまざまな色で登りを保持しています。-セクターにルートを設定する場合、混乱を避けるために、そのセクターまたは近くのセクターに同じ色の他のルートを設定してはなりません。
- 白/灰色または赤/ピンクなど、一部の色の組み合わせは、セクターで避ける必要があります。
- 目標は、各セクターに4つのルートを設定することですが、4つが上記のルールに違反する場合は、それより少なくてもかまいません。
今までに2つの異なるアプローチを試しました。1つ目はSimulated Annealingで、ランダムなパターンの色(ただし、指定された色の重み)で壁を初期化し、各色の組み合わせの悪さを計算しました。この悪さは、1つのセクターとその近隣のセクターの組み合わせについても計算されました。各反復で、最悪のセクターからランダムに選択されたルートが、ランダムに選択された他のセクターからのルートと交換されました。これはある種の収束を示しましたが、結果は使用できませんでした(つまり、結果の状態には2色または3色のセクターが含まれていました)。
それから反対側から問題に取り組み、空の壁から始めました。今回は、すべての色に1つのセクターから隣接するセクターに減衰する濃度がありました。同様の色の濃度も増加しました。つまり、赤いルートは、セクターとその周辺のオレンジの濃度を増加させました。重み付けされたランダムな色のソース(バケット)により、壁の次の色が得られました。これは、この色の濃度が最も低いセクターに配置されました。濃度が特定のしきい値を超えた場合、色は追加されませんでした(ただし、バケットに戻されました)。結果の状態にダブルカラーが含まれていなかったため、これは部分的に成功しました。
だから:上記のルールを考えると、この問題を解決するための適切なアルゴリズムは何でしょうか?必要に応じて、情報を追加させていただきます。
編集1-詳細:
- 私のテストケースには15のセクターがあります。
- 各セクターには4つのルートが含まれている必要があります
- 実際のジムには平均50セクターの建物が3つあります
- 一部のセクターは柱の周りに配置され、一部は屋根で接続されています
- 約10種類のホールドカラーがあります
- セクターの高さは6(初心者セクション)から20メートル(13垂直+ 7屋根)の間で変化するため、ホールドの消費量は異なります。ただし、平均は約12で、これは一定と見なすことができます。
- 各色の量には限りがあり、量は等しくありません
- いくつかの色はより簡単で、いくつかはより困難です(つまり、どんな困難でも黄色のルートを作成できますが、子供のために非常に簡単なオレンジのルートを作成することはほとんど不可能です)
- 一部のセクターは「より簡単」なので、簡単な色を使用する必要があります(これはオプションです。ルートセッターは、広範囲で困難または簡単にすることができます)。
- セクター内または隣接するセクター内でどの色がうまく調和し、どの組み合わせがうまくいかないかを安全に判断できます。白と黒(コンボが悪い)など、いくつかの驚きがあります。ゴム(靴)またはチョーク(手)が残っていると、どちらも灰色になります。
- 一部の保持色は、紫/白(縞模様)のような組み合わせです。
編集2:遺伝的アルゴリズムに関するいくつかの質問
ParadisEOをダウンロードしてコンパイルし、IDE(Code :: Blocksを使用)でQuickStartサンプルをコンパイルしました。ParadisEOは、単一目的と多目的GAを備えた遺伝的アルゴリズムを提供します。GertVdEは、各セクターの適合度を計算し、すべてのセクターの適合度の合計を単一の目的として最大化することを提案しました。また、多目的GAを使用して、各セクターの適応度を最大化できますか?それは約50の目標になります。
また、私は賢明なクロスオーバー関数の定義に苦労しています。各色の最大量が固定されているため、交差すると違法な状態になる可能性があります。以前に与えられた最大量よりも多くを許可すると、パターン全体が、厄介な色が捨てられた「厄介な」組み合わせの繰り返しに収束する可能性があります。一方、最大に達するまで余分な色を捨てて、クロスオーバー機能を非保守的にすることもできます。
(私は遺伝的アルゴリズムに完全に新しいです)