変数classes(〜100)、rooms(20)、terms(8)、およびweekdays(5)で構成される古典的なタイムテーブルの問題があります。
問題を単純化するために、以下に制約を減らします。
1日は9時間です。
一部のクラスは学生に必須であり、用語1、3、5、7(および2、4、6、8)の必須クラスは互いに重複してはなりません。
クラスの重みは時間で異なり、2時間のものもあれば、3時間のものもあります。
一部のクラスは特定の部屋で行う必要があります。
同じクラスで同時に2つの講義を行うことはできません。
logilabspython制約モジュールを使用します。また、変数とドメインを適切に選択すると、問題を解決するための時間が短縮されることを認識しています。問題は、これまで制約プログラミングを行ったことがなく、どこから何から始めればよいかを見つけるために問題を構築するのに苦労していることです。例えば:
「同じ部屋に2つのクラスがなく、同じ日にお互いの時間枠が重なることはありません」などの制約を設定できます。または、「同じ日に9時間以上予約できる部屋はない」から始めて、ソリューションドメインを減らして続行します。私は、最初の制約が他の制約よりも解決にはるかに長い時間がかかると見積もっています(試していませんでした)。しかし、それはまた(私が推測する)変数とソリューションドメインの変更またはより小さな問題の再構築を必要とします。私はすでに変数、ドメイン、間隔、実装などで少し迷っています。
簡単に言えば、問題を構築するためのいくつかのポインタ、ソリューションドメイン、変数の賢明な選択などが必要です。
ありがとう
アップデート
logilab-constraintパッケージを使用して、基本的なアプリケーションを作成し、それをgithubにアップロードしました