0

遺伝的アルゴリズム(GA)を使用して時刻表を生成するための解決策を探しています。私のシナリオでは、6 日間のタイムテーブルを表示しています。月曜日から土曜日。

1日を講義数・時間帯に分けています。

教師、学生グループ(セット)、および講義で構成されるクラスを表現しようとしました。私は、可能な教師、可能な科目、可能な学生グループのプールを維持しています。そして、それらをこれらのクラスにランダムに割り当てます。

したがって、クラスはこれらすべての参照のコレクションです。そのため、タイムスロットごとに Class オブジェクト表現が含まれています。同様に、1 日は講義の数で構成されています クラス オブジェクトの表現。など、1 週間は 6 日間です。

私が持っている可能な制約のセットは次のとおりです。

1. 教師は 1 つの時間枠で 1 つの講義しか受講できない
2. 教師は一連の科目を受講できる (有限)
3. 教師は特定の日に不在である
ことができる 4. 教師は特定の時間帯で不在であることができる

また、最近含まれる可能性のあるその他の制約。

これらの制約を表現したり、これらの制約を処理したりする方法について、誰かが私にアイデアを与えることができますか? 制約に応じてフィットネススコアを計算する方法は?

編集:実装はこちら https://github.com/shridattz/dynamicTimeTable

4

2 に答える 2

3

アップデート:

コードはここで見つけることができます

github.com/shridattz/dynamicTimeTable

私の TimeTable Generation では、A timetable オブジェクトを使用しました。このオブジェクトは、ClassRoom オブジェクトと、各オブジェクトのタイムテーブル スケジュールと、タイムテーブルのフィットネス スコアで構成されます。フィットネス スコアは、さまざまなクラスの他のスケジュールに対してタイムテーブルが衝突する回数に対応します。

クラスルーム オブジェクトは週オブジェクトで構成されます。週オブジェクトは日で構成されます。Days はタイムスロットで構成されます。TimeSlotには、科目、講義に参加する学生グループ、科目を担当する教授が関連付けられた講義があります

このようにして、時刻表を染色体として表現しました。

制約についてさらに説明すると、私は複合設計パターンを使用しました。これにより、多くの制約を追加または削除するための拡張性が向上します。

各制約クラスでは、私の質問で指定された条件が 2 つの timetable オブジェクト間でチェックされます。条件が満たされる場合、つまり干渉が存在する場合、スコアは 1 ずつ増加します。

このようにして、スコアが最小のタイムテーブルが最高になります。

于 2012-05-26T04:30:21.583 に答える
-1

この問題については、効果的な解決策はありませ。あなたも遺伝的アルゴリズムを使っているので、あなたもそれを手に入れたと思います。私は数ヶ月前に自分で遺伝的アルゴリズムのフレームワークを書きました。
私はあなたが逃したと思います:すべてのクラスには週ごとのレッスンのリストがあり、一度に1つのレッスンしか行うことができません。これで、タイムスロットの教師とクラスをランダムに組み合わせることができます。
適応度関数では、クラスに1週間のすべてのレッスンがある場合、大きなプラスになります。大きなマイナスは、教師が同じような負荷をかけていなかった場合です(たとえば、教師aは週に2回のレッスンを行い、教師bは12回のレッスンを行います)。これは、教師が週に20時間だけ働かなければならない場合に、安心できるかもしれません(%を使用)。
全体として、それはそれほど些細なことではなく、このトピックを手伝ってくれる経験豊富な同僚やメンターを探すかもし​​れません。
より具体的なアドバイスが必要な場合は、質問を指定してください。

于 2012-05-09T10:01:58.327 に答える