3

大学の自動スケジュール作成用のアプリケーションを作成し、この遺伝的アルゴリズムに使用しています。しかし今、私は実現に関していくつかの問題に直面しました。

最初は、期間が1タイムスロット(タイムスロット= 1時間)のクラスがあり、それを単純に配列(スケジュールグリッドを表す:numberOfRooms * numberOfDays * numberOfTimeslotsの容量を持つ1-d配列)に配置できると想定しました。ミューテーションやクロスオーバーも問題なく実行できます。

しかし、私がアプリケーションを改善し、いくつかのタイムスロットの期間を持つクラスを持つことを許可したいことを知っています。ここに多くの問題があります:

1つのクラスオブジェクトを配列に入れて、クラスが占有する必要のあるすべてのスロット(複数の配列セル)(1つのオブジェクト-複数のセル)を埋めるにはどうすればよいですか?そして、それを配列に配置する方法に従って、突然変異とクロスオーバー操作をどのように実行できますか?前もって感謝します!私は本当にあなたの助けに感謝します!

4

1 に答える 1

3

良いルールは、等しいタイムスロットを持つクラスのみをクロスオーバーすることです。たとえば、2つのタイムスロットを使用するクラスと、1つのタイムスロットを使用する2つのクラスをクロスオーバーできます。

多くのタイムスロットの期間を持つクラスを表すために、最も簡単ですがトリッキーな方法は、タイムスロットごとに、タイムスロットが新しいクラスによって占有されているか、以前に開始されたクラスの継続であるかを通知するフラグを設定することです。交差するときは、そのフラグを監視して、クラスの一部を交差していないことを確認します。

もう1つの(より良い)方法は、より複雑なデータ構造を作成することですDailyRoomOccupation。このデータ構造には次のものが含まれます。

  • タイムスロットの数で表される、部屋の1日あたりの容量。
  • その部屋でその日に予定されているクラスの(二重リンクされた)リスト。
  • リスト内のクラスがタイムスロットに収まるかどうかを計算する関数。
  • DailyRoomOccupation等しい量のタイムスロットのみの交差を処理して、2つの異なるを交差させることを可能にする関数。
于 2012-04-12T19:28:05.700 に答える