{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
マウンタAマウンタBマウンタC
PCB
PCB1242530
PCB2222912
PCB3101919
PCB4232415
PCB5243027
PCB6281818
PCB7302426
PCB8152811
PCB9152216
PCB10201025
PCB11242227
PCB12272720
PCB13202523
PCB14241324
PCB15251720
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
卓ロボA卓ロボB卓ロボC卓ロボD卓ロボE卓ロボF
PCB
PCB1045271318
PCB2792641420
PCB3877202820
PCB41141210428
PCB5729209136
PCB61430230313
PCB71825193930
PCB8262010272414
PCB9291325141820
PCB102325152375
PCB11322629300
PCB125281324239
PCB132642517243
PCB1417154112720
PCB152411211193
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
従業員A従業員B従業員C
PCB
PCB1281126
PCB2192717
PCB3272924
PCB4291710
PCB5141624
PCB6111627
PCB7272623
PCB8101430
PCB9122814
PCB10201716
PCB11231910
PCB12241828
PCB13301220
PCB14301827
PCB15261930
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
従業員A従業員B従業員C
PCB
PCB1162825
PCB2202028
PCB3142111
PCB4242120
PCB5191714
PCB6303025
PCB7271217
PCB8142725
PCB9261122
PCB10131624
PCB11101625
PCB12281125
PCB13262922
PCB14102929
PCB15282621
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
従業員A従業員B従業員C
PCB
PCB1262725
PCB2292324
PCB3172520
PCB4281621
PCB5161226
PCB6221821
PCB7291418
PCB8152424
PCB9202030
PCB10222712
PCB11253018
PCB12302619
PCB13162915
PCB14131929
PCB15142821
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
従業員A従業員B従業員C
PCB
PCB1152126
PCB2121623
PCB3192225
PCB4212619
PCB5172018
PCB6292417
PCB7121014
PCB8152820
PCB9281017
PCB10242310
PCB11252215
PCB12131421
PCB13161117
PCB14242024
PCB15202311
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
検査手順1検査手順2検査手順3検査手順4
PCB
PCB1[治具1, 治具1][治具5, 治具6][治具7, 治具8][治具14, 治具10, 治具13]
PCB2[治具1, 治具2][治具5, 治具5][治具9, 治具8][治具13, 治具14, 治具10]
PCB3[治具2, 治具2][治具6, 治具5][治具9, 治具8][治具14, 治具14, 治具10]
PCB4[治具1, 治具1][治具4, 治具6][治具8, 治具8][治具14, 治具10, 治具12]
PCB5[治具2, 治具3][治具4, 治具4][治具9, 治具8][治具11, 治具13, 治具14]
PCB6[治具1, 治具1][治具5, 治具4][治具9, 治具8][治具10, 治具14, 治具12]
PCB7[治具3, 治具1][治具4, 治具4][治具7, 治具8][治具12, 治具12, 治具14]
PCB8[治具2, 治具1][治具4, 治具4][治具8, 治具8][治具11, 治具12, 治具12]
PCB9[治具2, 治具2][治具4, 治具6][治具9, 治具7][治具11, 治具13, 治具14]
PCB10[治具2, 治具1][治具6, 治具6][治具7, 治具8][治具13, 治具13, 治具12]
PCB11[治具2, 治具3][治具5, 治具5][治具7, 治具9][治具12, 治具12, 治具12]
PCB12[治具2, 治具1][治具6, 治具4][治具8, 治具9][治具14, 治具10, 治具14]
PCB13[治具1, 治具1][治具5, 治具6][治具7, 治具7][治具14, 治具13, 治具10]
PCB14[治具1, 治具1][治具5, 治具6][治具8, 治具7][治具11, 治具14, 治具11]
PCB15[治具2, 治具3][治具4, 治具5][治具9, 治具8][治具11, 治具12, 治具12]
\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 }