{"data":{"markdownRemark":{"html":"<h2 id=\"introduction\"><a href=\"#introduction\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Introduction</h2>\n<p>The <code class=\"language-text\">simudyne.core.abm.supplykit</code> module provides a set of classes for quickly defining and building a network-based\nsimulation of a supply chain. The API sits on top of <code class=\"language-text\">core-abm</code> allowing you to implement supply chain models\ncharacterized by distribution facilities, the products and goods they process, and the transport methods involved in\ndriving the flow throughout the network.</p>\n<p>The Supply Chain Toolkit contains 4 new modules for representing the supply chain as a network:</p>\n<ol>\n<li><strong>Facility Agent:</strong> Agent class that inherits <code class=\"language-text\">simudyne.core.abm.Agent</code> with added functionality.</li>\n<li><strong>TransportMessage:</strong> Message class that inherits <code class=\"language-text\">simudyne.core.graph.Message</code> that contains predefined fields for\nhandling transport between Facility agents.</li>\n<li><strong>Loading Bay:</strong> Loading Bay class that contains a transport queue for holding pending incoming and outgoing <code class=\"language-text\">TransportMessage</code> and an initializable loading dock for loading and unloading cargo.</li>\n<li><strong>Product:</strong> Product class that can be extended to represent any type of unit that is moved through the system. </li>\n</ol>\n<p>These 4 modules can be extended and used to represent a supply chain network with Facility Agents that make up different\ntypes of distribution and warehouse facilities. These facilities interact by moving inventory via differentiated\nTransport Messages (Trucks, planes, etc), capturing the flow across the network.</p>\n<p>In this overview, the basic concepts, best practices, and strengths of the toolkit will be highlighted. Greater detail\non the implementation of each module, including specific best practices and code examples for using the modules are\nprovided on the individual module docs.</p>\n<h2 id=\"the-best-problems-for-applying-the-supply-chain-toolkit\"><a href=\"#the-best-problems-for-applying-the-supply-chain-toolkit\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Best Problems for Applying the Supply Chain Toolkit</h2>\n<p>The toolkit is best for studying network-level aspects of a supply chain and is most useful in solving problems related\nto operational constraints, facility placement, inventory placement, and especially good at dealing with large-scale\nsystems with significant flow between the nodes (100's of millions of units).</p>\n<p>The Simudyne SDK uses a patented graph computation approach to an agent-based model, this means that because we treat\nthe model as essentially a graph of nodes (agents) and edges (links) where communication between the agents is handled\nvia the passing of messages. This means that the SDK is best suited at treating the supply chain system as a graph but\nnot as well suited to representing the physics of motion. This doesn't mean it is not possible to simulate these types of systems, but it requires more complex features to handle real-time traffic information, etc.</p>\n<p><strong>Below are some examples comparing and contrasting the less complex and more complex aspects of the approach:</strong></p>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 33.51278600269179%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABpklEQVQoz12OTU8TURSG5y8QIgsTVrhygSYmshCUkLDRDQtIjC7EP0H8IMqWj6K4JiGsCayoIO1kSluLQT5mhilgK53OTDvTFowglsTV472XaIyLJ+fc9z3nvUdr6YbOQegZhptD0NoDV/ugvR+uD8CdJ5d6t/CvPYC2Xui4D7cewt2ncEN4XY/h9iO4cg+0kXGP0WmPsRmfV298JmbPic39ZOxdyLMJV2hlXky6jMZcXs+EvJ2/EF6V55Ml5b2MCaZcsV9haq6JdvatxOnJJd+Pj7j4EfCrGeGY6+gfFsil43zKvmcjEydvpWme+ljbBqnkEoZA6kZikQ0xc1L7gua6PpJyOaBSiQiCUNXDwyK7uza25WAJSiVP4XkV8s4BOzsWprmHbedVL2cLhSO0PdtGknccAt8nCkPqtRrbW1usp1Jk0mlShkFibY1kIsHXYpHPm5tKk29d19Wc9GWGJgNqUaSQfVitqsCP2Szx5WVWV1bQk0mymczfwFwupwIt0+Tfg2SGJgP+RxrFQkENHezv43ue+iQS3p8DZD1uNGjU6wrpy93fW0bKcD4Dvg4AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-8e416.webp 173w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-0b506.webp 345w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-58be5.webp 690w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-59b8d.webp 1035w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-4a474.webp 1380w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-10298.webp 1486w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-7e3fa.png 173w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-7f1d4.png 345w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-13856.png 690w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-045bb.png 1035w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-f46ab.png 1380w,\n/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-92f9f.png 1486w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-13856.png\"\n          alt=\"supply chain table\"\n          title=\"\"\n          src=\"/static/supply_chain_table-2f561cdc808a0d789de58ff0bf108afc-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<p>The benefits of the Simudyne SDK Supply Chain Toolkit lies in its capabilities for parallel processing of large sets of\nagents and behaviors as well as studying the network level impacts of policy decisions, network optimizations, and novel\nstrategy deployment.</p>\n<p>The weaknesses of the approach lie in the simulation of the physical movement of agents where routing is being simulated\nor the internal processes require simulating movement across a grid space. In some cases these can be abstracted or\ncalculated in a layer built on top of the SDK simulation but is not an advised use case for the toolkit.</p>\n<h2 id=\"use-case-example---simple-supply-chain\"><a href=\"#use-case-example---simple-supply-chain\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Use Case Example - Simple Supply Chain</h2>\n<p>Before checking the use case example, it is advised to read the individual module doc overview sections to get an idea\nfor the layout of the classes and fields / functions that will need to be implemented.</p>\n<p>The following section contains some use cases for using the Supply Chain Toolkit with code examples, and a provided\nsample project for reference and extension.</p>\n<p>The model provided below is a simple example using the toolkit where 2 facilities are extended from the <code class=\"language-text\">Facility.class</code> agent (<code class=\"language-text\">FacilityTypeA</code> and <code class=\"language-text\">FacilityTypeB</code>).</p>\n<p><strong>Facility Type A:</strong> Generates <code class=\"language-text\">Product</code> objects, processes them, and ships them to Facility Type B</p>\n<p><strong>Facility Type B:</strong> Receives <code class=\"language-text\">Product</code> object shipments from Facility Type A and stores them in inventory.</p>\n<a href=\"https://simudynecontent.blob.core.windows.net/$web/2.6.0-RC4/supply_chain_2.6.0-RC4.zip\" class=\"ui button primary\" download>\nDownload Sample Model</a>\n<p>The following subsections are divided into different ways in which the toolkit can be used and are based on the\nhigh-level implementation provided in the sample code. Reference the individual module docs for more specific examples\nfor optimizing your code for different modelling scenarios.</p>\n<p>The flow of the model can be modified as desired, but the general flow follows the below steps:</p>\n<ol>\n<li>Process Outbound Loading Bay</li>\n<li>Send Outbound &#x26; Receive Inbound</li>\n<li>Process Inbound Loading Bay</li>\n</ol>\n<p>The below diagram highlights the general flow of the model:</p>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 32.0855614973262%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA/0lEQVQY022Qb07CQBDFewKP4lX94A28i/pFQyTGUgsWEkwbQAoF2t3un5/jVqUQJpnsy+ybmTcvcg6cB60d3v/i0mOVAAknBa0NjdJY60LNC9GY7j3PqNzUpOmEwWBINp1RbTUfN7B6EII05/matzglHo1Zlwe68L3shwxslGW3azjULVVV0xrH5LGg/NwHSjadkySxKLWISGlxLL48t3dQLBGlhsWyDP2tqI64EHW7xzgdcFGsGCXvKNXK2Z2K51fL1bXh/slQ5HNeholwMjZbRXTJh/8DBFtL2KzbH9z9WWtIxzNZooLvPtRc8DvqN/8NOx3sTzw6/vU9PHK+AX4e0IPe8qELAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-8e416.webp 173w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-0b506.webp 345w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-58be5.webp 690w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-59b8d.webp 1035w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-4a474.webp 1380w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-f3752.webp 1870w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-7e3fa.png 173w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-7f1d4.png 345w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-13856.png 690w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-045bb.png 1035w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-f46ab.png 1380w,\n/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-ef82d.png 1870w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-13856.png\"\n          alt=\"supply demo diagram\"\n          title=\"\"\n          src=\"/static/supply_demo_diagram-363f01d39ac0fd29ce92e5603a6fd58e-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<h3 id=\"data-preparation\"><a href=\"#data-preparation\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data Preparation</h3>\n<p>Before laying out the model classes, a good starting point is to prepare the data for ingestion into the model. This data will be used for setup of the agents and the topology of the network.</p>\n<p>This follows the same structure as the sections <a href=\":version/reference/agents/creation\">Agent Creation</a> &#x26; <a href=\":version/reference/agents/connection\">Agent Connection</a>, the only difference is that the Facility Agent has custom fields that need to be added to your CSV file that include the <code class=\"language-text\">name</code>, <code class=\"language-text\">latitude</code>, and <code class=\"language-text\">longitude</code>.</p>\n<p>In the sample model you can find the sample data files provided. The 2 key steps are laid out below:</p>\n<ol>\n<li>Generate Agent Source files: create columns for <code class=\"language-text\">id</code>, <code class=\"language-text\">name</code>, <code class=\"language-text\">latitude</code>, and <code class=\"language-text\">longitude</code> (note that each unique id in the <code class=\"language-text\">id</code> column must be unique across all agent groups of all types)</li>\n<li>Generate Topology File: create a <code class=\"language-text\">from</code> and <code class=\"language-text\">to</code> column, that contains all the connections expected between the facilities.</li>\n</ol>\n<p>Sample Facility Source File\n\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 541px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 23.475046210720883%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA+ElEQVQY0x2Q6wqCUBCEff8nEoQIo8J7XsJQ8QIWaIZp3v7IxOwBOevO2W+GVZIkQZ7n6LoOn88HjuPgeDyiKAq832+M4yj64XCAruu43++Ypglt28L3fVyvVxiGIRp7yuv1wvf7xTAMWNcVdV0jjmMZYn9ZFvk3TROe5yEMQ9H4nqbn81nMGIIshQAO8tu2DX3fI01T7PsuNVOfTicBcZg1k1PLskyMXNcVKI2VqqrQNI08+v1+UlNgMvboStDj8RCYqqooy1JWZFkWLpcLoiiS27ZtKAQwPgFMNc+zQHhYU7vdbgLlrjRNk3TcLYFBEMgemfL5fOIPVe1nNcxtAm0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-a9cfa.webp 173w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-51e59.webp 345w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-0ed85.webp 690w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-7fa4d.webp 1035w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-d1cc6.webp 1082w\"\n          sizes=\"(max-width: 541px) 100vw, 541px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-86457.png 173w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-0164f.png 345w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-23faf.png 690w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-97b31.png 1035w,\n/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-c43c6.png 1082w\"\n          sizes=\"(max-width: 541px) 100vw, 541px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-23faf.png\"\n          alt=\"facility A source\"\n          title=\"\"\n          src=\"/static/facility_A_source-26e30478f44755d43b85513c4791c7ca-23faf.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<p>Sample Topology File\n\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 266px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 128.57142857142856%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAACXBIWXMAABYlAAAWJQFJUiTwAAADh0lEQVRIx2XVZ0ukSxAF4Pn7fhdEvylmzKCuggGzmN0155x1zWvs5amlh7nchmb67e6qOqdOdU1hd3c3bW5upu3t7XR2dpYODg7SxcVF2traiu/r6+s4Oz4+TldXVzGdnZycpMPDw1gfHR2ly8vLxFfh/f09TU1NpR8/fqTe3t5UWVkZB29vb+nr6ysZ/f39qa2tLeXx/Pycfv36FXt1dXWptrY2NTQ0hOOC6Kenp2lvby+Qrq+vR3T75+fn6e7uLtYrKyuB4ubmJu4xhprd2tpaTPcKjAxIXcyo0P7z50+s0VxcXEzf39/p8/MznDq319PTk0ZGRtLExEQ4L0DnEhoDAwPp4eEhvuXPHifWEFoLIsD+/n7q6upKVVVVqb29PdbYBeX7+/u4xPnt7W36/ft32tnZCYooQwOVs5wCYgmU7dwRpOCCIfrY2Fj8Gpzm9fLyclArFUWeKyoqUllZWQhDlMihvIkMzfz8fAjh235eU31paSlQmc44nJ2dTePj45FLQYNyFuX19TXqijiEQcGeQdGcw4+Pj6DpnMocAaKMomzkJlMeHBwMhwZkxDHm5uZSd3d3kfLT01M46+vrS01NTamxsTG1trb+n3Ku+Fxr0Fvbk/hSyvY4JQRx3I2ycWB4GVDk2mNoz1hYWIiSykxUBUfyyoYgnZ2dEagAlbxQe3JyMhTkVHQ1ySl0P3/+jJyaELETyNtnRyClVqDg4+Nj0PZ8UPQNPpTyxUh0+8rJGYqrq6txxm5jY+Nfc+AoPz2PPT89hnk9MzMTlErrEEKvw6ypqUnNzc3ReQo8c4pWTjZk9nP78qukcvtyTw79Qms6D8oMDCUyNDRUFAJ1uTVcnp6eLiIkCsoKWdtTPsPDw/+enstEIArK0Pq2j7ZUMBwdHY19OYVYzVG+o6MjmgO15bQArpxwRFnRJV80e5QWTCqc+Xbm2/RiPEO/QBSbg1FdXV18KYzz0NFbWlqK30qHEw2jvLw87DSIeCmivby8FNsSRxArB3vWuaNDbkICkfuEMPlh8x+HcoKm7+wwNw2icM6hkjF1aS2PnRyrjGJzoLKayipzXFqT0OTBKcqEQJcw6EfZUFDpoGUDFbWW/6ysIfQKnBECEsyglCLpsA6HVDPUHPlLW1Rp3WmipaLY83ogxEwthsoUFFGj1Ndy55UfDcFZ7szWak0+5U6XYVNfXx9PT3H/Bd2VX/QyAuQSAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/topology-60cee88fc4b1e6f201bf4b014fea0180-77ebd.webp 173w,\n/static/topology-60cee88fc4b1e6f201bf4b014fea0180-9863e.webp 345w,\n/static/topology-60cee88fc4b1e6f201bf4b014fea0180-6ea56.webp 532w\"\n          sizes=\"(max-width: 266px) 100vw, 266px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/topology-60cee88fc4b1e6f201bf4b014fea0180-5cf8b.png 173w,\n/static/topology-60cee88fc4b1e6f201bf4b014fea0180-b1c0c.png 345w,\n/static/topology-60cee88fc4b1e6f201bf4b014fea0180-e95ec.png 532w\"\n          sizes=\"(max-width: 266px) 100vw, 266px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/topology-60cee88fc4b1e6f201bf4b014fea0180-e95ec.png\"\n          alt=\"topology\"\n          title=\"\"\n          src=\"/static/topology-60cee88fc4b1e6f201bf4b014fea0180-e95ec.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<h3 id=\"main-supply-chain-model-class\"><a href=\"#main-supply-chain-model-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Main Supply Chain Model Class</h3>\n<p>The Supply Chain Model Class is defined in the same manner as any other model built in the Simudyne SDK.</p>\n<p>Just like how other models are established in the Simudyne SDK, your main model class will contain the standard <code class=\"language-text\">init()</code>, <code class=\"language-text\">setup()</code>, and <code class=\"language-text\">step()</code> functions.</p>\n<p>The below code represents a basic structure for a <code class=\"language-text\">setup()</code> method for generating the agents and environment using the\nSupply Chain Model Class.</p>\n<p class=\"code-header\">SupplyChainDemo.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">SupplyChainDemo</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>SupplyChainDemo<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n   <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Globals</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span> <span class=\"token punctuation\">{</span>\n       <span class=\"token comment\">// map for going from String Name of facility to long address</span>\n       <span class=\"token keyword\">public</span> Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Long<span class=\"token punctuation\">></span></span> destinationAddresses<span class=\"token punctuation\">;</span>\n   <span class=\"token punctuation\">}</span>\n\n   <span class=\"token annotation punctuation\">@Override</span>\n   <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">registerAgentTypes</span><span class=\"token punctuation\">(</span>FacilityTypeA<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> FacilityTypeB<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token function\">registerLinkTypes</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>AToBLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   <span class=\"token punctuation\">}</span>\n\n   <span class=\"token annotation punctuation\">@Override</span>\n   <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      CSVSource facilityTypeASource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"data/facility_A_source.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      \n      <span class=\"token comment\">// temp map for populating globals name -> long id map (makes sending transport messages easier)</span>\n      Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Long<span class=\"token punctuation\">></span></span> destAddr <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">HashMap</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>FacilityTypeA<span class=\"token punctuation\">></span></span> facilityTypeAGroup <span class=\"token operator\">=</span> <span class=\"token function\">loadGroup</span><span class=\"token punctuation\">(</span>FacilityTypeA<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> facilityTypeASource<span class=\"token punctuation\">,</span> fA <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n         fA<span class=\"token punctuation\">.</span>outboundLoadingBay <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">LoadingBay</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n         destAddr<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>fA<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">,</span> fA<span class=\"token punctuation\">.</span><span class=\"token function\">getID</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n      CSVSource facilityTypeBSource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"data/facility_B_source.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>FacilityTypeB<span class=\"token punctuation\">></span></span> facilityTypeBGroup <span class=\"token operator\">=</span> <span class=\"token function\">loadGroup</span><span class=\"token punctuation\">(</span>FacilityTypeB<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> facilityTypeBSource<span class=\"token punctuation\">,</span> fB <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n         fB<span class=\"token punctuation\">.</span>inboundLoadingBay <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">LoadingBay</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n         destAddr<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>fB<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">,</span> fB<span class=\"token punctuation\">.</span><span class=\"token function\">getID</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>destinationAddresses <span class=\"token operator\">=</span> destAddr<span class=\"token punctuation\">;</span>\n\n      CSVSource topology <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"data/topology.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      facilityTypeAGroup<span class=\"token punctuation\">.</span><span class=\"token function\">loadConnections</span><span class=\"token punctuation\">(</span>facilityTypeBGroup<span class=\"token punctuation\">,</span> Links<span class=\"token punctuation\">.</span>AToBLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> topology<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   <span class=\"token punctuation\">}</span></code></pre></div>\n<p>The <code class=\"language-text\">FacilityTypeA.class</code> and <code class=\"language-text\">FacilityTypeB.class</code> are extending the <code class=\"language-text\">Facility.class</code> and uses a CSVSource to generate the agent fields and the agent topology.</p>\n<p>In the sample model files you will also see the dummy data used to generate the agents.</p>\n<p>The 2 different facility groups also have <code class=\"language-text\">LoadingBay</code> classes initialized to handle inbound and outbound <code class=\"language-text\">TransportMessage</code>.</p>\n<p>The <code class=\"language-text\">step()</code> method has the following sequences of behaviors defined that call the underlying functions from the <code class=\"language-text\">Facility.class</code></p>\n<p class=\"code-header\">SupplyChainDemo.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>FacilityTypeA<span class=\"token punctuation\">.</span>processOutboundLoadingBay<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>FacilityTypeA<span class=\"token punctuation\">.</span>departOutboundTransport<span class=\"token punctuation\">,</span> FacilityTypeB<span class=\"token punctuation\">.</span>receiveInboundTransport<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>FacilityTypeB<span class=\"token punctuation\">.</span>processInboundLoadingBay<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The specific behaviors that drive these actions are defined in the Facility implementation in the next section.</p>\n<h3 id=\"facility-classes\"><a href=\"#facility-classes\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Facility Classes</h3>\n<p>The following functionality implemented is simply an example and there are numerous ways to define behaviors.</p>\n<p>2 different Facility classes have been implemented:</p>\n<ol>\n<li>Facility Type A - generates products and ships them out</li>\n<li>Facility Type B - receives product shipments and stores them in inventory</li>\n</ol>\n<h4 id=\"facility-type-a\"><a href=\"#facility-type-a\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Facility Type A</h4>\n<p>Facility Type A represents an abstract type of shipping facility where products or units originate and are sent to other\nfacilities. For the purposes of this model there is a single Facility Type A and a single Facility Type B.</p>\n<p>This facility only handles shipping and implements an <code class=\"language-text\">OutboundLoadingBay</code> and sends <code class=\"language-text\">TransportMessage</code> messages.</p>\n<p>The first behavior this facility executes is the <code class=\"language-text\">processOutboundLoadingBay</code> action that implements the following\nmethods.</p>\n<p class=\"code-header\">FacilityTypeA.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">protected</span> <span class=\"token keyword\">void</span> <span class=\"token function\">processOutboundLoadingBay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// pull trucks from transport queue</span>\n        <span class=\"token function\">pullTrucksFromQueue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token comment\">// generate products</span>\n        <span class=\"token keyword\">long</span> processingTime <span class=\"token operator\">=</span> <span class=\"token function\">getContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getTick</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getNextInt</span><span class=\"token punctuation\">(</span><span class=\"token number\">60</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        processedProducts<span class=\"token punctuation\">.</span><span class=\"token function\">computeIfAbsent</span><span class=\"token punctuation\">(</span>processingTime<span class=\"token punctuation\">,</span> k <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">addAll</span><span class=\"token punctuation\">(</span><span class=\"token function\">generateProducts</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>processedProducts<span class=\"token punctuation\">.</span><span class=\"token function\">containsKey</span><span class=\"token punctuation\">(</span><span class=\"token function\">getContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getTick</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Product<span class=\"token punctuation\">></span></span> readyToDepart <span class=\"token operator\">=</span> processedProducts<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>processingTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>readyToDepart <span class=\"token operator\">!=</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                readyToDepart<span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>product <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                String destination <span class=\"token operator\">=</span> <span class=\"token string\">\"W\"</span><span class=\"token punctuation\">;</span>\n                Optional<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TransportMessage<span class=\"token punctuation\">></span></span> potentialTransport <span class=\"token operator\">=</span> outboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">values</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>transportMessage <span class=\"token operator\">-</span><span class=\"token operator\">></span> transportMessage <span class=\"token operator\">!=</span> null <span class=\"token operator\">&amp;&amp;</span> transportMessage<span class=\"token punctuation\">.</span>destination <span class=\"token operator\">==</span> destination<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">findAny</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>potentialTransport<span class=\"token punctuation\">.</span><span class=\"token function\">isPresent</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                potentialTransport<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>objectContents<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>product<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token function\">generateTruck</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"W\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token function\">pullTrucksFromQueue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n     <span class=\"token punctuation\">}</span>\n   <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The first function <code class=\"language-text\">pullTrucksFromQueue()</code>, pulls trucks from the transport queue using the logic below. The above functionality calls a function called <code class=\"language-text\">generateProducts()</code> which just randomly creates Product objects to be added to the <code class=\"language-text\">processedProducts</code> map where a random tick in the future is the key and a list of Product objects is the value. There is also a <code class=\"language-text\">generateTruck()</code> method that can be seen in the sample model that generates a new <code class=\"language-text\">TransportMessage</code> for any location that cannot be found in the outbound loading dock. </p>\n<p class=\"code-header\">FacilityTypeA.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">    <span class=\"token comment\">// placeholder function for handling transport queue</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">pullTrucksFromQueue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>outboundLoadingBay<span class=\"token punctuation\">.</span>transportQueue<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">></span></span> emptyBays <span class=\"token operator\">=</span> <span class=\"token function\">findEmptyBays</span><span class=\"token punctuation\">(</span>outboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>emptyBays<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">0</span> <span class=\"token operator\">&amp;&amp;</span> outboundLoadingBay<span class=\"token punctuation\">.</span>transportQueue<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">long</span> nextQueuePosition <span class=\"token operator\">=</span> Collections<span class=\"token punctuation\">.</span><span class=\"token function\">min</span><span class=\"token punctuation\">(</span>outboundLoadingBay<span class=\"token punctuation\">.</span>transportQueue<span class=\"token punctuation\">.</span><span class=\"token function\">keySet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                TransportMessage nextTruck <span class=\"token operator\">=</span> outboundLoadingBay<span class=\"token punctuation\">.</span>transportQueue<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>nextQueuePosition<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token keyword\">int</span> emptyBay <span class=\"token operator\">=</span> emptyBays<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                outboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>emptyBay<span class=\"token punctuation\">,</span> nextTruck<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                outboundLoadingBay<span class=\"token punctuation\">.</span>transportQueue<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span>nextQueuePosition<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// Placeholder function for finding empty bays</span>\n<span class=\"token keyword\">public</span> List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">></span></span> <span class=\"token function\">findEmptyBays</span><span class=\"token punctuation\">(</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">,</span> TransportMessage<span class=\"token punctuation\">></span></span> loadingDocks<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">></span></span> emptyBays <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>Map<span class=\"token punctuation\">.</span>Entry<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">,</span> TransportMessage<span class=\"token punctuation\">></span></span> bay <span class=\"token operator\">:</span> loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">entrySet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>bay<span class=\"token punctuation\">.</span><span class=\"token function\">getValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    emptyBays<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>bay<span class=\"token punctuation\">.</span><span class=\"token function\">getKey</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">return</span> emptyBays<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The logic above pulls trucks based on queue position and places them in the <code class=\"language-text\">OutboundLoadingBay</code> so that they can be loaded with items ready to depart.</p>\n<p>Once <code class=\"language-text\">processOutboundLoadingBay()</code> is executed, the next function called in the run sequence is also a behavior of Facility Type A called <code class=\"language-text\">departTransport()</code> which can be seen below:</p>\n<p class=\"code-header\">FacilityTypeA.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">protected</span> <span class=\"token keyword\">void</span> <span class=\"token function\">departTransport</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TransportMessages<span class=\"token punctuation\">.</span>TransportMessage<span class=\"token punctuation\">></span></span> departedTransport <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        outboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">values</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>transport <span class=\"token operator\">-</span><span class=\"token operator\">></span> transport <span class=\"token operator\">!=</span> null <span class=\"token operator\">&amp;&amp;</span> transport<span class=\"token punctuation\">.</span>departureTime <span class=\"token operator\">==</span> <span class=\"token function\">getContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getTick</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>t <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            departedTransport<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">send</span><span class=\"token punctuation\">(</span>TransportMessages<span class=\"token punctuation\">.</span>TransportMessage<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> tMsg <span class=\"token operator\">-</span><span class=\"token operator\">></span> tMsg<span class=\"token punctuation\">.</span><span class=\"token function\">constructWithProducts</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">,</span>\n                t<span class=\"token punctuation\">.</span>transportType<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">.</span>weightCapacity<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">.</span>volumeCapacity<span class=\"token punctuation\">,</span>\n                t<span class=\"token punctuation\">.</span>weight<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">.</span>volume<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">.</span>objectContents<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">.</span>arrivalTime<span class=\"token punctuation\">,</span>\n                t<span class=\"token punctuation\">.</span>departureTime<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">.</span>origin<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">.</span>destination\n            <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>destinationAddresses<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">.</span>destination<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        outboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">entrySet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>bay <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>departedTransport<span class=\"token punctuation\">.</span><span class=\"token function\">contains</span><span class=\"token punctuation\">(</span>bay<span class=\"token punctuation\">.</span><span class=\"token function\">getValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                bay<span class=\"token punctuation\">.</span><span class=\"token function\">setValue</span><span class=\"token punctuation\">(</span>null<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Here the facility is simply checking to see if any of the <code class=\"language-text\">TransportMessage</code> objects in the loading dock are ready to depart and sends them to their destination where Facility Type B executes its behaviors.</p>\n<h4 id=\"facility-type-b\"><a href=\"#facility-type-b\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Facility Type B</h4>\n<p>Facility Type B represents an abstract facility that only receives shipments and stores them in inventory.</p>\n<p>This facility implements an <code class=\"language-text\">InboundLoadingBay</code> only and handles incoming <code class=\"language-text\">TransportMessage</code> messages.</p>\n<p>The first function that is implemented receives <code class=\"language-text\">TransportMessage</code> that have been sent from Facility Type A and places them in the <code class=\"language-text\">TransportQueue</code> of the <code class=\"language-text\">InboundLoadingBay</code>.</p>\n<p class=\"code-header\">FacilityTypeB.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">protected</span> <span class=\"token keyword\">void</span> <span class=\"token function\">receiveInboundTransport</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">receiveInboundTransport</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Once inbound shipments have arrived, they are placed into the <code class=\"language-text\">TransportQueue</code> where the next behavior checks to see whether any messages have met the time condition necessary for them to be processed. The message has been received by the agent at this point, however an arrival time at some tick in the future is in the message and it will not be available at the loading dock until this time has passed.</p>\n<p class=\"code-header\">FacilityTypeB.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">protected</span> <span class=\"token keyword\">void</span> <span class=\"token function\">processInboundLoadingBay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">pullArrivingTransport</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">unloadTransportCargo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The <code class=\"language-text\">pullArrivingTransport()</code> function checks to see if any messages have an arrival time equal to or before the <code class=\"language-text\">getContext().getTick()</code> (current tick) as below:</p>\n<p class=\"code-header\">FacilityTypeB.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">pullArrivingTransport</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TransportMessages<span class=\"token punctuation\">.</span>TransportMessage<span class=\"token punctuation\">></span></span> arrivedTransport <span class=\"token operator\">=</span> inboundLoadingBay<span class=\"token punctuation\">.</span>transportQueue<span class=\"token punctuation\">.</span><span class=\"token function\">entrySet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>entry <span class=\"token operator\">-</span><span class=\"token operator\">></span> entry<span class=\"token punctuation\">.</span><span class=\"token function\">getKey</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> <span class=\"token function\">getContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getTick</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>Map<span class=\"token punctuation\">.</span>Entry<span class=\"token operator\">:</span><span class=\"token operator\">:</span>getValue<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">collect</span><span class=\"token punctuation\">(</span>Collectors<span class=\"token punctuation\">.</span><span class=\"token function\">toList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>arrivedTransport<span class=\"token punctuation\">.</span><span class=\"token function\">isEmpty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">></span></span> emptyBays <span class=\"token operator\">=</span> <span class=\"token function\">findEmptyBays</span><span class=\"token punctuation\">(</span>inboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>arrivedTransport<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">0</span> <span class=\"token operator\">&amp;&amp;</span> emptyBays<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    TransportMessages<span class=\"token punctuation\">.</span>TransportMessage t <span class=\"token operator\">=</span> arrivedTransport<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token keyword\">int</span> emptyBay <span class=\"token operator\">=</span> emptyBays<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    inboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>emptyBay<span class=\"token punctuation\">,</span> t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>This takes into account available loading bays to ensure that there a available bays to process the arriving shipment.</p>\n<p>The final step is to unload the trucks and place the inbound items in inventory as can be seen below in the implementation of <code class=\"language-text\">unloadTransportCargo()</code></p>\n<p class=\"code-header\">FacilityTypeB.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">unloadTransportCargo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TransportMessages<span class=\"token punctuation\">.</span>TransportMessage<span class=\"token punctuation\">></span></span> processedtrucks <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        inboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">values</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>dock <span class=\"token operator\">-</span><span class=\"token operator\">></span> dock <span class=\"token operator\">!=</span> null<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>t <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Product<span class=\"token punctuation\">></span></span> cargo <span class=\"token operator\">=</span> t<span class=\"token punctuation\">.</span>objectContents<span class=\"token punctuation\">;</span>\n            cargo<span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>p <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                nbUnitsProcessed<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n                totalShipmentCost <span class=\"token operator\">=</span> p<span class=\"token punctuation\">.</span>weight <span class=\"token operator\">*</span> shipmentCostPeLb<span class=\"token punctuation\">;</span>\n                inventory<span class=\"token punctuation\">.</span><span class=\"token function\">computeIfAbsent</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">.</span>productID<span class=\"token punctuation\">,</span> k <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            processedtrucks<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        inboundLoadingBay<span class=\"token punctuation\">.</span>loadingDocks<span class=\"token punctuation\">.</span><span class=\"token function\">entrySet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>bay <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>processedtrucks<span class=\"token punctuation\">.</span><span class=\"token function\">contains</span><span class=\"token punctuation\">(</span>bay<span class=\"token punctuation\">.</span><span class=\"token function\">getValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                bay<span class=\"token punctuation\">.</span><span class=\"token function\">setValue</span><span class=\"token punctuation\">(</span>null<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"conclusion\"><a href=\"#conclusion\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>The provided code and classes can be extended to any number of unique facility types and unique forms of transportation to best represent the desired real-world supply chain.</p>\n<p>Check out the individual model docs for the classes in the Supply Chain Toolkit for best practices on different scenarios and how to improve performance using multi-threaded processing techniques.</p>\n<ol>\n<li><a href=\":version/supply_chain_toolkit/facility\">Facility</a></li>\n<li><a href=\":version/supply_chain_toolkit/transport_message\">Transport Message</a></li>\n<li><a href=\":version/supply_chain_toolkit/loading_bay\">Loading Bay</a></li>\n<li><a href=\":version/supply_chain_toolkit/product\">Product</a></li>\n</ol>","headings":[{"value":"Introduction","depth":2},{"value":"The Best Problems for Applying the Supply Chain Toolkit","depth":2},{"value":"Use Case Example - Simple Supply Chain","depth":2},{"value":"Data Preparation","depth":3},{"value":"Main Supply Chain Model Class","depth":3},{"value":"Facility Classes","depth":3},{"value":"Facility Type A","depth":4},{"value":"Facility Type B","depth":4},{"value":"Conclusion","depth":2}],"frontmatter":{"title":"Supply Chain Toolkit Overview","toc":null,"experimental":false}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.6/docs/supply_chain_toolkit/supply_toolkit_overview.md","versioned":false,"version":"2.6","kind":"docs","pagePath":"/supply_chain_toolkit/supply_toolkit_overview","chronology":{"prev":{"name":"Supply Chain Tool Kit","path":"/supply_chain_toolkit"},"next":{"name":"Facility Agent","path":"/supply_chain_toolkit/facility"}},"lastUpdated":"2026-04-21T13:56:54.867Z"}}