{"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>\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 'run' 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 warning message\">\n<h4>On the type of data supported</h4>\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, even if some of those agents have not received a message, 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<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, doAction 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>Every message sent has a body, which is an object where the message data is contained. This object can be any type, including Java types, or custom classes, depending on if the data being sent is a single value or a complex object.</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>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-to-links\"><a href=\"#sending-messages-to-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 to links</h4>\n<p><code class=\"language-text\">broadcastMessage</code> is used to send messages to an agent's links, with the first parameter being the message body.</p>\n<p>In the examples below, the message being sent is always of type Boolean, because the only information to be sent is if the Cell is alive or not.</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\">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> <span class=\"token keyword\">boolean</span> alive <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n\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\">sendAliveMessage</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>Cell<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> cell <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// send message to all links</span>\n      cell<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span>cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token comment\">// send message only to links of specific type</span>\n      cell<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span>cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">,</span> OtherAgent<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>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>An example of sending a message with a more complex body might be a case where there is more than one piece of data to send in a message.</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\">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> <span class=\"token keyword\">boolean</span> alive <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> age <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\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\">sendAliveMessage</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        cell<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">CellStatus</span><span class=\"token punctuation\">(</span>cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">,</span> cell<span class=\"token punctuation\">.</span>age<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>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CellStatus</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token function\">CellStatus</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">boolean</span> alive<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> age<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=\"sending-messages-to-agent-without-a-link\"><a href=\"#sending-messages-to-agent-without-a-link\" 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 to agent without a link</h4>\n<p>If an agent has the id of another agent (even if it is not directly connected/linked to this agent in any way), it can send it a message using <code class=\"language-text\">sendMessage</code>.</p>\n<p>To get the id of an agentB that isn't connected to agentA via a link, send the id of agentB to agentA via a message.</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\">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> <span class=\"token keyword\">boolean</span> alive <span class=\"token operator\">=</span> <span class=\"token boolean\">false</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\">sendAliveMessage</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        cell<span class=\"token punctuation\">.</span><span class=\"token function\">sendMessage</span><span class=\"token punctuation\">(</span>cell<span class=\"token punctuation\">.</span>alive<span class=\"token punctuation\">,</span> someId<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<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 message type. An agent has to specify what type of message they are expecting, in order to get those messages.</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>Boolean<span class=\"token punctuation\">></span></span> isAliveMessage <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Boolean<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 operator\">&lt;</span>Message<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Boolean<span class=\"token punctuation\">></span></span><span class=\"token operator\">></span> aliveMessages <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Boolean<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        Boolean hasAliveMessage <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span><span class=\"token function\">hasMessageOfType</span><span class=\"token punctuation\">(</span>Boolean<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>","headings":[{"value":"Executing Action in Parallel","depth":3},{"value":"Messaging Semantics","depth":3},{"value":"Message Types","depth":3},{"value":"Sending Messages","depth":3},{"value":"Sending messages to links","depth":4},{"value":"Sending messages to agent without a link","depth":4},{"value":"Receiving Messages","depth":3}],"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.0/reference/agents/actions-and-sequencing.md","versioned":true,"version":"2.0","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.826Z"}}