1

学校でのサイドプロジェクトのウェブサイトを作成しています。このウェブサイトでは、生徒が受講する必要のあるクラスに参加し、クラスを希望する日と希望しない日、クラスを受講できない場合と希望しない場合があります。基本はクラスがあり、各クラスには、学生が選択できるさまざまな教授がいるさまざまな時間に多くのセクションがあります。新入生レベルのクラスでは、クラスごとに30を超える異なるセクションがあります。私はmysqlデータベースにクラスとセクションがあり、phpでコーディングしています。

これまでのところ動作していますが、もっと速くしたいと思っています。私は他のスケジューリングの問題について読んでいますが、私がしていることの詳細を探しています。これは最初からスケジュールを作成しているわけではありません。利用可能なセクションからスケジュールを作成し、学生の入力に基づいてランク付けします。現在、いくつかの可能なセクションでは、高速に実行されます。しかし、可能なスケジュールが約300,000に達すると、すべてを比較してランク付けするのに約30秒かかります。スケジュールの生成方法を変更して改善してきましたが、もっと速くしたいです。ブルートフォース生成からツリーベースの方法を使用するように切り替えました。

私は宿題の助けを求めたり、誰かが私のためにこれをしてくれることを求めているのではありません。私は、私が学ぶことができる既存の問題とアルゴリズムで正しい方向に向けられたいだけです。

4

3 に答える 3

1

エイト クイーンズ パズルを覚えていますか? そうでない場合は、まず問題を解決してから、スケジューリング タスクに戻ってください。

あなたはすでに総当たりからツリー構造に移行しています。では、 branch and boundの時間です。「良いスケジュール」が何を意味するにせよ、170000 は多すぎます — 木を十分に剪定していません。生徒が非常に少ないクラスを受講し、非常に柔軟でない限り、生徒ごとに 20 ~ 50 を超える本当に良いスケジュールがあるとは思いません。

于 2010-03-11T14:27:46.717 に答える
1

タブー検索やシミュレーテッド アニーリングなどのメタヒューリスティックを試してください。ブルートフォースとブランチアンドバウンドは十分にスケールアップしません。

ITC2007 で定義されている、Drools Planner での私のカリキュラム コースの例を見てください。おそらく、ユースケースの高度な形式です(gui/dbは数えません)。

于 2011-01-11T15:10:43.840 に答える
-1

これを見てください。それはまさにあなたが望むものではないかもしれませんが、いくつかのデザインのアイデアを得ることができます.

于 2010-03-11T07:06:30.170 に答える