私は大学のスケジューリング問題に取り組んでおり、これには単純な遺伝的アルゴリズムを使用しています。実際には、それはうまく機能し、0%から90%(約)まで1時間の目的関数値を最適化します。しかし、その後、プロセスは劇的に遅くなり、最良の解決策を得るのに数日かかります。他のアルゴとジェネティックアルゴを混ぜるのが合理的であるという論文をたくさん見ました。どのアルゴリズムを遺伝的アルゴリズムと混合できるか、そしてこのアルゴリズムをどのように適用して解決プロセスをスピードアップできるかについて、アドバイスをお願いします。主な問題は、このような複雑な構造の問題にヒューリスティックをどのように適用できるかということです。たとえば、貪欲なヒューリスティックなど、そこでどのように適用できるかわかりません。
よろしくお願いします!本当にあなたの助けに感謝します!
問題の説明:
私は持っています:
- ScheduleSlotオブジェクトで埋められた配列
- レッスンオブジェクトで埋められた配列
そうです:
- スタンダート2点クロスオーバー
- 突然変異(ランダムなレッスンをランダムな位置に移動する)
- 大まかな選択(次の母集団に対してn人の最良の個人のみを選択)
@Dougalと@izomorphiusの追加情報:
私は大学のスケジュールを作成しようとしています。これにより、グループや教授向けのレッスン、重複、地理的に分散したレッスンの間に休憩がなくなります。
適応度関数は本当に単純です:fitness = -1000 * numberOfOverlaps-1000 * numberOfDistrebutedLessons-20*numberOfBreaks。(またはそのようなもので、変数の前の係数を単純に変更できます)
非常に最初に、ランダムな部屋、時間、曜日にレッスンを配置するだけで個人を生成します。
上記のように、突然変異とクロスオーバーは本当に些細なことです。
- クロスオーバー-親のスケジュールを取得し、クロスオーバーのポイントと範囲をランダムに選択し、親のスケジュールの一部を交換するだけで、2つの子のスケジュールが生成されます。
- 突然変異-子のスケジュールを取り、n個のランダムなレッスンをランダムな位置に移動します。