{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# PCB Manufacturing Scheduling\n",
"\n",
"このサンプルでは、Printed Circuit Board(PCB) の生産スケジュール問題を取り扱います。\n",
"\n",
"## 問題設定\n",
"\n",
"ここでは PCB には挿入実装と表面実装の部品が存在し、それぞれ別工程で実装することを考えます。生産工程は下記のように考えます。\n",
"\n",
"- 表面実装工程: 表面実装のはんだ付け(マウンタ)\n",
"- 挿入実装工程: 挿入実装のはんだ付け(卓上型はんだ付けロボット)\n",
"- 検査工程: 部品の検査\n",
"\n",
"一つの PCB の生産は表面実装工程、挿入実装工程、検査工程の 3 つの工程で完成されます。表面実装工程では一つのマウンタで実装され、挿入実装工程は PCB ごとに決められた数の卓上はんだ付けロボットで実装され、最後に検査工程で PCB ごとに決められた検査手順を行います。\n",
"\n",
"また、挿入実装工程と検査工程はそれぞれの工程を開始したら中断することができないとします。\n",
"\n",
"### 表面実装工程\n",
"\n",
"表面実装工程では、表面実装のはんだ付けを行うマウンタが 3 つ(マウンタ A, マウンタ B、マウンタ C)あるとします。\n",
"それぞれのマウンタは、PCB を一つずつ実装することができます。\n",
"\n",
"### 挿入実装工程\n",
"\n",
"挿入実装工程では、卓上型はんだ付けロボットが 6 つ(卓ロボ A, 卓ロボ B, 卓ロボ C, 卓ロボ D, 卓ロボ E, 卓ロボ F)があるとします。各 PCB は決められた複数の卓ロボで決められた順序で実装されますが、一度実装を始めた場合は、挿入実装工程を完了する必要があります。\n",
"\n",
"### 検査工程\n",
"\n",
"検査工程では、PCB ごとに決められた検査手順を行います。検査工程は、PCB ごとに決められた手順を行う検査手順 1,2,3,4 があり、検査工程は一度開始したら中断することができません。また検査工程ではリソースとして、作業員 1 人と PCB ごとに決められた検査治具が必要です。また同じ作業員が一貫して検査工程を行うほうが効率がよいとして、作業員の入れ替えにはコストがかかるとします。\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from amplify_sched import *\n",
"import itertools\n",
"import pandas as pd\n",
"import random\n",
"\n",
"num_operator = 3\n",
"num_pcb = 15\n",
"jig_list1 = [\"治具{}\".format(i) for i in range(1, 4)]\n",
"jig_list2 = [\"治具{}\".format(i) for i in range(4, 7)]\n",
"jig_list3 = [\"治具{}\".format(i) for i in range(7, 10)]\n",
"jig_list4 = [\"治具{}\".format(i) for i in range(10, 15)]\n",
"jig_capacity = 300\n",
"mounters = [\"マウンタA\", \"マウンタB\", \"マウンタC\"]\n",
"takurobos = [\"卓ロボA\", \"卓ロボB\", \"卓ロボC\", \"卓ロボD\", \"卓ロボE\", \"卓ロボF\"]\n",
"operators = [\"従業員A\", \"従業員B\", \"従業員C\"]\n",
"checks = [\"検査手順1\", \"検査手順2\", \"検査手順3\", \"検査手順4\"]\n",
"operator_change_time = 100\n",
"d = {\n",
" \"PCB\": [],\n",
" \"マウンタA\": [],\n",
" \"マウンタB\": [],\n",
" \"マウンタC\": [],\n",
" \"卓ロボA\": [],\n",
" \"卓ロボB\": [],\n",
" \"卓ロボC\": [],\n",
" \"卓ロボD\": [],\n",
" \"卓ロボE\": [],\n",
" \"卓ロボF\": [],\n",
" \"検査手順1\": [],\n",
" \"検査手順2\": [],\n",
" \"検査手順3\": [],\n",
" \"検査手順4\": [],\n",
" \"検査治具1\": [],\n",
" \"検査治具2\": [],\n",
" \"検査治具3\": [],\n",
" \"検査治具4\": [],\n",
"}\n",
"cols = pd.MultiIndex.from_tuples(\n",
" [\n",
" (\"表面実装工程\", \"マウンタA\"),\n",
" (\"表面実装工程\", \"マウンタB\"),\n",
" (\"表面実装工程\", \"マウンタC\"),\n",
" (\"挿入実装工程\", \"卓ロボA\"),\n",
" (\"挿入実装工程\", \"卓ロボB\"),\n",
" (\"挿入実装工程\", \"卓ロボC\"),\n",
" (\"挿入実装工程\", \"卓ロボD\"),\n",
" (\"挿入実装工程\", \"卓ロボE\"),\n",
" (\"挿入実装工程\", \"卓ロボF\"),\n",
" (\"検査手順1\", \"従業員A\"),\n",
" (\"検査手順1\", \"従業員B\"),\n",
" (\"検査手順1\", \"従業員C\"),\n",
" (\"検査手順2\", \"従業員A\"),\n",
" (\"検査手順2\", \"従業員B\"),\n",
" (\"検査手順2\", \"従業員C\"),\n",
" (\"検査手順3\", \"従業員A\"),\n",
" (\"検査手順3\", \"従業員B\"),\n",
" (\"検査手順3\", \"従業員C\"),\n",
" (\"検査手順4\", \"従業員A\"),\n",
" (\"検査手順4\", \"従業員B\"),\n",
" (\"検査手順4\", \"従業員C\"),\n",
" (\"治具\", \"検査手順1\"),\n",
" (\"治具\", \"検査手順2\"),\n",
" (\"治具\", \"検査手順3\"),\n",
" (\"治具\", \"検査手順4\"),\n",
" ]\n",
")\n",
"index = pd.Index([\"PCB{}\".format(i + 1) for i in range(num_pcb)], name=\"PCB\")\n",
"data = []\n",
"for i in range(num_pcb):\n",
" d = []\n",
" d.append(random.randint(10, 30)) # マウンタA\n",
" d.append(random.randint(10, 30)) # マウンタB\n",
" d.append(random.randint(10, 30)) # マウンタC\n",
" d.append(random.randint(0, 30)) # 卓ロボA\n",
" d.append(random.randint(0, 30)) # 卓ロボB\n",
" d.append(random.randint(0, 30)) # 卓ロボC\n",
" d.append(random.randint(0, 30)) # 卓ロボD\n",
" d.append(random.randint(0, 30)) # 卓ロボE\n",
" d.append(random.randint(0, 30)) # 卓ロボF\n",
" d.append(random.randint(10, 30)) # 検査手順1: 従業員A\n",
" d.append(random.randint(10, 30)) # 検査手順1: 従業員B\n",
" d.append(random.randint(10, 30)) # 検査手順1: 従業員C\n",
" d.append(random.randint(10, 30)) # 検査手順2: 従業員A\n",
" d.append(random.randint(10, 30)) # 検査手順2: 従業員B\n",
" d.append(random.randint(10, 30)) # 検査手順2: 従業員C\n",
" d.append(random.randint(10, 30)) # 検査手順3: 従業員A\n",
" d.append(random.randint(10, 30)) # 検査手順3: 従業員B\n",
" d.append(random.randint(10, 30)) # 検査手順3: 従業員C\n",
" d.append(random.randint(10, 30)) # 検査手順4: 従業員A\n",
" d.append(random.randint(10, 30)) # 検査手順4: 従業員B\n",
" d.append(random.randint(10, 30)) # 検査手順4: 従業員C\n",
" d.append(random.choices(jig_list1, k=2)) # 治具: 検査手順1\n",
" d.append(random.choices(jig_list2, k=2)) # 治具: 検査手順2\n",
" d.append(random.choices(jig_list3, k=2)) # 治具: 検査手順3\n",
" d.append(random.choices(jig_list4, k=3)) # 治具: 検査手順4\n",
" data.append(d)\n",
"\n",
"df = pd.DataFrame(data, columns=cols, index=index)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" マウンタA | \n",
" マウンタB | \n",
" マウンタC | \n",
"
\n",
" \n",
" PCB | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" PCB1 | \n",
" 24 | \n",
" 25 | \n",
" 30 | \n",
"
\n",
" \n",
" PCB2 | \n",
" 22 | \n",
" 29 | \n",
" 12 | \n",
"
\n",
" \n",
" PCB3 | \n",
" 10 | \n",
" 19 | \n",
" 19 | \n",
"
\n",
" \n",
" PCB4 | \n",
" 23 | \n",
" 24 | \n",
" 15 | \n",
"
\n",
" \n",
" PCB5 | \n",
" 24 | \n",
" 30 | \n",
" 27 | \n",
"
\n",
" \n",
" PCB6 | \n",
" 28 | \n",
" 18 | \n",
" 18 | \n",
"
\n",
" \n",
" PCB7 | \n",
" 30 | \n",
" 24 | \n",
" 26 | \n",
"
\n",
" \n",
" PCB8 | \n",
" 15 | \n",
" 28 | \n",
" 11 | \n",
"
\n",
" \n",
" PCB9 | \n",
" 15 | \n",
" 22 | \n",
" 16 | \n",
"
\n",
" \n",
" PCB10 | \n",
" 20 | \n",
" 10 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB11 | \n",
" 24 | \n",
" 22 | \n",
" 27 | \n",
"
\n",
" \n",
" PCB12 | \n",
" 27 | \n",
" 27 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB13 | \n",
" 20 | \n",
" 25 | \n",
" 23 | \n",
"
\n",
" \n",
" PCB14 | \n",
" 24 | \n",
" 13 | \n",
" 24 | \n",
"
\n",
" \n",
" PCB15 | \n",
" 25 | \n",
" 17 | \n",
" 20 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" マウンタA マウンタB マウンタC\n",
"PCB \n",
"PCB1 24 25 30\n",
"PCB2 22 29 12\n",
"PCB3 10 19 19\n",
"PCB4 23 24 15\n",
"PCB5 24 30 27\n",
"PCB6 28 18 18\n",
"PCB7 30 24 26\n",
"PCB8 15 28 11\n",
"PCB9 15 22 16\n",
"PCB10 20 10 25\n",
"PCB11 24 22 27\n",
"PCB12 27 27 20\n",
"PCB13 20 25 23\n",
"PCB14 24 13 24\n",
"PCB15 25 17 20"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"表面実装工程\"]"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 卓ロボA | \n",
" 卓ロボB | \n",
" 卓ロボC | \n",
" 卓ロボD | \n",
" 卓ロボE | \n",
" 卓ロボF | \n",
"
\n",
" \n",
" PCB | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" PCB1 | \n",
" 0 | \n",
" 4 | \n",
" 5 | \n",
" 27 | \n",
" 13 | \n",
" 18 | \n",
"
\n",
" \n",
" PCB2 | \n",
" 7 | \n",
" 9 | \n",
" 26 | \n",
" 4 | \n",
" 14 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB3 | \n",
" 8 | \n",
" 7 | \n",
" 7 | \n",
" 20 | \n",
" 28 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB4 | \n",
" 11 | \n",
" 4 | \n",
" 12 | \n",
" 10 | \n",
" 4 | \n",
" 28 | \n",
"
\n",
" \n",
" PCB5 | \n",
" 7 | \n",
" 29 | \n",
" 20 | \n",
" 9 | \n",
" 13 | \n",
" 6 | \n",
"
\n",
" \n",
" PCB6 | \n",
" 14 | \n",
" 30 | \n",
" 2 | \n",
" 30 | \n",
" 3 | \n",
" 13 | \n",
"
\n",
" \n",
" PCB7 | \n",
" 18 | \n",
" 25 | \n",
" 19 | \n",
" 3 | \n",
" 9 | \n",
" 30 | \n",
"
\n",
" \n",
" PCB8 | \n",
" 26 | \n",
" 20 | \n",
" 10 | \n",
" 27 | \n",
" 24 | \n",
" 14 | \n",
"
\n",
" \n",
" PCB9 | \n",
" 29 | \n",
" 13 | \n",
" 25 | \n",
" 14 | \n",
" 18 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB10 | \n",
" 23 | \n",
" 25 | \n",
" 15 | \n",
" 23 | \n",
" 7 | \n",
" 5 | \n",
"
\n",
" \n",
" PCB11 | \n",
" 3 | \n",
" 22 | \n",
" 6 | \n",
" 29 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" PCB12 | \n",
" 5 | \n",
" 28 | \n",
" 13 | \n",
" 24 | \n",
" 23 | \n",
" 9 | \n",
"
\n",
" \n",
" PCB13 | \n",
" 26 | \n",
" 4 | \n",
" 25 | \n",
" 17 | \n",
" 24 | \n",
" 3 | \n",
"
\n",
" \n",
" PCB14 | \n",
" 17 | \n",
" 15 | \n",
" 4 | \n",
" 11 | \n",
" 27 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB15 | \n",
" 24 | \n",
" 11 | \n",
" 21 | \n",
" 1 | \n",
" 19 | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 卓ロボA 卓ロボB 卓ロボC 卓ロボD 卓ロボE 卓ロボF\n",
"PCB \n",
"PCB1 0 4 5 27 13 18\n",
"PCB2 7 9 26 4 14 20\n",
"PCB3 8 7 7 20 28 20\n",
"PCB4 11 4 12 10 4 28\n",
"PCB5 7 29 20 9 13 6\n",
"PCB6 14 30 2 30 3 13\n",
"PCB7 18 25 19 3 9 30\n",
"PCB8 26 20 10 27 24 14\n",
"PCB9 29 13 25 14 18 20\n",
"PCB10 23 25 15 23 7 5\n",
"PCB11 3 22 6 29 30 0\n",
"PCB12 5 28 13 24 23 9\n",
"PCB13 26 4 25 17 24 3\n",
"PCB14 17 15 4 11 27 20\n",
"PCB15 24 11 21 1 19 3"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"挿入実装工程\"]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 従業員A | \n",
" 従業員B | \n",
" 従業員C | \n",
"
\n",
" \n",
" PCB | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" PCB1 | \n",
" 28 | \n",
" 11 | \n",
" 26 | \n",
"
\n",
" \n",
" PCB2 | \n",
" 19 | \n",
" 27 | \n",
" 17 | \n",
"
\n",
" \n",
" PCB3 | \n",
" 27 | \n",
" 29 | \n",
" 24 | \n",
"
\n",
" \n",
" PCB4 | \n",
" 29 | \n",
" 17 | \n",
" 10 | \n",
"
\n",
" \n",
" PCB5 | \n",
" 14 | \n",
" 16 | \n",
" 24 | \n",
"
\n",
" \n",
" PCB6 | \n",
" 11 | \n",
" 16 | \n",
" 27 | \n",
"
\n",
" \n",
" PCB7 | \n",
" 27 | \n",
" 26 | \n",
" 23 | \n",
"
\n",
" \n",
" PCB8 | \n",
" 10 | \n",
" 14 | \n",
" 30 | \n",
"
\n",
" \n",
" PCB9 | \n",
" 12 | \n",
" 28 | \n",
" 14 | \n",
"
\n",
" \n",
" PCB10 | \n",
" 20 | \n",
" 17 | \n",
" 16 | \n",
"
\n",
" \n",
" PCB11 | \n",
" 23 | \n",
" 19 | \n",
" 10 | \n",
"
\n",
" \n",
" PCB12 | \n",
" 24 | \n",
" 18 | \n",
" 28 | \n",
"
\n",
" \n",
" PCB13 | \n",
" 30 | \n",
" 12 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB14 | \n",
" 30 | \n",
" 18 | \n",
" 27 | \n",
"
\n",
" \n",
" PCB15 | \n",
" 26 | \n",
" 19 | \n",
" 30 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 従業員A 従業員B 従業員C\n",
"PCB \n",
"PCB1 28 11 26\n",
"PCB2 19 27 17\n",
"PCB3 27 29 24\n",
"PCB4 29 17 10\n",
"PCB5 14 16 24\n",
"PCB6 11 16 27\n",
"PCB7 27 26 23\n",
"PCB8 10 14 30\n",
"PCB9 12 28 14\n",
"PCB10 20 17 16\n",
"PCB11 23 19 10\n",
"PCB12 24 18 28\n",
"PCB13 30 12 20\n",
"PCB14 30 18 27\n",
"PCB15 26 19 30"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"検査手順1\"]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 従業員A | \n",
" 従業員B | \n",
" 従業員C | \n",
"
\n",
" \n",
" PCB | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" PCB1 | \n",
" 16 | \n",
" 28 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB2 | \n",
" 20 | \n",
" 20 | \n",
" 28 | \n",
"
\n",
" \n",
" PCB3 | \n",
" 14 | \n",
" 21 | \n",
" 11 | \n",
"
\n",
" \n",
" PCB4 | \n",
" 24 | \n",
" 21 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB5 | \n",
" 19 | \n",
" 17 | \n",
" 14 | \n",
"
\n",
" \n",
" PCB6 | \n",
" 30 | \n",
" 30 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB7 | \n",
" 27 | \n",
" 12 | \n",
" 17 | \n",
"
\n",
" \n",
" PCB8 | \n",
" 14 | \n",
" 27 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB9 | \n",
" 26 | \n",
" 11 | \n",
" 22 | \n",
"
\n",
" \n",
" PCB10 | \n",
" 13 | \n",
" 16 | \n",
" 24 | \n",
"
\n",
" \n",
" PCB11 | \n",
" 10 | \n",
" 16 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB12 | \n",
" 28 | \n",
" 11 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB13 | \n",
" 26 | \n",
" 29 | \n",
" 22 | \n",
"
\n",
" \n",
" PCB14 | \n",
" 10 | \n",
" 29 | \n",
" 29 | \n",
"
\n",
" \n",
" PCB15 | \n",
" 28 | \n",
" 26 | \n",
" 21 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 従業員A 従業員B 従業員C\n",
"PCB \n",
"PCB1 16 28 25\n",
"PCB2 20 20 28\n",
"PCB3 14 21 11\n",
"PCB4 24 21 20\n",
"PCB5 19 17 14\n",
"PCB6 30 30 25\n",
"PCB7 27 12 17\n",
"PCB8 14 27 25\n",
"PCB9 26 11 22\n",
"PCB10 13 16 24\n",
"PCB11 10 16 25\n",
"PCB12 28 11 25\n",
"PCB13 26 29 22\n",
"PCB14 10 29 29\n",
"PCB15 28 26 21"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"検査手順2\"]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 従業員A | \n",
" 従業員B | \n",
" 従業員C | \n",
"
\n",
" \n",
" PCB | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" PCB1 | \n",
" 26 | \n",
" 27 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB2 | \n",
" 29 | \n",
" 23 | \n",
" 24 | \n",
"
\n",
" \n",
" PCB3 | \n",
" 17 | \n",
" 25 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB4 | \n",
" 28 | \n",
" 16 | \n",
" 21 | \n",
"
\n",
" \n",
" PCB5 | \n",
" 16 | \n",
" 12 | \n",
" 26 | \n",
"
\n",
" \n",
" PCB6 | \n",
" 22 | \n",
" 18 | \n",
" 21 | \n",
"
\n",
" \n",
" PCB7 | \n",
" 29 | \n",
" 14 | \n",
" 18 | \n",
"
\n",
" \n",
" PCB8 | \n",
" 15 | \n",
" 24 | \n",
" 24 | \n",
"
\n",
" \n",
" PCB9 | \n",
" 20 | \n",
" 20 | \n",
" 30 | \n",
"
\n",
" \n",
" PCB10 | \n",
" 22 | \n",
" 27 | \n",
" 12 | \n",
"
\n",
" \n",
" PCB11 | \n",
" 25 | \n",
" 30 | \n",
" 18 | \n",
"
\n",
" \n",
" PCB12 | \n",
" 30 | \n",
" 26 | \n",
" 19 | \n",
"
\n",
" \n",
" PCB13 | \n",
" 16 | \n",
" 29 | \n",
" 15 | \n",
"
\n",
" \n",
" PCB14 | \n",
" 13 | \n",
" 19 | \n",
" 29 | \n",
"
\n",
" \n",
" PCB15 | \n",
" 14 | \n",
" 28 | \n",
" 21 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 従業員A 従業員B 従業員C\n",
"PCB \n",
"PCB1 26 27 25\n",
"PCB2 29 23 24\n",
"PCB3 17 25 20\n",
"PCB4 28 16 21\n",
"PCB5 16 12 26\n",
"PCB6 22 18 21\n",
"PCB7 29 14 18\n",
"PCB8 15 24 24\n",
"PCB9 20 20 30\n",
"PCB10 22 27 12\n",
"PCB11 25 30 18\n",
"PCB12 30 26 19\n",
"PCB13 16 29 15\n",
"PCB14 13 19 29\n",
"PCB15 14 28 21"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"検査手順3\"]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 従業員A | \n",
" 従業員B | \n",
" 従業員C | \n",
"
\n",
" \n",
" PCB | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" PCB1 | \n",
" 15 | \n",
" 21 | \n",
" 26 | \n",
"
\n",
" \n",
" PCB2 | \n",
" 12 | \n",
" 16 | \n",
" 23 | \n",
"
\n",
" \n",
" PCB3 | \n",
" 19 | \n",
" 22 | \n",
" 25 | \n",
"
\n",
" \n",
" PCB4 | \n",
" 21 | \n",
" 26 | \n",
" 19 | \n",
"
\n",
" \n",
" PCB5 | \n",
" 17 | \n",
" 20 | \n",
" 18 | \n",
"
\n",
" \n",
" PCB6 | \n",
" 29 | \n",
" 24 | \n",
" 17 | \n",
"
\n",
" \n",
" PCB7 | \n",
" 12 | \n",
" 10 | \n",
" 14 | \n",
"
\n",
" \n",
" PCB8 | \n",
" 15 | \n",
" 28 | \n",
" 20 | \n",
"
\n",
" \n",
" PCB9 | \n",
" 28 | \n",
" 10 | \n",
" 17 | \n",
"
\n",
" \n",
" PCB10 | \n",
" 24 | \n",
" 23 | \n",
" 10 | \n",
"
\n",
" \n",
" PCB11 | \n",
" 25 | \n",
" 22 | \n",
" 15 | \n",
"
\n",
" \n",
" PCB12 | \n",
" 13 | \n",
" 14 | \n",
" 21 | \n",
"
\n",
" \n",
" PCB13 | \n",
" 16 | \n",
" 11 | \n",
" 17 | \n",
"
\n",
" \n",
" PCB14 | \n",
" 24 | \n",
" 20 | \n",
" 24 | \n",
"
\n",
" \n",
" PCB15 | \n",
" 20 | \n",
" 23 | \n",
" 11 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 従業員A 従業員B 従業員C\n",
"PCB \n",
"PCB1 15 21 26\n",
"PCB2 12 16 23\n",
"PCB3 19 22 25\n",
"PCB4 21 26 19\n",
"PCB5 17 20 18\n",
"PCB6 29 24 17\n",
"PCB7 12 10 14\n",
"PCB8 15 28 20\n",
"PCB9 28 10 17\n",
"PCB10 24 23 10\n",
"PCB11 25 22 15\n",
"PCB12 13 14 21\n",
"PCB13 16 11 17\n",
"PCB14 24 20 24\n",
"PCB15 20 23 11"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"検査手順4\"]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 検査手順1 | \n",
" 検査手順2 | \n",
" 検査手順3 | \n",
" 検査手順4 | \n",
"
\n",
" \n",
" PCB | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" PCB1 | \n",
" [治具1, 治具1] | \n",
" [治具5, 治具6] | \n",
" [治具7, 治具8] | \n",
" [治具14, 治具10, 治具13] | \n",
"
\n",
" \n",
" PCB2 | \n",
" [治具1, 治具2] | \n",
" [治具5, 治具5] | \n",
" [治具9, 治具8] | \n",
" [治具13, 治具14, 治具10] | \n",
"
\n",
" \n",
" PCB3 | \n",
" [治具2, 治具2] | \n",
" [治具6, 治具5] | \n",
" [治具9, 治具8] | \n",
" [治具14, 治具14, 治具10] | \n",
"
\n",
" \n",
" PCB4 | \n",
" [治具1, 治具1] | \n",
" [治具4, 治具6] | \n",
" [治具8, 治具8] | \n",
" [治具14, 治具10, 治具12] | \n",
"
\n",
" \n",
" PCB5 | \n",
" [治具2, 治具3] | \n",
" [治具4, 治具4] | \n",
" [治具9, 治具8] | \n",
" [治具11, 治具13, 治具14] | \n",
"
\n",
" \n",
" PCB6 | \n",
" [治具1, 治具1] | \n",
" [治具5, 治具4] | \n",
" [治具9, 治具8] | \n",
" [治具10, 治具14, 治具12] | \n",
"
\n",
" \n",
" PCB7 | \n",
" [治具3, 治具1] | \n",
" [治具4, 治具4] | \n",
" [治具7, 治具8] | \n",
" [治具12, 治具12, 治具14] | \n",
"
\n",
" \n",
" PCB8 | \n",
" [治具2, 治具1] | \n",
" [治具4, 治具4] | \n",
" [治具8, 治具8] | \n",
" [治具11, 治具12, 治具12] | \n",
"
\n",
" \n",
" PCB9 | \n",
" [治具2, 治具2] | \n",
" [治具4, 治具6] | \n",
" [治具9, 治具7] | \n",
" [治具11, 治具13, 治具14] | \n",
"
\n",
" \n",
" PCB10 | \n",
" [治具2, 治具1] | \n",
" [治具6, 治具6] | \n",
" [治具7, 治具8] | \n",
" [治具13, 治具13, 治具12] | \n",
"
\n",
" \n",
" PCB11 | \n",
" [治具2, 治具3] | \n",
" [治具5, 治具5] | \n",
" [治具7, 治具9] | \n",
" [治具12, 治具12, 治具12] | \n",
"
\n",
" \n",
" PCB12 | \n",
" [治具2, 治具1] | \n",
" [治具6, 治具4] | \n",
" [治具8, 治具9] | \n",
" [治具14, 治具10, 治具14] | \n",
"
\n",
" \n",
" PCB13 | \n",
" [治具1, 治具1] | \n",
" [治具5, 治具6] | \n",
" [治具7, 治具7] | \n",
" [治具14, 治具13, 治具10] | \n",
"
\n",
" \n",
" PCB14 | \n",
" [治具1, 治具1] | \n",
" [治具5, 治具6] | \n",
" [治具8, 治具7] | \n",
" [治具11, 治具14, 治具11] | \n",
"
\n",
" \n",
" PCB15 | \n",
" [治具2, 治具3] | \n",
" [治具4, 治具5] | \n",
" [治具9, 治具8] | \n",
" [治具11, 治具12, 治具12] | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 検査手順1 検査手順2 検査手順3 検査手順4\n",
"PCB \n",
"PCB1 [治具1, 治具1] [治具5, 治具6] [治具7, 治具8] [治具14, 治具10, 治具13]\n",
"PCB2 [治具1, 治具2] [治具5, 治具5] [治具9, 治具8] [治具13, 治具14, 治具10]\n",
"PCB3 [治具2, 治具2] [治具6, 治具5] [治具9, 治具8] [治具14, 治具14, 治具10]\n",
"PCB4 [治具1, 治具1] [治具4, 治具6] [治具8, 治具8] [治具14, 治具10, 治具12]\n",
"PCB5 [治具2, 治具3] [治具4, 治具4] [治具9, 治具8] [治具11, 治具13, 治具14]\n",
"PCB6 [治具1, 治具1] [治具5, 治具4] [治具9, 治具8] [治具10, 治具14, 治具12]\n",
"PCB7 [治具3, 治具1] [治具4, 治具4] [治具7, 治具8] [治具12, 治具12, 治具14]\n",
"PCB8 [治具2, 治具1] [治具4, 治具4] [治具8, 治具8] [治具11, 治具12, 治具12]\n",
"PCB9 [治具2, 治具2] [治具4, 治具6] [治具9, 治具7] [治具11, 治具13, 治具14]\n",
"PCB10 [治具2, 治具1] [治具6, 治具6] [治具7, 治具8] [治具13, 治具13, 治具12]\n",
"PCB11 [治具2, 治具3] [治具5, 治具5] [治具7, 治具9] [治具12, 治具12, 治具12]\n",
"PCB12 [治具2, 治具1] [治具6, 治具4] [治具8, 治具9] [治具14, 治具10, 治具14]\n",
"PCB13 [治具1, 治具1] [治具5, 治具6] [治具7, 治具7] [治具14, 治具13, 治具10]\n",
"PCB14 [治具1, 治具1] [治具5, 治具6] [治具8, 治具7] [治具11, 治具14, 治具11]\n",
"PCB15 [治具2, 治具3] [治具4, 治具5] [治具9, 治具8] [治具11, 治具12, 治具12]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"治具\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Amplify Sched を用いた定式化\n",
"\n",
"挿入実装工程と検査工程はそれぞれの工程を開始したら中断することができないので、Amplify Sched における no wait 制約を用いて定式化します。\n",
"\n",
"表面実装工程、挿入実装工程、検査工程をそれぞれ別の Job として、Job 間の順序制約を課します。\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"model = Model()\n",
"for j in df.index:\n",
" model.jobs.add(j + \"表面実装工程\")\n",
" model.jobs.add(j + \"挿入実装工程\")\n",
" model.jobs[j + \"挿入実装工程\"].no_wait = True\n",
" model.jobs[j + \"挿入実装工程\"].add_dependent_jobs(model.jobs[j + \"表面実装工程\"])\n",
" model.jobs.add(j + \"検査工程\")\n",
" model.jobs[j + \"検査工程\"].no_wait = True\n",
" model.jobs[j + \"検査工程\"].add_dependent_jobs(model.jobs[j + \"挿入実装工程\"])\n",
"for m in mounters + takurobos + operators:\n",
" model.machines.add(m)\n",
"for k in jig_list1 + jig_list2 + jig_list3 + jig_list4:\n",
" model.resources.add(k)\n",
" model.resources[k].capacity = jig_capacity\n",
"\n",
"\n",
"for j in df.index:\n",
" # 表面実装工程\n",
" model.jobs[j + \"表面実装工程\"].append(Task())\n",
" for m in mounters:\n",
" model.jobs[j + \"表面実装工程\"][0].processing_times[m] = int(df.loc[j, \"表面実装工程\"][m])\n",
" # 挿入実装工程\n",
" for i, m in enumerate(takurobos):\n",
" model.jobs[j + \"挿入実装工程\"].append(Task())\n",
" model.jobs[j + \"挿入実装工程\"][i].processing_times[m] = int(df.loc[j, \"挿入実装工程\"][m])\n",
" # 検査工程\n",
" for i, p in enumerate(checks[0:2]):\n",
" model.jobs[j + \"検査工程\"].append(Task())\n",
" for m in operators:\n",
" model.jobs[j + \"検査工程\"][i].processing_times[m] = int(df.loc[j, p][m])\n",
" for r in df.loc[j, \"治具\"][p]:\n",
" model.jobs[j + \"検査工程\"][i].add_required_resource(r)\n",
" for m1, m2 in itertools.combinations(operators, 2):\n",
" model.jobs[j + \"検査工程\"][i].add_transportation_time(operator_change_time, m1, m2)\n",
" model.jobs[j + \"検査工程\"][i].add_transportation_time(operator_change_time, m2, m1)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" \n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"alignmentgroup": "True",
"base": [
298,
298,
302,
307,
334,
347
],
"customdata": [
[
"PCB1挿入実装工程",
0
],
[
"PCB1挿入実装工程",
1
],
[
"PCB1挿入実装工程",
2
],
[
"PCB1挿入実装工程",
3
],
[
"PCB1挿入実装工程",
4
],
[
"PCB1挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB1挿入実装工程",
"marker": {
"color": "#636efa",
"pattern": {
"shape": ""
}
},
"name": "PCB1挿入実装工程",
"offsetgroup": "PCB1挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
0,
4,
5,
27,
13,
18
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
365,
376
],
"customdata": [
[
"PCB1検査工程",
0
],
[
"PCB1検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB1検査工程",
"marker": {
"color": "#EF553B",
"pattern": {
"shape": ""
}
},
"name": "PCB1検査工程",
"offsetgroup": "PCB1検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
11,
28
],
"xaxis": "x",
"y": [
"従業員B",
"従業員B"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
61
],
"customdata": [
[
"PCB1表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB1表面実装工程",
"marker": {
"color": "#00cc96",
"pattern": {
"shape": ""
}
},
"name": "PCB1表面実装工程",
"offsetgroup": "PCB1表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
30
],
"xaxis": "x",
"y": [
"マウンタC"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
196,
203,
212,
238,
242,
256
],
"customdata": [
[
"PCB2挿入実装工程",
0
],
[
"PCB2挿入実装工程",
1
],
[
"PCB2挿入実装工程",
2
],
[
"PCB2挿入実装工程",
3
],
[
"PCB2挿入実装工程",
4
],
[
"PCB2挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB2挿入実装工程",
"marker": {
"color": "#ab63fa",
"pattern": {
"shape": ""
}
},
"name": "PCB2挿入実装工程",
"offsetgroup": "PCB2挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
7,
9,
26,
4,
14,
20
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
276,
293
],
"customdata": [
[
"PCB2検査工程",
0
],
[
"PCB2検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB2検査工程",
"marker": {
"color": "#FFA15A",
"pattern": {
"shape": ""
}
},
"name": "PCB2検査工程",
"offsetgroup": "PCB2検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
17,
28
],
"xaxis": "x",
"y": [
"従業員C",
"従業員C"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
31
],
"customdata": [
[
"PCB2表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB2表面実装工程",
"marker": {
"color": "#19d3f3",
"pattern": {
"shape": ""
}
},
"name": "PCB2表面実装工程",
"offsetgroup": "PCB2表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
12
],
"xaxis": "x",
"y": [
"マウンタC"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
10,
18,
25,
32,
52,
80
],
"customdata": [
[
"PCB3挿入実装工程",
0
],
[
"PCB3挿入実装工程",
1
],
[
"PCB3挿入実装工程",
2
],
[
"PCB3挿入実装工程",
3
],
[
"PCB3挿入実装工程",
4
],
[
"PCB3挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB3挿入実装工程",
"marker": {
"color": "#FF6692",
"pattern": {
"shape": ""
}
},
"name": "PCB3挿入実装工程",
"offsetgroup": "PCB3挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
8,
7,
7,
20,
28,
20
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
100,
124
],
"customdata": [
[
"PCB3検査工程",
0
],
[
"PCB3検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB3検査工程",
"marker": {
"color": "#B6E880",
"pattern": {
"shape": ""
}
},
"name": "PCB3検査工程",
"offsetgroup": "PCB3検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
24,
11
],
"xaxis": "x",
"y": [
"従業員C",
"従業員C"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
0
],
"customdata": [
[
"PCB3表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB3表面実装工程",
"marker": {
"color": "#FF97FF",
"pattern": {
"shape": ""
}
},
"name": "PCB3表面実装工程",
"offsetgroup": "PCB3表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
10
],
"xaxis": "x",
"y": [
"マウンタA"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
185,
196,
200,
212,
222,
226
],
"customdata": [
[
"PCB4挿入実装工程",
0
],
[
"PCB4挿入実装工程",
1
],
[
"PCB4挿入実装工程",
2
],
[
"PCB4挿入実装工程",
3
],
[
"PCB4挿入実装工程",
4
],
[
"PCB4挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB4挿入実装工程",
"marker": {
"color": "#FECB52",
"pattern": {
"shape": ""
}
},
"name": "PCB4挿入実装工程",
"offsetgroup": "PCB4挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
11,
4,
12,
10,
4,
28
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
254,
283
],
"customdata": [
[
"PCB4検査工程",
0
],
[
"PCB4検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB4検査工程",
"marker": {
"color": "#636efa",
"pattern": {
"shape": ""
}
},
"name": "PCB4検査工程",
"offsetgroup": "PCB4検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
29,
24
],
"xaxis": "x",
"y": [
"従業員A",
"従業員A"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
91
],
"customdata": [
[
"PCB4表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB4表面実装工程",
"marker": {
"color": "#EF553B",
"pattern": {
"shape": ""
}
},
"name": "PCB4表面実装工程",
"offsetgroup": "PCB4表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
15
],
"xaxis": "x",
"y": [
"マウンタC"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
205,
212,
241,
261,
270,
283
],
"customdata": [
[
"PCB5挿入実装工程",
0
],
[
"PCB5挿入実装工程",
1
],
[
"PCB5挿入実装工程",
2
],
[
"PCB5挿入実装工程",
3
],
[
"PCB5挿入実装工程",
4
],
[
"PCB5挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB5挿入実装工程",
"marker": {
"color": "#00cc96",
"pattern": {
"shape": ""
}
},
"name": "PCB5挿入実装工程",
"offsetgroup": "PCB5挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
7,
29,
20,
9,
13,
6
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
307,
321
],
"customdata": [
[
"PCB5検査工程",
0
],
[
"PCB5検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB5検査工程",
"marker": {
"color": "#ab63fa",
"pattern": {
"shape": ""
}
},
"name": "PCB5検査工程",
"offsetgroup": "PCB5検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
14,
19
],
"xaxis": "x",
"y": [
"従業員A",
"従業員A"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
0
],
"customdata": [
[
"PCB5表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB5表面実装工程",
"marker": {
"color": "#FFA15A",
"pattern": {
"shape": ""
}
},
"name": "PCB5表面実装工程",
"offsetgroup": "PCB5表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
30
],
"xaxis": "x",
"y": [
"マウンタB"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
122,
136,
166,
168,
198,
201
],
"customdata": [
[
"PCB6挿入実装工程",
0
],
[
"PCB6挿入実装工程",
1
],
[
"PCB6挿入実装工程",
2
],
[
"PCB6挿入実装工程",
3
],
[
"PCB6挿入実装工程",
4
],
[
"PCB6挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB6挿入実装工程",
"marker": {
"color": "#19d3f3",
"pattern": {
"shape": ""
}
},
"name": "PCB6挿入実装工程",
"offsetgroup": "PCB6挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
14,
30,
2,
30,
3,
13
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
214,
241
],
"customdata": [
[
"PCB6検査工程",
0
],
[
"PCB6検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB6検査工程",
"marker": {
"color": "#FF6692",
"pattern": {
"shape": ""
}
},
"name": "PCB6検査工程",
"offsetgroup": "PCB6検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
27,
25
],
"xaxis": "x",
"y": [
"従業員C",
"従業員C"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
43
],
"customdata": [
[
"PCB6表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB6表面実装工程",
"marker": {
"color": "#B6E880",
"pattern": {
"shape": ""
}
},
"name": "PCB6表面実装工程",
"offsetgroup": "PCB6表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
18
],
"xaxis": "x",
"y": [
"マウンタC"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
223,
241,
266,
285,
288,
297
],
"customdata": [
[
"PCB7挿入実装工程",
0
],
[
"PCB7挿入実装工程",
1
],
[
"PCB7挿入実装工程",
2
],
[
"PCB7挿入実装工程",
3
],
[
"PCB7挿入実装工程",
4
],
[
"PCB7挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB7挿入実装工程",
"marker": {
"color": "#FF97FF",
"pattern": {
"shape": ""
}
},
"name": "PCB7挿入実装工程",
"offsetgroup": "PCB7挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
18,
25,
19,
3,
9,
30
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
327,
350
],
"customdata": [
[
"PCB7検査工程",
0
],
[
"PCB7検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB7検査工程",
"marker": {
"color": "#FECB52",
"pattern": {
"shape": ""
}
},
"name": "PCB7検査工程",
"offsetgroup": "PCB7検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
23,
17
],
"xaxis": "x",
"y": [
"従業員C",
"従業員C"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
94
],
"customdata": [
[
"PCB7表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB7表面実装工程",
"marker": {
"color": "#636efa",
"pattern": {
"shape": ""
}
},
"name": "PCB7表面実装工程",
"offsetgroup": "PCB7表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
30
],
"xaxis": "x",
"y": [
"マウンタA"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
61,
87,
107,
117,
144,
168
],
"customdata": [
[
"PCB8挿入実装工程",
0
],
[
"PCB8挿入実装工程",
1
],
[
"PCB8挿入実装工程",
2
],
[
"PCB8挿入実装工程",
3
],
[
"PCB8挿入実装工程",
4
],
[
"PCB8挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB8挿入実装工程",
"marker": {
"color": "#EF553B",
"pattern": {
"shape": ""
}
},
"name": "PCB8挿入実装工程",
"offsetgroup": "PCB8挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
26,
20,
10,
27,
24,
14
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
182,
196
],
"customdata": [
[
"PCB8検査工程",
0
],
[
"PCB8検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB8検査工程",
"marker": {
"color": "#00cc96",
"pattern": {
"shape": ""
}
},
"name": "PCB8検査工程",
"offsetgroup": "PCB8検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
14,
27
],
"xaxis": "x",
"y": [
"従業員B",
"従業員B"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
20
],
"customdata": [
[
"PCB8表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB8表面実装工程",
"marker": {
"color": "#ab63fa",
"pattern": {
"shape": ""
}
},
"name": "PCB8表面実装工程",
"offsetgroup": "PCB8表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
11
],
"xaxis": "x",
"y": [
"マウンタC"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
32,
61,
74,
99,
113,
131
],
"customdata": [
[
"PCB9挿入実装工程",
0
],
[
"PCB9挿入実装工程",
1
],
[
"PCB9挿入実装工程",
2
],
[
"PCB9挿入実装工程",
3
],
[
"PCB9挿入実装工程",
4
],
[
"PCB9挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB9挿入実装工程",
"marker": {
"color": "#FFA15A",
"pattern": {
"shape": ""
}
},
"name": "PCB9挿入実装工程",
"offsetgroup": "PCB9挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
29,
13,
25,
14,
18,
20
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
151,
163
],
"customdata": [
[
"PCB9検査工程",
0
],
[
"PCB9検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB9検査工程",
"marker": {
"color": "#19d3f3",
"pattern": {
"shape": ""
}
},
"name": "PCB9検査工程",
"offsetgroup": "PCB9検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
12,
26
],
"xaxis": "x",
"y": [
"従業員A",
"従業員A"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
10
],
"customdata": [
[
"PCB9表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB9表面実装工程",
"marker": {
"color": "#FF6692",
"pattern": {
"shape": ""
}
},
"name": "PCB9表面実装工程",
"offsetgroup": "PCB9表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
15
],
"xaxis": "x",
"y": [
"マウンタA"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
307,
330,
355,
370,
393,
400
],
"customdata": [
[
"PCB10挿入実装工程",
0
],
[
"PCB10挿入実装工程",
1
],
[
"PCB10挿入実装工程",
2
],
[
"PCB10挿入実装工程",
3
],
[
"PCB10挿入実装工程",
4
],
[
"PCB10挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB10挿入実装工程",
"marker": {
"color": "#B6E880",
"pattern": {
"shape": ""
}
},
"name": "PCB10挿入実装工程",
"offsetgroup": "PCB10挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
23,
25,
15,
23,
7,
5
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
405,
422
],
"customdata": [
[
"PCB10検査工程",
0
],
[
"PCB10検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB10検査工程",
"marker": {
"color": "#FF97FF",
"pattern": {
"shape": ""
}
},
"name": "PCB10検査工程",
"offsetgroup": "PCB10検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
17,
16
],
"xaxis": "x",
"y": [
"従業員B",
"従業員B"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
124
],
"customdata": [
[
"PCB10表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB10表面実装工程",
"marker": {
"color": "#FECB52",
"pattern": {
"shape": ""
}
},
"name": "PCB10表面実装工程",
"offsetgroup": "PCB10表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
20
],
"xaxis": "x",
"y": [
"マウンタA"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
303,
306,
328,
334,
363,
393
],
"customdata": [
[
"PCB11挿入実装工程",
0
],
[
"PCB11挿入実装工程",
1
],
[
"PCB11挿入実装工程",
2
],
[
"PCB11挿入実装工程",
3
],
[
"PCB11挿入実装工程",
4
],
[
"PCB11挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB11挿入実装工程",
"marker": {
"color": "#636efa",
"pattern": {
"shape": ""
}
},
"name": "PCB11挿入実装工程",
"offsetgroup": "PCB11挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
3,
22,
6,
29,
30,
0
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
393,
416
],
"customdata": [
[
"PCB11検査工程",
0
],
[
"PCB11検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB11検査工程",
"marker": {
"color": "#EF553B",
"pattern": {
"shape": ""
}
},
"name": "PCB11検査工程",
"offsetgroup": "PCB11検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
23,
10
],
"xaxis": "x",
"y": [
"従業員A",
"従業員A"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
25
],
"customdata": [
[
"PCB11表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB11表面実装工程",
"marker": {
"color": "#00cc96",
"pattern": {
"shape": ""
}
},
"name": "PCB11表面実装工程",
"offsetgroup": "PCB11表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
24
],
"xaxis": "x",
"y": [
"マウンタA"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
20,
25,
53,
66,
90,
113
],
"customdata": [
[
"PCB12挿入実装工程",
0
],
[
"PCB12挿入実装工程",
1
],
[
"PCB12挿入実装工程",
2
],
[
"PCB12挿入実装工程",
3
],
[
"PCB12挿入実装工程",
4
],
[
"PCB12挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB12挿入実装工程",
"marker": {
"color": "#ab63fa",
"pattern": {
"shape": ""
}
},
"name": "PCB12挿入実装工程",
"offsetgroup": "PCB12挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
5,
28,
13,
24,
23,
9
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
122,
246
],
"customdata": [
[
"PCB12検査工程",
0
],
[
"PCB12検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB12検査工程",
"marker": {
"color": "#FFA15A",
"pattern": {
"shape": ""
}
},
"name": "PCB12検査工程",
"offsetgroup": "PCB12検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
24,
11
],
"xaxis": "x",
"y": [
"従業員A",
"従業員B"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
0
],
"customdata": [
[
"PCB12表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB12表面実装工程",
"marker": {
"color": "#19d3f3",
"pattern": {
"shape": ""
}
},
"name": "PCB12表面実装工程",
"offsetgroup": "PCB12表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
20
],
"xaxis": "x",
"y": [
"マウンタC"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
96,
122,
126,
151,
168,
192
],
"customdata": [
[
"PCB13挿入実装工程",
0
],
[
"PCB13挿入実装工程",
1
],
[
"PCB13挿入実装工程",
2
],
[
"PCB13挿入実装工程",
3
],
[
"PCB13挿入実装工程",
4
],
[
"PCB13挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB13挿入実装工程",
"marker": {
"color": "#FF6692",
"pattern": {
"shape": ""
}
},
"name": "PCB13挿入実装工程",
"offsetgroup": "PCB13挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
26,
4,
25,
17,
24,
3
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
257,
269
],
"customdata": [
[
"PCB13検査工程",
0
],
[
"PCB13検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB13検査工程",
"marker": {
"color": "#B6E880",
"pattern": {
"shape": ""
}
},
"name": "PCB13検査工程",
"offsetgroup": "PCB13検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
12,
29
],
"xaxis": "x",
"y": [
"従業員B",
"従業員B"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
49
],
"customdata": [
[
"PCB13表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB13表面実装工程",
"marker": {
"color": "#FF97FF",
"pattern": {
"shape": ""
}
},
"name": "PCB13表面実装工程",
"offsetgroup": "PCB13表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
20
],
"xaxis": "x",
"y": [
"マウンタA"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
253,
270,
285,
289,
300,
327
],
"customdata": [
[
"PCB14挿入実装工程",
0
],
[
"PCB14挿入実装工程",
1
],
[
"PCB14挿入実装工程",
2
],
[
"PCB14挿入実装工程",
3
],
[
"PCB14挿入実装工程",
4
],
[
"PCB14挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB14挿入実装工程",
"marker": {
"color": "#FECB52",
"pattern": {
"shape": ""
}
},
"name": "PCB14挿入実装工程",
"offsetgroup": "PCB14挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
17,
15,
4,
11,
27,
20
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
367,
394
],
"customdata": [
[
"PCB14検査工程",
0
],
[
"PCB14検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB14検査工程",
"marker": {
"color": "#636efa",
"pattern": {
"shape": ""
}
},
"name": "PCB14検査工程",
"offsetgroup": "PCB14検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
27,
29
],
"xaxis": "x",
"y": [
"従業員C",
"従業員C"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
30
],
"customdata": [
[
"PCB14表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB14表面実装工程",
"marker": {
"color": "#EF553B",
"pattern": {
"shape": ""
}
},
"name": "PCB14表面実装工程",
"offsetgroup": "PCB14表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
13
],
"xaxis": "x",
"y": [
"マウンタB"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
144,
168,
179,
200,
201,
220
],
"customdata": [
[
"PCB15挿入実装工程",
0
],
[
"PCB15挿入実装工程",
1
],
[
"PCB15挿入実装工程",
2
],
[
"PCB15挿入実装工程",
3
],
[
"PCB15挿入実装工程",
4
],
[
"PCB15挿入実装工程",
5
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB15挿入実装工程",
"marker": {
"color": "#00cc96",
"pattern": {
"shape": ""
}
},
"name": "PCB15挿入実装工程",
"offsetgroup": "PCB15挿入実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
24,
11,
21,
1,
19,
3
],
"xaxis": "x",
"y": [
"卓ロボA",
"卓ロボB",
"卓ロボC",
"卓ロボD",
"卓ロボE",
"卓ロボF"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
223,
342
],
"customdata": [
[
"PCB15検査工程",
0
],
[
"PCB15検査工程",
1
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB15検査工程",
"marker": {
"color": "#ab63fa",
"pattern": {
"shape": ""
}
},
"name": "PCB15検査工程",
"offsetgroup": "PCB15検査工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
19,
28
],
"xaxis": "x",
"y": [
"従業員B",
"従業員A"
],
"yaxis": "y"
},
{
"alignmentgroup": "True",
"base": [
69
],
"customdata": [
[
"PCB15表面実装工程",
0
]
],
"hovertemplate": "Job=%{customdata[0]}
Start=%{base}
Finish=%{x}
Machine=%{y}
Process=%{customdata[1]}",
"legendgroup": "PCB15表面実装工程",
"marker": {
"color": "#FFA15A",
"pattern": {
"shape": ""
}
},
"name": "PCB15表面実装工程",
"offsetgroup": "PCB15表面実装工程",
"orientation": "h",
"showlegend": true,
"textposition": "auto",
"type": "bar",
"x": [
25
],
"xaxis": "x",
"y": [
"マウンタA"
],
"yaxis": "y"
}
],
"layout": {
"barmode": "overlay",
"legend": {
"title": {
"text": "Job"
},
"tracegroupgap": 0
},
"margin": {
"t": 60
},
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"xaxis": {
"anchor": "y",
"domain": [
0,
1
],
"type": "linear"
},
"yaxis": {
"anchor": "x",
"categoryarray": [
"従業員C",
"従業員B",
"従業員A",
"卓ロボF",
"卓ロボE",
"卓ロボD",
"卓ロボC",
"卓ロボB",
"卓ロボA",
"マウンタC",
"マウンタB",
"マウンタA"
],
"categoryorder": "array",
"domain": [
0,
1
],
"title": {
"text": "Machine"
}
}
}
},
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"token = \"xxxxxxxxxxxxxxxxxxxxxx\"\n",
"gantt = model.solve(token=token, timeout=10)\n",
"gantt.timeline(machine_view=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "scheduling-engine-sdk-IShfnD0Q",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.6"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}