s="週あたりの勤務回数設定"+str(week)+' '+"person"+str(person)
sc3.AddSoft(sc3.SeqError(min,max,2,VList),s,7)
SeqErrorの中身はとりあえず無視して、AddSoftの中身です。
s=は、エラー解析表示用のための文字列です。ハードエラーが出て、その原因表示のときに使われるのみです。空白行でもよいのですが、ハードエラー時に何も表示されなくて手がかりが無くなってしまうので、
付加しています。
sc3.AddSoft(sc3.SeqError(..),s,7)
次に、7ですが、これは、ソフトレベルで、求解画面で、言語:7となっている筈です。
つまり、上記文は、「ソフトレベル7のソフト制約を実行しなさい、」という意味になります。
次に、sc3.SeqErrorの意味ですが、アドバンストユーザマニュアル、エラー許容量の設定が、対応するGUIの説明になります。(GUIの設定ですが、エンジン内部では、SeqErrorが動いています。)
SeqError(最小値、最大値、エラー許容量、対象集合)
となっています。たとえば、min=6,max=6, エラー許容量=2だと、min-2<==x<=max+2となって、
ソフト制約の範囲は、4-8までに制約されます。言い換えると暗黙のハード制約
4<=x<=8
が制約として入っているということになります。これ以上は、いくらなんでも許容できない、というときのリミッタとすることがその目的です。
で、私が作成するプロジェクトでは、この辺の設定を大体3位に設定していることが多いと思いますが、
これは、もちろんその制約毎に相応しい値が存在すると思います。これでエラーが出た場合は、調整が必要になる場合もあります。
エラーが出た場合は、見直して、たとえば、上記の場合、
エラー許容量を
2→4
とすれば、
2<=x<=10
に拡大されます。この範囲であれば、ソフト制約として作用し、6からの偏差が目的関数値に加算されます。
しかし、xが1以下または、11以上しかとり得ないときは、ハードエラーとして報告されます。
0 件のコメント:
コメントを投稿