スタートページJavaScriptライブラリ目次

スケジューリング関連 JavaScript関数ライブラリ
sch.js の利用解説書

ご利用にあたって

ジョブスケジューリングとは、複数のジョブ(、a、b、c・・・を複数の工程、X、Y、Z・・・で加工するとき、どのような順序で行えば、全体の処理時間を最小にできるかというような問題を取り扱う技法です。
フローショップ型 すべてのジョブが、X→Y→Zの順で処理するように作業順序が一定の場合
ジョブショップ型 個々のジョブの加工順序が指定されている場合
オープンショップ型 処理順序が指定されていない場合


ジョンソンの方法
  schJohnsonTrace(表示場所, 工程名, 部品名, 加工時間)
  rtn = schJohnson(工程名, 部品名, 加工時間)

工程が2個のときのフローショップ型ジョブスケジューリング手法です。全体の処理時間が同じで、順序が異なる複数の解が存在する場合もありますが、ジョンソンの方法では1つの解しか得られません。

次のステップで、最適解を求めます。
 ① 全体のなかで最も加工時間が短い作業を探す。
 ② それが、前工程側のジョブならは、そのジョブを最初に処理し、
   後工程側のジョブであれば最後に処理する。
 ③ 処理順序の決定したジョブを除く。
 ④ 順序の決定していないジョブが存在すれば①に戻り、すべてのジョブの順序が決定したら完了する。

ケース1

    var 工程名 = ["工程1", "工程2"];
    var 部品名 = [ "部品A", "部品B", "部品C", "部品D", "部品E"];
    var 加工時間 = [[ 4,        5,        7,        7,        3],
                    [ 7,        5,        4,        2,        6] ];

ケース2




ジャクソンの方法
  schJacksonTrace(表示場所, 工程名, 部品名, 加工順序, 加工時間)
  rtn = schJackson(工程名, 部品名, 加工順序, 加工時間)

   rtn("順序X")   rtn("順序X")   工程X(Y)で処理するk番目の部品番号
   rtn("X開始時刻") rtn("Y開始時刻") その部品加工の開始時刻
   rtn("X終了時刻") rtn("Y終了時刻") その部品加工の終了時刻

工程がXとYの2個のときのジョブショップ型ジョブスケジューリング手法です。次のステップで、最適解を求めます。

    ジョブを次の群に分ける。
       群X :Xだけのジョブ 下のケース1では c
       群Y :Yだけのジョブ      なし
       群XY:X→Yのジョブ      b,d
       群YX:Y→Xのジョブ      a,e
    群XYについて、ジョンソンの方法により順序づける。
       d→b
    群YXについて、ジョンソンの方法により順序づける。
    このとき、Y→Xなので、最小値がYのとき先頭、Xのとき最後にすることに注意すること!
       a→e
    Xでは、群XY→群X→群YX の順に並べる。
    群Xに複数のジョブがあるときは、このなかの順序は任意でよい。
       d→b→c→a→e
    Yでは、群YX→GY→GXY の順に並べる。
    GYに複数のジョブがあるときは、このなかの順序は任意でよい。
       a→e→d→b

全体の処理時間が同じで、順序が異なる複数の解が存在する場合もありますが、ジャクソンの方法では1つの解しか得られません。

ケース1

    var 工程名 = ["工程1", "工程2"];
    var 部品名 = [ "部品A", "部品B", "部品C", "部品D", "部品E"];
    var 加工順序 = ["yx",      "xy",     "x",      "xy",     "yx"];   // 注
    var 加工時間 = [[ 2,        2,        1,        4,        1],
                    [ 1,        1,        0,        3,        2] ];
   注:"xy" は X→Y , "x" は Xだけ の意味です。
     "xy", "XY", "XY" のいづれも使えます。
     使わない処理は、処理時間=0 にしてください。

ケース2

部品名 
加工順序
加工時間
加工時間