2022年12月28日水曜日

1フェーズ勤務表

 フェーズが1しかないプロジェクトは、シフト勤務表としても実現が可能です。

しかし、シフト数が25を超えるような状態は、求解速度の観点から好ましくありません。

例えば、工場の場合、多くの工程があります。一人のスタッフに着目した場合、全ての工程を担当できることはなく、担当可能な工程は限られていると思われます。そのような性質を持つ場合は、シフトではなくタスクとして実装した方が、求解速度は上がります。

(シフトは、内部的には、全てのスタッフが全てのシフト状態を保持します。シフト数が大きくなると、指数関数的にメモリが大きくなりキャッシュヒット率が低下することが懸念されます。)

スキル定義の例

以下の例は、工場の担当可能な工程作業を表しています。このように、多くのタスクがあるけれども、一人のスタッフが担当可能なタスクは数個に限定される場合は、シフトとして実装するよりもタスクとして実装した方が効果的です。


サンプルは、充填プロジェクトです。

以前は、集積、供給、包装をシフトとして持っていたものを1フェーズタスク勤務表に書き直したプロジェクトになります。 

1勤が、日勤で、2勤が夜勤になります。1勤務を、勤務1、供給、集積、包装、目視のタスクに分解定義しています。充填プロジェクトでのタスク数は少ないので、前述の効果はありませんが、タスクの変動(目視検査等の追加)に対しては、強い構造となります。

下は、シフト解とタスク解になります。シフトの1勤だけに、タスク群が割り当てられているのが分かります。



2022年12月26日月曜日

タスク勤務表とは?

 

1日のシフトが複数の時間区分(以下フェーズと呼称します)、その時間区分毎に、一人のスタッフに一つの仕事(以下タスクと呼称します)を割り当てるタイプの勤務表をいいます。フェーズ数は、いくつでも自由に定義することができます。

1フェーズ勤務表



2フェーズ勤務表の例


3フェーズ勤務表の例


4フェーズ勤務表の例

6フェーズ勤務表の例


タスク勤務表では、シフト解とタスク解、二つの解が出力されます。

シフト解は、シフトに対する割り当ての答えであり、一日に一つのラベルで出力されます。

 

6フェーズのシフト解の例


シフト解と、タスク解は、右クリック、ビューの切り替えにより、相互に行き来することが出来ます。

シフトは、予定として、既に決まっている場合もあります。その場合は、

シフト予定入力に記述します。


この場合、シフト解は、シフト予定入力そのものになりますから、解として意味があるのはタスク解の方のみです。

シフト勤務表との差異を下表にまとめます。

 

シフト勤務表

タスク勤務表

シフト解のみ

シフト解とタスク解

予定

シフト 予定入力のみ

シフト 予定入力とタスク予定入力

列最小単位

日(Day

フェーズ

シフト

一日あたり一個

1日あたり一個

タスク

なし

あり(1フェーズあたり1個)

 


2022年12月24日土曜日

ハード列基数制約ソフト化オプション廃止

 次のリリースで、オプションを廃止します。動作としては、常にDisableの状態に固定します。

ハードConflict解析の邪魔となることが多いので止めることにしました。

<Task集合のNot演算>

これも弊害が多く、NoTaskVarに限定することにしました。

<制約部の形態動作が少し変化します>

殆ど気づかないとは思いますが、他制約をいじって戻ってきた場合に、設定していない制約は、消えてしまうことがあります。今までと、ちょっと違う動きとなります。

<タスクチュートリアル変更>

大幅に見直してチュートリアル変更を予定しています。




2022年12月13日火曜日

python3 制約プログラミングマニュアル更新

機能追加等を反映していなかったので
更新しました。
マニュアル更新に伴い、サンプルも更新しました。現在はGithubのみの適用です。