OptHub

機械加工スケジューリング問題(多目的)

2023年 進化計算コンペ 多目的部門の問題
機械加工スケジューリング問題(多目的)

Input / Output

When submitting a solution to a match, please make sure to meet the following conditions.

入力フォーマット

以下のJSONオブジェクトを入力してください.

キー 説明
schedule list[int] 各作業(取り付け・取り外し)の日付割り当て([ワーク1取り付け日, ワーク1取り外し日, ワーク2取り付け日, ワーク2取り外し日, ...])
weights list[float] 目的関数各項の重み([ w1w_1 , w2w_2 , w3w_3 , w4w_4 ] ), 0wi10 \le w_i \le 1
timeout int サーバーでの計算時間(s)
"schedule"に関する注意点

一部のワークは複数回加工が必要なものがあります.この場合の実際の作業は取り付け,加工,取り外しを繰り返します.
送信する解は,
[ワーク1の1回目の取り付け日, ワーク1の1回目の取り外し日, ワーク1の2回目の取り付け日, ワーク1の2回目の取り外し日, ワーク2の1回目の取り付け日, ワーク2の1回目の取り外し日, ...]
のように,各ワークの作業の日付割り当てを全て設定した後に,次のワークの作業の日付割り当てを設定してください.

正しい例
{
    "schedule": [1, 1, 2, 3, 2, 2,...],
    "weights": [1.0, 0.5, 1.0, 0.9],
    "timeout": 600
}

scheduleの配列長は問題ごとに異なります.全てのワークの取り付け・取り外し作業の日付割り当てを入力してください.範囲は1〜9の整数です.

weightsの配列長は4です.0.0以上1.0以下の小数で設定してください.

timeoutはサーバーのSCIPによる計算時間の上限値の設定です.秒数を整数で入力してください.分や時間では入力できません.

誤った例
{
    "schedule": [1.3, 1.0, 2.9, 3.5, 2.1, 2.4,...],
    "weights": [1.0, 0.5, 1.0, 0.9],
    "timeout": 600.7
}

weights以外の数値に小数を入力してはいけません.

{
    "schedule": 1, 1, 2, 3, 2, 2,...,
    "weights": 1.0, 0.5, 1.0, 0.9,
    "timeout": 600
}

scheduleとwegithの配列は[]で囲ってください.

{
    'schedule': [1, 1, 2, 3, 2, 2,...],
    'weights': [1.0, 0.5, 1.0, 0.9],
    'timeout': 600
}

シングルクォーテーションは使えません.ダブルクォーテーションで囲ってください.

{
    "schedule": [1, 1, 2, 3, 2, 2,...],
    "weights": [1.0, 0.5, 1.0, 0.9],
    "timeout": "600"
}

timeoutの値をクォテーションで囲わないでください.

{
    "schedule": [1, 1, 2, 3, 2, 2,...],
    "weights": [1.0, 0.5, 1.0, 0.9],
    "timeout": 600,
}

末尾にコンマを付けてはいけません.

出力フォーマット

解を受け取ると,サーバーは評価値の計算を行い,以下のJSONオブジェクトを返します.

キー 説明
objective list[float] | null 評価値(目的関数値, (f1,f2,f3,f4)\left(f_1,\, f_2,\, f_3,\, f_4\right) の4目的)解が実行不能ならばnull
constraint null 未使用
error str エラーが発生した場合のエラー文.入力された解のフォーマットに問題がある場合などに表示される.
info dict[str, float]
  • exe_time: float
    評価値の計算にかかった時間(サーバーのSCIPでの計算時間)
{
    "objective": [-72000.0, 0.0, 0.0, 0.0],
    "constraint": null,
    "error": "エラー文",
    "info": {
        "exe_time": 0.77885173400864,
    }
}

送信された解が実行不可能だった場合,objectivenullとなります.ただし,エラー扱いではなくサーバーの計算時間と評価回数は消費されます.

練習問題MOP-Practice

スケジュールの開始前の時点でパレットにはワークが取り付けられていません.一方,治具はあらかじめ取り付けられています.パレットは12個あり,取り付けられている治具は以下の表のとおりです.

パレットID 治具ID
1 3000
2 3000
3 4000
4 4000
5 4000
6 5000
7 5000
8 6000
9 6000
10 6000
11 8000
12 8000

加工するワークは以下の表のとおりです.

ワークID ワークの品番 取付作業時間[m] 加工作業時間[m] 取外作業時間[m] 使用治具ID 着手可能日[日目] 納期[日目]
1 1 15 65 15 4000 1 5
2 1 15 65 15 4000 1 5
3 2 15 90 15 8000 1 5
4 2 15 90 15 8000 1 5
5 3 37 72 8 9000 1 5
6 3 37 72 8 9000 1 5
7 4 15 14 15 3000 1 5
8 4 15 14 15 3000 1 5

取り付けと取り外し作業の合計は16なので,送信するscheduleの配列長は16となります.

各治具の数は以下のとおりです.パレットに最初から取り付けられている分を含みます.

治具ID 個数
1000 -
2000 -
3000 2
4000 3
5000 2
6000 5
7000 -
8000 2
9000 1
10000 -

問題MOP

スケジュールの開始前の時点でパレットにはワークが取り付けられていません.一方,治具はあらかじめ取り付けられています.パレットは12個あり,取り付けられている治具は以下の表のとおりです.

パレットID 治具ID
1 2000
2 2000
3 3000
4 4000
5 4000
6 5000
7 5000
8 6000
9 6000
10 7000
11 7000
12 8000

加工するワークは以下の表のとおりです.

ワークID ワークの品番 取付作業時間1[m] 加工作業時間1[m] 取外作業時間1[m] 使用治具1ID 取付作業時間2[m] 加工作業時間2[m] 取外作業時間2[m] 使用治具2ID 取付作業時間3[m] 加工作業時間3[m] 取外作業時間3[m] 使用治具3ID 着手可能日[日目] 納期[日目]
1 1 12 78 2 1000 - - - - - - - - 1 5
2 2 15 72 15 9000 - - - - - - - - 1 3
3 3 15 90 15 8000 - - - - - - - - 1 5
4 4 11 72 11 9000 - - - - - - - - 1 3
5 5 22 117 22 10000 - - - - - - - - 1 4
6 5 22 117 22 10000 - - - - - - - - 1 4
7 6 13 78 13 3000 13 60 13 5000 - - - - 1 5
8 7 15 90 15 3000 15 60 10 6000 - - - - 2 5
9 7 15 90 15 3000 15 60 10 6000 - - - - 2 5
10 8 15 144 15 4000 14 48 14 6000 - - - - 1 5
11 9 14 108 14 8000 15 96 15 7000 15 114 15 2000 1 5
12 10 12 108 12 8000 7 96 7 6000 10 144 10 2000 1 5

取り付けと取り外し作業の合計は40なので,送信するscheduleの配列長は40となります.

各治具の数は以下のとおりです.パレットに最初から取り付けられている分を含みます.

治具ID 個数
1000 1
2000 2
3000 3
4000 2
5000 2
6000 3
7000 2
8000 2
9000 2
10000 1