{"data":{"markdownRemark":{"html":"<p><code class=\"language-text\">Actions</code> and <code class=\"language-text\">Sequences</code> are used to define a sequence of actions for the agents to follow at every step, or at setup.</p>\n<p>A <code class=\"language-text\">Sequence</code> is a list of <code class=\"language-text\">actions</code> that are executed consecutively. Sequences are composable, which means a sequence can be a list of other sequences as well as actions. Multiple sequences can be run in a single <code class=\"language-text\">setup()</code> or <code class=\"language-text\">step()</code>.</p>\n<p>Every sequence needs to be run in order for the sequence to be executed.</p>\n<p class=\"code-header\">Creating and running an empty Sequence  (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\">MyClass</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>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n\n  run <span class=\"token punctuation\">(</span>Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</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 punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Actions have to be created for a specific class. It is best practice to create actions inside the class of the Agent the action is being defined for.</p>\n<p>When creating an action, two parameters need to defined.</p>\n<ol>\n<li>The agent that will execute this action</li>\n<li>The function to be executed by the agent</li>\n</ol>\n<p class=\"code-header\">Creating actions and adding them to a sequence  (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\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>AgentA<span class=\"token punctuation\">></span></span> sendMessageToAgentB <span class=\"token operator\">=</span>\n  Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> agentA <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">/** send message */</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>AgentB<span class=\"token punctuation\">></span></span> recieveMessage <span class=\"token operator\">=</span>\n  Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentB<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> agentB <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">/** recieve message */</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nrun <span class=\"token punctuation\">(</span>\n\tSequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n  \tsendMessageToAgentB<span class=\"token punctuation\">,</span>\n  \trecieveMessage\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>The <code class=\"language-text\">run</code> method can also take a list of actions which it will execute as though its a sequence, so the above code could also be written like this.</p>\n<p class=\"code-header\">(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\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>AgentA<span class=\"token punctuation\">></span></span> sendMessageToAgentB <span class=\"token operator\">=</span>\n  Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> agentA <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">/** send message */</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>AgentB<span class=\"token punctuation\">></span></span> recieveMessage <span class=\"token operator\">=</span>\n  Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentB<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> agentB <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">/** recieve message */</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nrun <span class=\"token punctuation\">(</span>\n  \tsendMessageToAgentB<span class=\"token punctuation\">,</span>\n  \trecieveMessage\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"ui segment error message\">\nAn action will only be executed by an agent if that agent has received a message. If an action needs to be executed by all agents of a type, <b>even if some of those agents have not received a message</b>, this action needs to be at the beginning of a new sequence.\n</div>\n<p class=\"code-header\">Message passing(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">//If AgentB isnt sent message, it will not do other processing</span>\nrun <span class=\"token punctuation\">(</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">conditionallySendMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">recieveMessageActionAndDoOtherProcessing</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>\n\n  <span class=\"token comment\">//Split other processing into another sequence to ensure all AgentB do processing</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">conditionallySendMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">recieveMessageAction</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>\n\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doOtherProcessing</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></code></pre></div>\n<div class=\"ui segment warning message\">\n<h4>Messages cannot be passed between sequence runs</h4>\nAll message passing and receiving needs to be done within a single sequence run. (This does not apply to sequences that are composed of other sequences, messages will be passed between sequences called from inside another sequence.)\n</div>\n<p class=\"code-header\">Message passing (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">//Message will be passed from AgentA to AgentB</span>\nrun <span class=\"token punctuation\">(</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">sendMessageAction</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">recieveMessageAction</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>\n\n  <span class=\"token comment\">//Message will NOT be passed from AgentA to AgentB</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">sendMessageAction</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>\n\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">recieveMessageAction</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></code></pre></div>\n<h3 id=\"executing-action-in-parallel\"><a href=\"#executing-action-in-parallel\" 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>Executing Action in Parallel</h3>\n<p>In all the sequences we have shown until now, the actions happen one after the next, like in the following diagram.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/line-91ed096cb72adc5607c03fd2afb9bd65-69bd3.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 113px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 138.29787234042556%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAABcSAAAXEgFnn9JSAAAEmElEQVRIx61VWVNiRxT29+QH5MfkOb8glal5SNW8TCaJmXErnXFQHCpug8o6KMtFRcSVHVlUQAUUwQ2VRUGWL+f27SuYGZOX3Kqv+pzTh8Pp7u/r7gJ9rVYL/8fXajbRJRdrPjRxsxPHtT+C60D0a/ij346L8EVwd3zB6nTJxXILVhQCBhSTVtzGzU+RMKOYsDB8yy8mLchZZlCMHUoFb3YSrBiwT4gRdglxwh6P7fJ4mMdkP8Z9MdeHjFEnFRSXeZey47ayAfX074hFtXCuKBEMqLGyMgrH8giMhj7cVTbh3p5g8zbre3jckwzuzXGqEkV0RiUVLNAe3GcWcXq+hPkvA1B8/IVhfU3FfqjX9cAuDOPocB5Tk2+w6hyD1TKEedMAw7JdwbrdmVZKBW+jh7jc0vKlJFGsbtK4w5ezx5cmLivCcyIdWyNvTxArfX1iQemUz+xOnK1rkQvocU7I+3U49WofkfMQZNunI3TMUa6rvxtOjalNG7aXuylEFhzw6qzw620MPq0VgYVlbL1VwT9rht8oPM5JEODRWLDrC7PWumRii6R89qs94HjSglI4+R/MbvGCzXaXzTqhwVEX/4jGWhOW737AwYiJ5TTIb+eA5ciNdcnFapdFnC25kLMJyAv2R+SsAs5XVxF+1YP0Zw3OHA7KobgggeWRfx3cayulXq4i+0WPe6KNSNBGfbuNxja14WGkbrW8aDxsUWdu6spDo5TTbLpxsTaLgjfClUJ7cxM2MYpUyjJlolwZYVRrblxdrZAd4vEd+iMfz4tw+HGg08g8TKIUI03eb6K/72csLSkwMfEaApHZaOzD4OBLfCSi53J26PU9cDhGMTn5K0xEaoOhl/licd+4UtZyHKV9OsW6G9GwBlrNO8yo/0AkPIdYTAuX6xO8nimcnNhgJeWEgjPwkL+1Nc6kl0ya2Eo8KoVU8D5XoNtilrUtsT7cIXp5jHN1JDoujTgfk3QX2GD+c0A8ZenMxasnY9AgplMhpB4ljCD4WSGB7JBqCKFpBQJyrGMuMDEM0+tuJGL7T3lYrzaQPzhGOpZEevdAAtmZ+BF21QKOvFFk9g4pdvA4nyE7ReNtuSLTRirWajSeF0CpgujLIVxYN/9VKM1Gsy09FiAF1Mu1J3ggjoqKsH//I1ITAst7uL3/Kk/+HvdQZHrWRLeIXf8Ugg75ZSPSM3/h1KJBftHwGO/MyZkF1Ev3UoeVVJ4kNENWgJM0yEkb6iBvmMeDPB7ho2TfnYoyXeRPAN3Y5UMbmjSZ2Deyq/76ehW3N2u4vHAgmfiCvZgOtaob5fIGi6eOFlC4cjL7mkZRQQndFH8C6E2ppheRPVvEQP8LTE//hoGBFzCbB5nd2/sTUqkFXFBxpfIVU9LU1BvMznZDTQLQzr1lHA1NKeU3JYoSPY1VInaxuA4XvSVRUsjNjQtXBSdOaTnpND2bpXUc0LuSFZeXX8RJVmBzhYKTkd33aVgqWCuUkDXOoVFycbX4+X76OmzZD3b4AT6/g/yGGvPvhtqnXM0XkDFZ4R4bg+vDh2cwDNf7f8SGh7E6OATLoBL5/Dn+BhPAyffnczinAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/line-91ed096cb72adc5607c03fd2afb9bd65-df41d.webp 173w,\n/static/line-91ed096cb72adc5607c03fd2afb9bd65-cd795.webp 235w\"\n          sizes=\"(max-width: 113px) 100vw, 113px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/line-91ed096cb72adc5607c03fd2afb9bd65-60b22.png 173w,\n/static/line-91ed096cb72adc5607c03fd2afb9bd65-69bd3.png 235w\"\n          sizes=\"(max-width: 113px) 100vw, 113px\"\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/line-91ed096cb72adc5607c03fd2afb9bd65-69bd3.png\"\n          alt=\"line\"\n          title=\"\"\n          src=\"/static/line-91ed096cb72adc5607c03fd2afb9bd65-69bd3.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p>It is also possible to have two actions happening at the same time, as in the diagram below. Here, AgentA can send a message that both AgentB and AgentC receive and process at the same time. They can then both send a message to AgentA to process.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/split-dd31ff670e3c3aa724c461519960bee2-778a7.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 283px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 73.51443123938878%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABcSAAAXEgFnn9JSAAAC5UlEQVQ4y3WU31MaVxTH+Us705nOdPral3amHQWUpHnoWxVB8pCXThJ0tCKJAZQm00yrNYoCisDuwqILbFDwF8Iuy6fHJR2lqWfmO+fe3e85957zvfd6+I8Nh0PXD2569Os6tllz0W9UsUwdq6nTM3Qcyx7j/2uehxJ2a0cY1VVqlTgVJcbHehJdW8WorXF6kuBcK37iO+MJbxMMBoM72DYD4VzrRUrZl3z48xkHmeeUi8tkP/xKIRtFzS1QzfztJrAtayz+sx2O2UWbYcdkYBp0/tjEOWu66DWMB0M8tVqNmZkZZmdnCQpufWg+THAuyNz8PKHIU+aCIZ589a07Ds1HCEcihMIhGYeEP0MwOCs5fiEifE+73Sa1vk4ylRZsuH7hyRxv4m/ceSJ5+y/F+tu06xMJma+nebUYY/HnMKnf35FMbrjcjXT6XsmdE2ncseCE7vs0tCuj+Vn1rh6rB+c63NShXuTmr7eI/NIa4XSMT6K4iqro6jIHR1Fy+eeox3HK6hIlZYmm+ZpmfkuaL3HKJoXSSwpHCxTln9FKcliIotViNPU4Z0pptMN+y8Q4XCO39YJSZklUXHG9sr9MNSvY23ZXv9YLlDOLHG5LEuFUDmIUdxap5FdQtpcwNe2u5OFVF0v62W93qMffcdMwsTodrs3WmIqDzgX25QVXqk5j7T321SW91ind086oZEVRmJiYwDvlxz89jT8Q4Lsvvsbn9eF/FGAqMI3X58UnmPRO4puewv/4EZM//Mj3X37D1E+P3TifxAck1tPr9dBkq6qqChRUWaByXEPVKihFBaWsUsofsRmOopTU0TeBVq0KT3f5bqx47X7Jn9nlObaxi/NxH8vY4XI3JQd8D7uZwTrJiJLd/z/Yt1fPcZx7GOCI9NeVHCV1gb2DF+RF/eNWgnwxSqn6G41GnEZuJJQj1+1+/IOPQ7/VxMgmKW+viMqv0HZW0Xbj6PuvUbdiNJTyiO+MPw7/AJLXLHgGZ0dHAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/split-dd31ff670e3c3aa724c461519960bee2-3f5da.webp 173w,\n/static/split-dd31ff670e3c3aa724c461519960bee2-42e8c.webp 345w,\n/static/split-dd31ff670e3c3aa724c461519960bee2-9925b.webp 589w\"\n          sizes=\"(max-width: 283px) 100vw, 283px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/split-dd31ff670e3c3aa724c461519960bee2-9ef42.png 173w,\n/static/split-dd31ff670e3c3aa724c461519960bee2-77645.png 345w,\n/static/split-dd31ff670e3c3aa724c461519960bee2-778a7.png 589w\"\n          sizes=\"(max-width: 283px) 100vw, 283px\"\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/split-dd31ff670e3c3aa724c461519960bee2-778a7.png\"\n          alt=\"split\"\n          title=\"\"\n          src=\"/static/split-dd31ff670e3c3aa724c461519960bee2-778a7.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p>Put the <code class=\"language-text\">actions</code> that need to happen in parallel in a <code class=\"language-text\">split</code>.</p>\n<div class=\"ui segment warning message\">\nAs for other sequence runs, message cannot be passed between splits.\n</div>\n<p class=\"code-header\">Split (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">run <span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Split<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      AgentC<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">doAction2</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></code></pre></div>\n<p>It is also possible to want to do several actions in parallel, or sequences of their own in parallel.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-778a7.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 283px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 97.96264855687605%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAABcSAAAXEgFnn9JSAAADiklEQVQ4y32Ua08bVxCG/Tv7pVKlqj+gVVU1AgMl/VD1M2AoqVL1ApgA4RIMOBDahBIIJgYb2+vbrtde38A38H3XT86uudgFutKrc86cmdmZeWeOjf98nU7HWvV6g2Y6QTunWmhmuvtWNkFDUzFa7T79m8/2mMOaKqEpa6jKK5ToCvn0Fqq8hpZ0caFtUo5L1/pGv0PTga7rd2i30YVONSERPp3jw7/P8X+cISItcXr0J0Ehi/mcKMcHloN2u9Vnfy/Cvq9cpFPKYeQ0Su/e0ylk6RSzNDLaoyY2VVUZHx9nYmLiFg5zdTiYnJ5m6tmvOBxT/PTl1+L87Fom1qlJJn+ZurYdZ2xsjGlxZysUCmxsbNxhc5OV32dxra/jcrlu161tt3XncglsvWZ1fhnnzw42X+8IO/POjdvtfiTlUu3hfES9KKuInCETob63C80sVISslO4nxeTqBpdqtk+mGzrtpkEldkgoMkcwNE84ukj6wk0g6ERWV8gm1ihEw2aEHcxGaZcuaReL6OUK6uwGjXTO2reKZTpGt5XqyRBR7wKBD07ipy+JexeRjheQz5aJHS2Ri8e7KTfzOYrxHUra3+Tlbc4jWxTUNxSTu5TUHarJuOXQbOZ6Ps9VLksllaIQCHMlbC/TaZFxBkNk23WoKSRiSxx6fuOj9w+C4RecBebwC6TTq6iet/fLWWlSOJDut431ZzFmpbAX7fQtucA+2sE2Gd8eWbFXPbucJ5OWcuPinEbCh56TqIY95N2vaOfDNJN+qkrIysDWO4s3uytFNLNxd7budDE98jFRZQFJZOMLOVHzG0iCnFhqlVxynZJZQ9OhIawNwaQhmDUpqmXOMcQI3sotdOc7djSPf+8vop4FlNNlwodOi5zowaIgRX64D8v7/v7weiOtVsVLVKWWTJN172M06rTKZRrly24NY7EYAwMDDA4OdmG3881nXzDw/RPsw0PYh+wWhkdGxNnO0A8jDD8dZeC7J3z7+VcM//iUIetumNHRUWz1ep24yL0XipZEVhJEgxEL4ZMA+2MzREWbRAKSJZMTCZSUSlwEZNmJVZbl/3ltriromRMonqFnT7jybmOc++hc+GhpQl57eDx7SOmBqF9N8RORF/CKXjQZTeQ38UnzBONLpDTB6pmn2+zmiPbYPvpiN3MZ1IOXSP/MIr8X47X/griAcijG7c0MqVCwq2/0v9ifAL09qQYTQ6m5AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-3f5da.webp 173w,\n/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-42e8c.webp 345w,\n/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-9925b.webp 589w\"\n          sizes=\"(max-width: 283px) 100vw, 283px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-9ef42.png 173w,\n/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-77645.png 345w,\n/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-778a7.png 589w\"\n          sizes=\"(max-width: 283px) 100vw, 283px\"\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/complex_split-a7178924e4031aa46ea11d8d68afe93f-778a7.png\"\n          alt=\"complex split\"\n          title=\"\"\n          src=\"/static/complex_split-a7178924e4031aa46ea11d8d68afe93f-778a7.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">Multi-Split(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">run <span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Split<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        AgentC<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doAction2</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>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">doAction2</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></code></pre></div>\n<p>The sequence on which actions will be processed in this case is</p>\n<ol>\n<li>AgentA process action1,</li>\n<li>AgentB and AgentC process action1</li>\n<li>AgentB process action2</li>\n<li>AgentA process action2 (having received messages from both AgentB and AgentC)</li>\n</ol>\n<div class=\"ui segment warning message\">\nIn all the examples above, <b>doAction</b> includes sending a message to the next agent in the sequence\n</div>\n<div class=\"ui segment info message\">\n<h4>Best Practice</h4>\nIn cases where there are sequences inside splits, or splits inside splits, the model will be a lot easier to work with if sequences and splits were created as variables\n</div>\n<p class=\"code-header\">(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// nested sequence removed and created as a variable</span>\n<span class=\"token keyword\">private</span> Sequence agentCActions <span class=\"token operator\">=</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    \tAgentC<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doAction2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">// main sequence is now easier to read</span>\nrun <span class=\"token punctuation\">(</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Split<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      agentCActions\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">doAction2</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></code></pre></div>\n<p>It is possible to compose <code class=\"language-text\">sequence&#39;s</code> and <code class=\"language-text\">actions</code> to create the complex sequences as needed. Example of more complex <code class=\"language-text\">sequence</code> - with a sequence inside a <code class=\"language-text\">sequence</code>.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-c930c.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 446px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 82.45425188374597%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABcSAAAXEgFnn9JSAAACn0lEQVQ4y31Ua1faQBDl/3/rx74+WK3gC2khyQJ6REAQrAkUFUXJAwyvhEewEpCQ2wFqKcXDnnOT3bszszt3dtfjui4mk8kKiMboqQdLz6FXy8Gq52HVJNhtnebxps8UHqxrAwsNmUGXBTS0CFpVAValsNbFo+s6stksJEmCKIrLuBSRSacRDwk48fmROjtDJkO2+TwuxTfsCR5VVRGLxZCMJxBjUSSTyWWkUkhSoATNp6k/DX7sO0AqmSCf+Nwmkfhrv5zyyFmbvqlFZxIYahQdPYph63415amQjuNgPBph2LFmfccZzwRebg4V5icMOQPj/pwCing2H1cDuq898h8Z/YX7eAxBYPDu7GFnexfeL17s7n/D1ocNbLx7j529AHxfid+c8n5se31oNhsUcOJi1NUxaD6ge/UDtinTuI7pQma9Bv1BhCYlIZ8doSaLaOkqTKOJWlmCJiaIP57xdaWEl5cxaUip1YoMtwUflLsA5Nt9VAv87BxiaMHQGJqkV6cZg6kzDI0H4m0YlTAFj6LdPJkdp+f69Tzl6cfuttGllTvlEqxGBf1Wg9ZxocoycpkksoxH+sAPKRNHIS+hTHz+IoWswCHtJ/48TuMLDGybUnbdhW59e9Gn4pyenoIjHQWegQ/yCNOxCnr3cfhpE0yIgA8RH+LBIlFwHA/TNOcaTib/V9lZrfL4GcOuhF+NLAb1LEZ9CW7/jSovjf7Z4Uqz+6jeRiGTvpUrBu2WoaNdrwYsFosIBALgvgdx8HEDoVCIts8twAvE8eDohrDwEYJ0BQ8/b0FgYeK5ZVuCp9frQVEUaJoGrVKZ//9AKZeh3ORRSiVwHQ5DvslBKd1Bq1ahauqS7SvWvjbuU5teGYbHioD6Y4SOD0Nfv1r72vwGunmKMUFohMEAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-da36b.webp 173w,\n/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-3da41.webp 345w,\n/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-c4f72.webp 690w,\n/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-f3ce9.webp 929w\"\n          sizes=\"(max-width: 446px) 100vw, 446px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-2df04.png 173w,\n/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-d609e.png 345w,\n/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-dc0b2.png 690w,\n/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-c930c.png 929w\"\n          sizes=\"(max-width: 446px) 100vw, 446px\"\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/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-dc0b2.png\"\n          alt=\"splitception\"\n          title=\"\"\n          src=\"/static/splitception-b58f9d2ea8c30600d7e20ca0206f94f9-dc0b2.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">Complex Split (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">private</span> Sequence subSequence <span class=\"token operator\">=</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doAction2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Split<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      AgentC<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      AgentA<span class=\"token punctuation\">.</span><span class=\"token function\">doAction2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    AgentD<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nrun <span class=\"token punctuation\">(</span>\n  Sequence<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n    Split<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      subSequence<span class=\"token punctuation\">,</span>\n      AgentB<span class=\"token punctuation\">.</span><span class=\"token function\">doAction1</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><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"messaging-semantics\"><a href=\"#messaging-semantics\" 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>Messaging Semantics</h3>\n<p>The <em>Simudyne SDK</em> adopts the <a href=\"%22https://dl.acm.org/citation.cfm?id=1582723%22\">Pregel</a> approach to graph processing. This means that all computation is driven by messages. At every <code class=\"language-text\">action</code> in the <code class=\"language-text\">sequence</code>, every agent will process its action <strong>only if it has received a message</strong>.</p>\n<p>In addition to this, Pregel adopts a pure message passing model that eliminates the need of shared memory and remote read, so all sharing of information between agents is done by message passing.</p>\n<h3 id=\"message-types\"><a href=\"#message-types\" 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>Message Types</h3>\n<p>All messages sent must extend Message. There are a number of ways in which you may do so, each suitable for different scenarios.</p>\n<h4 id=\"empty-messages\"><a href=\"#empty-messages\" 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>Empty messages</h4>\n<p>For messages that have no value one can extend <code class=\"language-text\">Message.Empty</code>. This is useful if your message type alone is sufficient to convey the required semantics.</p>\n<h4 id=\"single-primitive-type-messages\"><a href=\"#single-primitive-type-messages\" 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>Single primitive type messages</h4>\n<p>For messages that contain only a single primitive value, the Simudyne SDK provides, <code class=\"language-text\">Integer</code>, <code class=\"language-text\">Long</code>, <code class=\"language-text\">Float</code>, <code class=\"language-text\">Double</code>, and <code class=\"language-text\">Boolean</code> message classes that can be extended. They all provide a <code class=\"language-text\">getBody()</code> method that returns the primitive value. Use this whenever you need to send only one field.</p>\n<h4 id=\"complex-data-types\"><a href=\"#complex-data-types\" 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>Complex data types</h4>\n<p>For messages that require sending complex data types extend <code class=\"language-text\">Message.Object&lt;T&gt;</code>. This will allow you to send a message who's body is the object. It also allows the receiver access to methods on the object.</p>\n<h4 id=\"messages-with-arbitrary-fields\"><a href=\"#messages-with-arbitrary-fields\" 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>Messages with arbitrary fields</h4>\n<p>If your message needs to send an arbitrary amount of data, but no explict type exists, consider extending Message</p>\n<p>For organising custom message classes, see Message Organisation</p>\n<div class=\"ui warning message\">\nWhen running the model in distributed mode, all message types need to be registered with the model. This isn't necessary if running the model locally.\n</div>\n<p>Registering messages</p>\n<p class=\"code-header\">(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\">MyClass</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>GlobalState<span class=\"token punctuation\">></span></span> <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 function\">registerMessageTypes</span><span class=\"token punctuation\">(</span>Boolean<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Messages<span class=\"token punctuation\">.</span>Vacancy<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><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"sending-messages\"><a href=\"#sending-messages\" 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>Sending Messages</h3>\n<p>A fluent API provides the capability to filter and customise messages sent based on the link the message will be sent along.</p>\n<p>All message sending is done by the agents, and so can only be done from inside an agent class.</p>\n<h4 id=\"sending-messages-along-links\"><a href=\"#sending-messages-along-links\" 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>Sending messages along links.</h4>\n<p>Messages can be sent along specific links that an agent holds. Methods must be chained in a particular order.</p>\n<ul>\n<li>Firstly, <code class=\"language-text\">getLinks()</code> must be called providing the link class you want to send messages along</li>\n<li>Secondly, <code class=\"language-text\">send()</code> must be called, which takes the message class and possibly either a biconsumer or message body, used to construct the message. This will send the messages along the previously got links.</li>\n</ul>\n<p>Below shows how to use a generic message class.</p>\n<p class=\"code-header\">Generic message along a link (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>Neighbour<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n         <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Alive<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">,</span> link<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> message<span class=\"token punctuation\">.</span>alive<span class=\"token operator\">=</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>We see the send message takes as second argument a <code class=\"language-text\">BiConsumer</code> allowing access to link data while constructing the message.  In this example we did not require accessing any data on the link; however, it is available if needed.  Note, our message class looks like so.</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\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Alive</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">boolean</span> alive<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>However, if our message only contains a single primitive field, like above, extend one of the specialised message classes. Below, a value given is assigned into the body of the constructed message automatically.</p>\n<p class=\"code-header\">Specialised messages</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">cell<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>Neighbour<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Where we now extend Message.Boolean.</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\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Alive</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message<span class=\"token punctuation\">.</span>Boolean</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></code></pre></div>\n<h4 id=\"sending-messages-directly-to-agents\"><a href=\"#sending-messages-directly-to-agents\" 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>Sending messages directly to agents.</h4>\n<p>Messages can also be sent directly to an agent, by providing the id associated with the recipient. This is useful when you wish to employ a request-response pattern, where an agent replies directly to the sender of a message.</p>\n<p class=\"code-header\">Request-response pattern (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">Messages<span class=\"token punctuation\">.</span>Bid bid <span class=\"token operator\">=</span> seller<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Bid<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 keyword\">if</span> <span class=\"token punctuation\">(</span>bid<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> minBid<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  seller<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Asset<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bid<span class=\"token punctuation\">.</span><span class=\"token function\">getSender</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></code></pre></div>\n<h4 id=\"filtering-links\"><a href=\"#filtering-links\" 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>Filtering links.</h4>\n<p>It is useful to know that you can succinctly filter the list of links <code class=\"language-text\">getLinks</code> returns. Simply chain <code class=\"language-text\">filter</code> on the end of <code class=\"language-text\">getLinks</code> and pass in the predicate you wish to filter on.</p>\n<p class=\"code-header\">Filtering links (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">bank<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>MortgageLinks<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>mortgageLink <span class=\"token operator\">-</span><span class=\"token operator\">></span> mortgageLink <span class=\"token operator\">==</span> isActive<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span></code></pre></div>\n<p>This will return only mortgages that are currently active.</p>\n<h3 id=\"receiving-messages\"><a href=\"#receiving-messages\" 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>Receiving Messages</h3>\n<p>Receiving messages is driven by the message types. Any message received is  the message type itself.</p>\n<p>For getting a single message. If there are multiple messages of this type, it will return one of them (at random).</p>\n<p class=\"code-header\">Receiving Messages (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Cell</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Cell<span class=\"token punctuation\">></span></span> <span class=\"token function\">getAliveMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      Cell<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n      cell <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n        Message<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">></span></span> messages <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<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 keyword\">boolean</span> isAlive <span class=\"token operator\">=</span> isAliveMessage<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</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>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>If expecting multiple message of a particular type use <code class=\"language-text\">getMessagesOfType</code>. This will return the messages in a <code class=\"language-text\">List</code>.</p>\n<p class=\"code-header\">Receiving a List of Messages (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Cell</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Cell<span class=\"token punctuation\">></span></span> <span class=\"token function\">getAliveMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      Cell<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n      cell <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>Messages<span class=\"token punctuation\">.</span>Aliveness<span class=\"token punctuation\">></span></span> aliveMessages <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<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 keyword\">long</span> count <span class=\"token operator\">=</span> aliveMessages<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>Message<span class=\"token operator\">:</span><span class=\"token operator\">:</span>getBody<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">count</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>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><code class=\"language-text\">hasMessage</code> can be used to check if a message of a particular type has been received.</p>\n<p class=\"code-header\">Checking for messages of given type (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Cell</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Cell<span class=\"token punctuation\">></span></span> <span class=\"token function\">getAliveMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n      Cell<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n      cell <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n        Messages<span class=\"token punctuation\">.</span>Aliveness messages <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">hasMessageOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Aliveness<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    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"ui  info message\">\n<h4>Replying to a message</h4>\nUse getSender on a message to get the id of the agent who sent the message, and use that id with sendMessage to send a message back to sender.\n</div>\n<h3 id=\"pre--post-phase-processing\"><a href=\"#pre--post-phase-processing\" 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>Pre &#x26; Post Phase Processing</h3>\n<p>You have the possibility to apply certain modifications on an Agent before the beginning of a phase or after its end .</p>\n<p>The <code class=\"language-text\">SystemMessage</code> is a new subtype of Message that are processed before the beginning of the Actions. You can use them to apply changes before the phase even begins.</p>\n<p>The new method <code class=\"language-text\">deferTask(Consumer&lt; Vertex&lt; ? extends Serializable&gt;&gt;)</code> allows to postpone the application of a modification after the end of the phase.</p>\n<h4 id=\"defertask\"><a href=\"#defertask\" 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>deferTask</h4>\n<p>The method <code class=\"language-text\">deferTask</code> is a member of the interface <code class=\"language-text\">Environment</code>, see its declaration below.</p>\n<h5 class=\"ui top attached header\">Declaration of <i>deferTask()</i> in <i>Environment</i> (Java)</h5>\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\">interface</span> <span class=\"token class-name\">Environment</span><span class=\"token operator\">&lt;</span>S <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Serializable</span><span class=\"token operator\">></span> <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><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n\n\t<span class=\"token keyword\">void</span> <span class=\"token function\">deferTask</span><span class=\"token punctuation\">(</span>Consumer<span class=\"token operator\">&lt;</span>Vertex<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>S<span class=\"token punctuation\">></span></span><span class=\"token operator\">></span> dataInjector<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>You can call this method from an <code class=\"language-text\">Agent</code>, and use a lambda as argument.\nThe lambda will be processed right after the Actions, at the end of the phase.</p>\n<h5 class=\"ui top attached header\">Example of use of <i>deferTask()</i> (Java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token function\">deferTask</span><span class=\"token punctuation\">(</span>vertex <span class=\"token operator\">-</span><span class=\"token operator\">></span> vertex<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>This will remove a <code class=\"language-text\">Link</code> of the <code class=\"language-text\">Vertex</code> at the end of the phase, but the <code class=\"language-text\">Link</code> would still exist and would still be available during this phase.</p>\n<h4 id=\"systemmessage\"><a href=\"#systemmessage\" 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>SystemMessage</h4>\n<p><code class=\"language-text\">SystemMessage</code> is a Java Interface. It is used to define Messages that are processed automatically right at the beginning of the phase, before the Actions.</p>\n<h5 class=\"ui top attached header\">The SystemMessage Interface (Java)</h5>\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\">interface</span> <span class=\"token class-name\">SystemMessage</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">boolean</span> <span class=\"token function\">receivedByVertex</span><span class=\"token punctuation\">(</span>Agent<span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span><span class=\"token operator\">></span> agent<span class=\"token punctuation\">,</span> Environment<span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span><span class=\"token operator\">></span> env<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The only method you must implement is <code class=\"language-text\">receivedByVertex</code>. This method will be called by the <code class=\"language-text\">Agent</code> receiving the message.\nYou must describe the modification you want to apply on the Agent receiving the message in this method (note that the argument <code class=\"language-text\">agent</code> represent the Agent receiving the message).</p>\n<p>The type of return of this method is a boolean deciding whether or not the Agent will handle its Actions.\nIf an Agent receives a SystemMessage with a <code class=\"language-text\">receivedByVertex</code> returning false, then its Actions will not be processed for this phase.\nIf you do not wish to prevent the execution of the Actions, return <code class=\"language-text\">true</code> for all your receivedByVertex methods.\nNote that you only need one <code class=\"language-text\">receivedByVertex</code> returning <code class=\"language-text\">false</code> to prevent the Actions being processed, even if all the other <code class=\"language-text\">receivedByVertex</code> methods called by the Agent return <code class=\"language-text\">true</code>.</p>\n<div class=\"ui segment warningmessage\">\n<h5>SystemMessages are used for lot of purposes</h5>\nBe careful when using a SystemMessage , as some other functionalities are using this method.\nFor instance, the PoisonPill feature is using SystemMessage.\nYou should therefore be careful if you try to access datas with a SystemMessage as Agents may be in an 'intermediate' state and not ready yet for Actions.\n</div>\n<h5 class=\"ui top attached header\">Example of custom SystemMessage (Java)</h5>\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\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MyMessage</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">SystemMessage</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> field1<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> field2<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\">boolean</span> <span class=\"token function\">receivedByVertex</span><span class=\"token punctuation\">(</span>Agent<span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span><span class=\"token operator\">></span> agent<span class=\"token punctuation\">,</span> Environment<span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span><span class=\"token operator\">></span> env<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"ui segment warningmessage\">\n<h5>SystemMessages cannot begin a phase</h5>\nA SystemMessage will not be put into the Agent's inbox. This allows you to send 'invisible' messages to an Agent, as the Agent will not react to it.\nFor instance, you could send a SystemMessage to an `Agent` to update one of its fields, and do so without triggering a phase for this `Agent` (because his inbox would still be empty).\n</div>","headings":[{"value":"Executing Action in Parallel","depth":3},{"value":"Messaging Semantics","depth":3},{"value":"Message Types","depth":3},{"value":"Empty messages","depth":4},{"value":"Single primitive type messages","depth":4},{"value":"Complex data types","depth":4},{"value":"Messages with arbitrary fields","depth":4},{"value":"Sending Messages","depth":3},{"value":"Sending messages along links.","depth":4},{"value":"Sending messages directly to agents.","depth":4},{"value":"Filtering links.","depth":4},{"value":"Receiving Messages","depth":3},{"value":"Pre & Post Phase Processing","depth":3},{"value":"deferTask","depth":4},{"value":"SystemMessage","depth":4}],"frontmatter":{"title":"Actions and Sequencing","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.1/reference/agents/actions-and-sequencing.md","versioned":true,"version":"2.1","kind":"reference","pagePath":"/reference/agents/actions-and-sequencing","chronology":{"prev":{"name":"Topologies","path":"/reference/agents/topologies"},"next":{"name":"Reporting","path":"/reference/agents/reporting"}},"lastUpdated":"2026-04-21T13:56:54.830Z"}}