問題は、休み間隔を2週間程度とする、という仕様です。
言い換えると、短すぎても駄目だし、長すぎてきも駄目ということです。
ただ、このままでは、漠然しすぎていますね。
この実装は難しいですが、
以下を頑張って読んでいただくと、制約が書けるようになります。
もう少し具体的に考えるために、1ヶ月を4区間で、区切って考えます。
1 2 3 4
休 休 -Good!
休 休-Good!
もし、第1週目が、休みのときは、第3週目が休みであれば、仕様にマッチします。
同様に、第2週目が、休みのときは、第4週目が休みであればよいですね。
以上が、仕様上許される全てのパターンで、これ以外の休みパターン、
1 2 3 4
休 休 -NG Too Long
休休 -NG Too Short
休休 -NG Too Short
休休 -NG Too Short
は、すべて不可になります。
そうすると、どういう制約にすればよいでしょうか?
パターン1:1週目に一回かつ3週目に一回
パターン2: 2週目に一回かつ4週目に一回
制約: パターン1 OR パターン2
という制約を書けばよいことになります。そうすれば、パターン1または、パターン2どちらか、
または、両方の制約が満足されますから、約2週間間隔で2回以上のの休みが取れることになります。
正確には、約2週間の最小は、1週間で、最大は、3週間になりますが、あまり範囲を狭くしすぎると
「解がない」可能性が高まるので、とりあえず、この制約でやってみましょう。
<続く>
0 件のコメント:
コメントを投稿