見出し画像

スケジューリング問題を解く⑤-1

もう一度、ゴールを思い出します。
 ・工場で作らねばならない2種類の製品を間に合わせる。
 ・納期     A:明日 B:明々後日(指定日の夜に出来てればいい)
 ・着手可能日  A:今日  B:今日 (材料が来るのが遅い時がある)
 ・必要工数   A:1人日 B:2人日(人日=◯人が✕日かかるの意)
 ・作業者は1人しかいない。
 ・いつ、どの順番で着手すれば間に合うか?

まず、Mathematicaでグラフを作成します。
解きたい問題が難しいので、このままでは解けませんがまずは
ネットワーク流を確認します。

品目Aは1人日なので工程A→工程BはT=1 後に(T=0→T=1へ)、
品目Bは2人日なので工程A→工程BはT=2 後に(T=0→T=2へ)
それぞれ繋がります。
(問題をもっと簡単にしておけば良かったが、後悔先立たず。
 しかし、実際の問題はもっと複雑怪奇ですからね)

左側が品目A、Tを一目盛りずらして右側が品目Bです

実際にはグラフ描画に使ったコードは書き直すことになりますが、
このグラフを見ながら制約を書き出します。
 ・着手可能日  A:今日  B:今日
ですから  SA0_A + SA1_A + SA2_A + SA3_A  = 1
      SA0_B + SA1_B + SA2_B + SA3_B  = 1

 ・納期     A:明日  B:明々後日
 ・必要工数   A:1人日 B:2人日
ですから  B1G_A = 1、B1G_B + B2G_B + B3G_B =1

この状態で、更に A→Bの縦の流れは左の品目と右の品目とで
同じ作業者を共有するので、
  左側の縦矢印の流れの2日分+右側の縦矢印の流れの1日分≦1
みたいにしないとなりません。。。複雑ですね。
ここまでの制約を追加しようとすると、残念ながらMathematicaの
グラフ理論の機能を使っては書けません。

次回⑤-2では、Mathematicaで実際に書いてみましょう…
ゴリゴリです。


この記事が気に入ったらサポートをしてみませんか?