スケジューリング問題を解く⑤-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:今日 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で実際に書いてみましょう…
ゴリゴリです。