GA を使用して、特定の条件 (長さ、ターン数など) を満たす A から B への最適なパスを決定したい。
パスの例: 上 4、左 8、下 3、右 3、下 1、左 10、上 4、左 1、上 3
問題は、特にパスが可変長であるため、このような情報を GA で使用するのに適した方法で表現する良い方法を本当に知らないことです。
このようなことを行う方法を知っている人はいますか?
GA を使用して、特定の条件 (長さ、ターン数など) を満たす A から B への最適なパスを決定したい。
パスの例: 上 4、左 8、下 3、右 3、下 1、左 10、上 4、左 1、上 3
問題は、特にパスが可変長であるため、このような情報を GA で使用するのに適した方法で表現する良い方法を本当に知らないことです。
このようなことを行う方法を知っている人はいますか?
A* 最適化アルゴリズム のようなものを本当に使用したいようです。これは、パス検索に一般的に (効果的に) 使用されます。適切なソリューションを取得するために、任意のヒューリスティック関数を指定できます。
GA は可変長の染色体を扱うことができます。実際の個人は非常に複雑な場合があります。たとえば、いくつかの固定長ビット、文字列 (固定長ではない)、および共役複素数のペアのセットを含めることができます。さらに、共役複素数のペアは、常にいくつかの条件を維持する必要があります。それは可能ですが、個体が複雑になればなるほど、遺伝子操作も複雑になります (交差、突然変異など)。おそらく、Fitness 関数にはさらに数行のコードが必要になるでしょう。しかし、それはまだ可能です。
おそらく、数値コード化されたパス表現を選択することもできますが、Osama ALASSIRYが提案したようにコード化された例でも実行できます: UUUULLLLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU。
クロスオーバーの場合:
明確にするために:
親 A: UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU親
B: DRRRRLULUDDDR
0
から遺伝子をカウントすると仮定して、ランダムペアペア A(4,18)、ペア B(0,5) を生成
します。
UUUU DRRRRL LLLLLLLLLLUUUULUUU LLLLLLLLDDDRRRD ULUDDDRが得られ
ました。カットの 1 つのポイントを使用することも、ポイントを掛けることもできます。
突然変異に関して:
あなたは突然変異をしただけです。複数の遺伝子を変異させることもできます。
しかし、私が言ったように、他の可能性があります。
U、D、L、R....を使用します。
したがって、「上 4、左 8、下 3、右 3、下 1、左 10、上 4、左 1、上 3」は次のようになります。
うううううううううううううううううううう
このような糸を繁殖させる方がはるかに簡単です。
A (15 文字) と B (3 文字) の場合、A と B の間の繁殖関数は次のようになります。
私には、これは巡回セールスマンの問題に非常に似ているように思えますが、そのページには有用な情報が含まれていますか?