質問

変数クラス(〜100)、部屋(20)、用語(8)、および平日(5)で構成される古典的な時刻表現の問題があります。

問題を単純にするために、以下は制約を減らします。

1日は9時間です。

一部のクラスは学生に必須であり、1,3,5,7(および2,4,6,8の場合)の用語の必須クラスは、互いに重複してはなりません。

クラスの重みは異なり、時間は2時間で、一部は3時間です。

一部のクラスは特定の部屋にある必要があります。

同じクラスで同時に2つの講義を行うことはできません。

Logilabs Python Constraintモジュールを使用しています。そして、変数とドメインを賢く選択すると、問題を解決するための時間が短くなることを知っています。問題は、私が以前に制約プログラミングを行ったことがなく、問題を築くのに苦労して、どこで何を最初に何をするべきかを見つけるのに苦労していることです。例えば:

「同じ部屋の2つのクラスがない、同じ日がお互いのタイムスロットを重ねることができる」などの制約を設定できます。または、「同じ日に9時間以上予約できない部屋はない」から始めて、ソリューションドメインを削減します。私は、最初の制約が他の制約よりも解決するのにはるかに時間がかかると推定します(試みませんでした)。しかし、変数とソリューションドメインの変更、またはより小さな問題の再構築も必要です。私はすでに変数、ドメイン、間隔、実装などで少し失われています。

簡単に言えば、問題を構築するためのいくつかのポインター、ソリューションドメイン、賢明に変数の選択などが必要です。

ありがとう

アップデート

logilab-constraintパッケージを使用して、基本的なアプリケーションを作成し、にアップロードしました github

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top