2

MSSolverFoundationの実験に使用したい次の簡単な問題があります。

30日間、1日2人の労働者が必要なスケジュールがあります。次の制約を尊重する必要があります。

  • 2日続けて働く人はいないはずです。
  • 特別な例外が適用されない限り、人々は週に一度だけ働くべきです。
  • 週末しか働けない人もいます。
  • 平日しか働けない人もいます。

モデルにデータを入力するためにC#を使用する予定ですが、モデリングを開始するためのサポートが必要です。このタイプの問題に対処するための決定、パラメーター、および制約を設定する方法がわかりません。

更新: ire-and-cursesは良いスタートを切っていますが、フレームワークを使用してこれらの制約を表現するためのより宣言的な方法があることを想像する必要があります。この構築を支援できるMSFに精通している人はいますか?

4

1 に答える 1

1

人がいる場合は、その人が特定の日に勤務しているかどうかを示す 2 進数の整数パラメーターnを定義する必要があります。30n

P<xx>D<yy> == 1 => Person <xx> works on day <yy>
P<xx>D<yy> == 0 => Person <xx> does not work on day <yy>

次に、2 日連続で作業しないようにするための制約が必要です。これが29n制約になります。

P<xx>D<yy> + P<xx>D<yy+1> <= 1

次に、週に 1 回だけ機能するように制約が必要です。これは、最初の 1 週間は次のようになり、次の 3 週間も同様になります。

P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 + P<xx>D05 + P<xx>D06 <= 1

最後の週はちょうど次になります。

P<xx>D28 + P<xx>D29 <= 1

5nこれにより、別の制約が生じます。次に、平日のみの制約を追加します

P<xx>D05 + P<xx>D06 == 0
P<xx>D12 + P<xx>D13 == 0
P<xx>D19 + P<xx>D20 == 0
P<xx>D26 + P<xx>D27 == 0

そして週末のみ

P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 == 0
P<xx>D07 + P<xx>D08 + P<xx>D09 + P<xx>D10 + P<xx>D11 == 0
P<xx>D14 + P<xx>D15 + P<xx>D16 + P<xx>D17 + P<xx>D18 == 0
P<xx>D21 + P<xx>D22 + P<xx>D23 + P<xx>D24 + P<xx>D25 == 0
P<xx>D28 + P<xx>D29 == 0

最後にターゲット関数を追加します。

于 2009-09-08T17:16:16.357 に答える