{"data":{"markdownRemark":{"html":"<p>The <em>Simudyne SDK</em> allows you to define topologies, that is pairs of <em>groups of agents</em> equipped with a strategy of connection that defines links between them.</p>\n<p>The following section will guide you through:</p>\n<ul>\n<li>What Links are and how they permit interactions between agents.</li>\n<li>How to create topologies using tools called <code class=\"language-text\">Groups</code> and <code class=\"language-text\">Connectors</code>.</li>\n<li>An overview of the <code class=\"language-text\">Connectors</code> available and some of their advanced features.</li>\n<li>How to create agents from data.</li>\n<li>How to synthesize a graph topology on a <code class=\"language-text\">Group</code> using probabilistic distributions defining the graph properties.</li>\n</ul>\n<h2 id=\"agent-links\"><a href=\"#agent-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>Agent Links</h2>\n<p><em>Agent-Based Modelling</em> aims to provide a bottom up approach to simulating different situations. With entities, called <em>agents</em>, that have their own behaviour and interact with one and other.</p>\n<p>In the <em>Simudyne SDK</em>, those interactions are made possible through <strong>message passing</strong>. As we shall see, <em>Links</em> are a good way to ease this process.</p>\n<h3 id=\"registering-agents-and-links\"><a href=\"#registering-agents-and-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>Registering Agents And Links</h3>\n<p>It is necessary to register Agents and Links in the <code class=\"language-text\">init</code> of your model. This is required in order to assure that the shape of your data remains constant during the course of the simulation.</p>\n<p>To register links and agents simply call the provided methods passing in all of the <code class=\"language-text\">Agents</code> and <code class=\"language-text\">Links</code> you require.</p>\n<p class=\"code-header\">AgentBasedModels (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">registerAgentTypes</span><span class=\"token punctuation\">(</span>MyAgent<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">registerLinkTypes</span><span class=\"token punctuation\">(</span>MyLink<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></code></pre></div>\n<h3 id=\"agent-links-as-a-communication-mechanism\"><a href=\"#agent-links-as-a-communication-mechanism\" 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>Agent Links as a Communication Mechanism</h3>\n<p>Each Agent can register <em>links</em> from itself to others agents. Its links allow it to have a reference to other agents it knows or it communicates with so that it can send messages to them.</p>\n<p>From one agent, you can create links to other agents using their IDs like so:</p>\n<p class=\"code-header\">Adding a link (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">MyAgent agent<span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// The ID of another agent to connect to</span>\n<span class=\"token keyword\">long</span> targetID<span class=\"token punctuation\">;</span>\n\nagent<span class=\"token punctuation\">.</span><span class=\"token function\">addLink</span><span class=\"token punctuation\">(</span>targetID<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><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Where we define a <code class=\"language-text\">Neighbour</code> link class that extends <code class=\"language-text\">Empty.Link</code>. Defining meaningful link names is encouraged in order to avoid confusion as your models get more complex.</p>\n<p class=\"code-header\">Defining a link (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\">Links</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Neighbour</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Link<span class=\"token punctuation\">.</span>Empty</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Links are not just simple references: <em>they can embed data as well</em>. This data generally deals with a relation between an agent and one of its peers.</p>\n<p>Here is how to create a Link that embeds data.\nFirst, define a specific class for your link:</p>\n<p class=\"code-header\">Definition of a Link class (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\">MyLink</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Link</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">int</span> someData<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>When adding links you can now provide a serializable consumer to <code class=\"language-text\">addLink</code> in order to assign link fields.</p>\n<p class=\"code-header\">Adding a custom Link with fields(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">agent<span class=\"token punctuation\">.</span><span class=\"token function\">addLink</span><span class=\"token punctuation\">(</span>targetID<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> myLink <span class=\"token operator\">-</span><span class=\"token operator\">></span> myLink<span class=\"token punctuation\">.</span>someData<span class=\"token operator\">=</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>The Link can in the same manner:</p>\n<ul>\n<li>be accessed by an agent using <code class=\"language-text\">getLinks()</code> and <code class=\"language-text\">getLinksTo()</code></li>\n<li>be removed by an agent using <code class=\"language-text\">removeLinks()</code> and <code class=\"language-text\">removeLinksTo()</code></li>\n</ul>\n<p>An agent can also check if it has links with, <code class=\"language-text\">hasLinks()</code> and <code class=\"language-text\">hasLinksTo()</code>.</p>\n<div class=\"ui segment warning message\">\n<h4>Links are unidirectional</h4>\nFor now, links are unidirectional in the Simudyne SDK. Bidirectional links (links shared by two agents at the same time) do not exist yet.\n<p>However, you are still able to create pairs of unidirectional links between agents.</p>\n</div>\n<p>When an agent wants to interact with its environment or with its peers, it has to send messages to them. An agent can:</p>\n<ul>\n<li>Send messages to a particular agent; the sender has to use the id of the agent it wants to send a message to.</li>\n<li>Send message along its links; this way all the agents that are connected to the sender will get the messages.</li>\n</ul>\n<p>Links give rise to <em>specific behaviours of the model.</em></p>\n<p>The <em>Simudyne SDK</em> exposes tools to automate and ease the creation of links and complex link structures known as <em>topologies</em>.</p>\n<p>The next part will get you started with topologies.</p>\n<h2 id=\"getting-started-with-topologies\"><a href=\"#getting-started-with-topologies\" 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>Getting started with Topologies</h2>\n<p>Before getting started, let's define concepts introduced in the Simudyne SDK to create topologies, that is the concepts of <code class=\"language-text\">Group</code> and <code class=\"language-text\">Connectors</code>.</p>\n<h3 id=\"groups-as-sets-of-agents\"><a href=\"#groups-as-sets-of-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>Groups as sets of agents</h3>\n<p>Intuitively, in modelling one tends to define their models in terms of sets or groups of agents having identical properties and behaviours.</p>\n<p>This is exactly what a <code class=\"language-text\">Group</code> in the <em>Simudyne SDK</em> is : <em>a set of agents of a particular class</em>. In a <code class=\"language-text\">Group</code>, all the agents are identical in the sense that they are instances of the same class. Thus a <code class=\"language-text\">Group</code> is parametrised by its type of agent and also by its size, the number of agents present in the <code class=\"language-text\">Group</code>.</p>\n<p>Using a <code class=\"language-text\">MyAgent</code> class defined as above, <code class=\"language-text\">Groups</code> can be created using the <code class=\"language-text\">AgentSystem</code> like so:</p>\n<p class=\"code-header\">Generating Groups (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">int</span> nbAgents <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Creating a group of 10 agents of class MyAgent</span>\nGroup<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MyAgentClass<span class=\"token punctuation\">></span></span> group <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>MyAgent<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> nbAgents<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>After these snippets being executed and the system being set up, <code class=\"language-text\">10</code> agents will be spawned in the model and will live their life according to their behaviour defined in the model.</p>\n<p>Note <code class=\"language-text\">Group</code> created is typed by the agent class (in this example <code class=\"language-text\">MyAgentClass</code>).</p>\n<div class=\"ui segment warning message\">\n<h4>How are the attributes of the agents in the group defined when they are spawned ?</h4>\nThe attributes of the agents will have the specified value given in the class definition.\n<p>If you are interested to define your agents' fields, we recommend you check the section Defining agents more precisely in Groups.</p>\n</div>\n<h3 id=\"connectors-as-macroscopic-description-of-connections\"><a href=\"#connectors-as-macroscopic-description-of-connections\" 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>Connectors as macroscopic description of connections</h3>\n<p>Now that we have <code class=\"language-text\">Groups</code>, we would like to describe the way to connect their agents together.</p>\n<p><code class=\"language-text\">Connectors</code> implement this concept and are used to specify how to connect agents in one group together or how to connect agents of two different groups together.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-f7c58.jpg\"\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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 87.73190707003175%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAASABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAEDAgX/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAP/2gAMAwEAAhADEAAAAfcStVFh0aGozf/EABwQAQABBAMAAAAAAAAAAAAAAAECABESMQMTI//aAAgBAQABBQLEug1qso5ykRDVjv5TzNf/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAYEQACAwAAAAAAAAAAAAAAAAAAARAhQf/aAAgBAgEBPwG41DP/xAAbEAADAAIDAAAAAAAAAAAAAAAAAREQIRJBUf/aAAgBAQAGPwKzfpGscbsrZobnQxH/xAAaEAEBAQEBAQEAAAAAAAAAAAABEQAhQTFR/9oACAEBAAE/IY82DYE/HBECBuyMlmSmA9yEKo44BfeJuDjCPk3/2gAMAwEAAgADAAAAEHPIQv/EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8QH//EABgRAAMBAQAAAAAAAAAAAAAAAAABMRDB/9oACAECAQE/EKWcimf/xAAbEAEAAwEBAQEAAAAAAAAAAAABABEhMUGRUf/aAAgBAQABPxARN82m/Yh6nRZ8hAYFAGBD1LF9Cd6bJh5BWJxJ5oXG9/YXmVdJfsIQAAAYZP/Z'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-3de61.webp 173w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-962a7.webp 345w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-fa594.webp 690w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-25ffd.webp 1035w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-56045.webp 1380w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-d8c55.webp 2070w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-e65b0.webp 5983w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-88579.jpg 173w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-071cd.jpg 345w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-6f800.jpg 690w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-0e569.jpg 1035w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-d0ddf.jpg 1380w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-9506f.jpg 2070w,\n/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-f7c58.jpg 5983w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/jpeg\"\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/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-6f800.jpg\"\n          alt=\"Connectors as macroscopic description of connections.\"\n          title=\"\"\n          src=\"/static/connection_strat-6d8e36db80a6d366c7573dbf6c8feae8-6f800.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<div class=\"ui segment info message\">\n<h4>Source Group and Target Group terminology</h4>\nIn the following, we will call \"source group\" the group from which connections are originating and \"target group\" the other group where connections are ending.\n</div>\n<p>We provide different <code class=\"language-text\">Connectors</code> ready to use; here we are going to use the most popular and simple one, <code class=\"language-text\">FullyConnected</code>, to explains how to connect Groups together`.</p>\n<p>Using this <code class=\"language-text\">Connector</code>, every agent from the source group will be connected to all other agents in the target group.</p>\n<p>Let's create and connect to groups together:</p>\n<p class=\"code-header\">FullyConnected on 2 Groups (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MyAgentClass<span class=\"token punctuation\">></span></span> sourceGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>MyAgent<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nGroup<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MyAgentClass<span class=\"token punctuation\">></span></span> targetGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>MyAgent<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Connecting the two groups together using the FullyConnected ConnectionStrategy</span>\nsourceGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>targetGroup<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Similar to before, we create two <code class=\"language-text\">Group</code> using the system <code class=\"language-text\">generateGroup()</code> method. We then use <code class=\"language-text\">fullyConnected()</code> on the source group with the target group this <code class=\"language-text\">Connector</code> to register the topology. Here is a graphical representation - the nodes represent the agents and the edges their links:</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.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: 650px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 87.53846153846155%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAACiElEQVQ4y6WUy0qyURSGvYhGivfgtJEz70Bw3DyCrqCx0A000MCRiEMRArUIkQ7gMc0sz6c8pKlpaLL6nyWf1O+wDYu9v7XXfte73r32Z5J/Y7lcytfXl/xlLBYLWa1WYuLj+PhY7Ha7vL29Sa/X03k8Hm9tNBrt+N7f36Xf76v/6elJLBaL+Hy+DWAqlZJgMCjX19dSKBSk2+1q8HQ6lY+PD/n8/JT1eq3r+XyugCTudDqSTqclGo1KIBCQer0upp+lEvz8/Kwbg8FAD2CNRkNqtZq0Wi39fn191f1qtSrlcvlX6cowmUwqSwbl5XI5eXx8VCDYGkxhBiAJHx4eNAYSkLq6utJ4BXS5XOJwOCSbzSrDdrstpVJJXl5epFKpqAxYsVhUpmjGHozxRSIRMZvNcnZ2tgGEFWVwmABYwQKmJKE0fCTLZDLKjqQAwtKQArYmxP45AAYkn8/rIZjd398r+O3trTJvNpvbGG57R8Pz83M5Ojraagc7SuIGOch8c3Oj+zDERzUAU/7d3Z0cHBzI5eXlBtDj8cjh4aFuohEsEZhSYWFoCzAxJGSfMgEG0Ol0ysXFxW7J9B8HYcphWGF0Atqxxo8UsKWxd0qezWbbi4AJPUZ/cRgQfMPhUC8MxvhgT3KjbznP81PA09NTsVqtqhPZYYdRDsFcBIyYkQQ/+yTAR6l7e3vi9/s3gAQkEgmljDZGWbDkG3aTyUSZGxcGGHHoyODZsv719Mhu9CFvFRAuiPbBx2z4jbcMc/y/NPR6vbK/vy/xeFyZ0ajog6Evz84wniFg7NE2lBwKhcRms0k4HN4AxmIxcbvdmoE/C+IyY3T//2bsEce/lPXJyYl2wk7b/HV8A4cUFJOvSZxpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-a94c8.webp 173w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-650ec.webp 345w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-9dd91.webp 650w\"\n          sizes=\"(max-width: 650px) 100vw, 650px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-f947c.png 173w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-94825.png 345w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.png 650w\"\n          sizes=\"(max-width: 650px) 100vw, 650px\"\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/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.png\"\n          alt=\"FullyConnecting 2 groups of 5 agents.\"\n          title=\"\"\n          src=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p>You can also use a <code class=\"language-text\">Connector</code> on only one group. This group would be the source but also its own target. Taking a groups created above, we can link its agents using this <code class=\"language-text\">Connector</code> with this line:</p>\n<p class=\"code-header\">Registering a ConnectionStrategy on a Group (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MyAgentClass<span class=\"token punctuation\">></span></span> group <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>MyAgent<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// FullyConnecting one group</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>group<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>And that's all ! After the setup being setup, the agents would be created with their link as specified by the <code class=\"language-text\">Connector</code>.</p>\n<div class=\"ui segment info message\">\n<h4>What are the other Connectors out there?</h4>\nIf you want to have an overview of all the different Connector, you can refer to the next section that presents them in more details.</div>\n<div class=\"ui segment warning message\">\n<h4>About restrictions for connectors on two different groups?</h4>\n<p>If the FullyConnected strategy can be used on two different groups, some other <code class=\"language-text\">Connectors</code> can only be used on one <code class=\"language-text\">Group</code>. This is, for example, the case of GridConnected whose role is to connect agents as if they were on a grid.</p>\n<p>Such restrictions on Connectors exist because it is hard to conceive what would some strategy look like on two different Groups.</p>\n<p>In every case, the Simudyne SDK only gives you access to topologies that are possible to create so that you don't have to worry about it..</div></p>\n<h3 id=\"topologies-as-the-alliance-of-groups-and-connectors\"><a href=\"#topologies-as-the-alliance-of-groups-and-connectors\" 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>Topologies as the alliance of Groups and Connectors</h3>\n<p>With those concept defined, you are now able to create topologies, that is a pair of Groups and Connectors!</p>\n<p>More precisely, you are able:</p>\n<ul>\n<li>to create as many <code class=\"language-text\">Groups</code> of agents of a specific type and of a certain population as you want;</li>\n<li>to create as many specific connections between as many <code class=\"language-text\">Groups</code> as you want, shall those groups be identical or different;</li>\n<li>to parametrize the links created – i.e. embedding data in them.</li>\n<li>to define your own <code class=\"language-text\">Connectors</code> if you want to (<em>see the following dedicated section</em>)</li>\n</ul>\n<p>Let's give an concrete example to recap but also show all the possibilities of this API.</p>\n<h3 id=\"example-transportation-problem\"><a href=\"#example-transportation-problem\" 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>Example: Transportation problem</h3>\n<p>Someone might want to simulate some transport problems using Agent Based Modelling. What they can begin with is defining the <em>structure of countries and cities</em> in a continent. One can come with this natural modelling using UML:</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/uml-a1cca3de5eab26ec3c843091da1b8797-ccb94.jpg\"\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: 378px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 113.52380952380952%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAXABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAIDAQX/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/2gAMAwEAAhADEAAAAfdmNMtMjdsKQ3//xAAZEAADAQEBAAAAAAAAAAAAAAAAARECEiL/2gAIAQEAAQUCqJHTl15OWdetOJap/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEAAwAAAAAAAAAAAAAAAAAAABAh/9oACAECAQE/ASv/xAAYEAACAwAAAAAAAAAAAAAAAAAAERAgMf/aAAgBAQAGPwIbpop//8QAHBAAAgEFAQAAAAAAAAAAAAAAABEhATFRYZGh/9oACAEBAAE/IdxcrhM0NLo6kDlDh7ESYof/2gAMAwEAAgADAAAAEOvI/v/EABcRAQEBAQAAAAAAAAAAAAAAAAEAIRH/2gAIAQMBAT8QuEmkm3//xAAYEQEBAQEBAAAAAAAAAAAAAAABABExUf/aAAgBAgEBPxA16W+IXGOX/8QAHRABAAICAgMAAAAAAAAAAAAAAQARITFBUWHw8f/aAAgBAQABPxDMmwWlQtVBNi4J9aAKjRIxarlu24lWk9bmLQcHcdCC+ZlAKGp//9k='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/uml-a1cca3de5eab26ec3c843091da1b8797-4c287.webp 173w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-5de30.webp 345w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-b2b9c.webp 690w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-7b5ec.webp 1035w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-ccb7b.webp 1380w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-20ce4.webp 1575w\"\n          sizes=\"(max-width: 378px) 100vw, 378px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/uml-a1cca3de5eab26ec3c843091da1b8797-f5368.jpg 173w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-695e5.jpg 345w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-806b0.jpg 690w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-bb56f.jpg 1035w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-785cc.jpg 1380w,\n/static/uml-a1cca3de5eab26ec3c843091da1b8797-ccb94.jpg 1575w\"\n          sizes=\"(max-width: 378px) 100vw, 378px\"\n          type=\"image/jpeg\"\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/uml-a1cca3de5eab26ec3c843091da1b8797-806b0.jpg\"\n          alt=\"UML -- A Transport Problem : using an ABM approach.\"\n          title=\"\"\n          src=\"/static/uml-a1cca3de5eab26ec3c843091da1b8797-806b0.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p><code class=\"language-text\">City</code> and <code class=\"language-text\">Country</code> are two classes of agents that extend the class <code class=\"language-text\">Agent</code> used in <em>Simudyne SDK</em>. Each <code class=\"language-text\">City</code> belongs to one and only <code class=\"language-text\">Country</code>. <code class=\"language-text\">Cities</code> can be connected together via <code class=\"language-text\">Roads</code> and <code class=\"language-text\">Countries</code> can be adjacent on behalf of their <code class=\"language-text\">Borders</code></p>\n<div class=\"ui segment info message\">\nObviously, this modelling needs more details like the number of each type of agents to spawn or the way to connect agents together but this simplified representation helps to understand the context better.\n</div>\n<p>Using our previous definition, the situation can be implemented <em>using 2 groups of agents</em>, a <code class=\"language-text\">Group&lt;City&gt;</code> and a <code class=\"language-text\">Group&lt;Country&gt;</code>.</p>\n<p>You can firstly define your agents classes like so:</p>\n<p class=\"code-header\">City and Country Definitions (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\">City</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  String name<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> population<span class=\"token punctuation\">;</span>\n  String region<span class=\"token punctuation\">;</span>\n  Float latitude<span class=\"token punctuation\">;</span>\n  Float longitude<span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">specificBehavior</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>You can also defined the Link classes:</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\">Links</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Road</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Link</span> <span class=\"token punctuation\">{</span>\n    Float length<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n\t<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Border</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Link</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">boolean</span> open<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\">Country</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Link<span class=\"token punctuation\">.</span>Empty</span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Then in your model, you can generate groups of agents like so:</p>\n<p classs=\"code-header\">Groups Generation (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\">MyModel</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 comment\">// ...</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>City<span class=\"token punctuation\">></span></span> cities <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>City<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span><span class=\"token number\">10000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Country<span class=\"token punctuation\">></span></span> countries <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Country<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Here <code class=\"language-text\">10 00</code> <code class=\"language-text\">Cities</code> will be spawned, as well as <code class=\"language-text\">10</code> <code class=\"language-text\">Countries</code>.</p>\n<p>For now they are not connected. You can proceed to 3 types of connections:</p>\n<ul>\n<li>connections between <code class=\"language-text\">Cities</code>, with <code class=\"language-text\">Roads</code> as links (as random connection)</li>\n<li>connections between <code class=\"language-text\">Countries</code> , with <code class=\"language-text\">Borders</code> as links (with all the Countries linked to each other)</li>\n<li>connections between <code class=\"language-text\">Cities</code> and their <code class=\"language-text\">Country</code> with no specific link (with Cities being uniformly distributed across Countries)</li>\n</ul>\n<p classs=\"code-header\">Group Connection (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>City<span class=\"token punctuation\">></span></span> cities <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>City<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span><span class=\"token number\">10000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Country<span class=\"token punctuation\">></span></span> countries <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Country<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// Connectiong Cities together with Roads</span>\n  cities<span class=\"token punctuation\">.</span><span class=\"token function\">smallWorldConnected</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span><span class=\"token number\">0.7</span><span class=\"token punctuation\">,</span> Road<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// Connecting Countries together with Borders</span>\n  countries<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>countries<span class=\"token punctuation\">,</span> Border<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// Connecting Cities to their Country with a Country Link</span>\n  cities<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>countries<span class=\"token punctuation\">,</span> Country<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></code></pre></div>\n<p>To model random connections between <code class=\"language-text\">Cities</code> here, we use a <code class=\"language-text\">SmallWorld</code>.</p>\n<div class=\"ui segment info message\">\n<h4>What is SmallWorld?</h4>\nYou can have a better overview of SmallWorld as well as how to parametrise this Connector in the next section, Connectors Overview.\n</div>\n<p>And we are done !</p>\n<h3 id=\"defining-agents-more-precisely-in-groups\"><a href=\"#defining-agents-more-precisely-in-groups\" 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>Defining agents more precisely in Groups</h3>\n<p>For now, we only populated groups of agents without specifying their attributes. This can be changed using a optional parameter when using the system <code class=\"language-text\">generateGroup()</code> method.</p>\n<p>This extra parameter is a function you have to define to inject data into each agent: using a <code class=\"language-text\">dataInjector</code>, you can have access to different information (such as the ID that will be given to the agent in the system but also a sequence ID that specify the place of the agent in its group) and tools like a pseudo-random number generator, <code class=\"language-text\">SeededRandom</code>.</p>\n<p>Let's give an example with the class <code class=\"language-text\">City</code> defined above:</p>\n<p class=\"code-header\">Specifying agents in Groups (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>City<span class=\"token punctuation\">></span></span> cities <span class=\"token operator\">=</span>\n  <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>City<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span><span class=\"token number\">10000</span><span class=\"token punctuation\">,</span> city <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    SeededRandom ran <span class=\"token operator\">=</span> city<span class=\"token punctuation\">.</span><span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    RealDistribution populationDistrib <span class=\"token operator\">=</span> ran<span class=\"token punctuation\">.</span><span class=\"token function\">gaussian</span><span class=\"token punctuation\">(</span><span class=\"token number\">43000</span><span class=\"token punctuation\">,</span><span class=\"token number\">6000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    RealDistribution coordinatesDistrib <span class=\"token operator\">=</span> ran<span class=\"token punctuation\">.</span><span class=\"token function\">uniform</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Changing the city fields</span>\n    city<span class=\"token punctuation\">.</span>population <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> populationDistrib<span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    city<span class=\"token punctuation\">.</span>latitude <span class=\"token operator\">=</span> coordinatesDistrib<span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    city<span class=\"token punctuation\">.</span>longitude <span class=\"token operator\">=</span> coordinatesDistrib<span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Here, we get access to the agent's pseudo random number generator that we have named <code class=\"language-text\">ran</code>. With this object, we the define two distributions to use to change fields for each city.</p>\n<p>More precisely we choose to spawn Cities with:</p>\n<ul>\n    <li>Their population being drawn from a normal distribution of mean `43000` and standard deviation `6000`.</li>\n    <li>Their latitude and longitude being drawn from a uniform distribution on the interval `[-10, 20]`.</li>\n</ul>\n<p>Defining links more precisely when using Connectors\nAs it is the case for agent, link will be spawned with fields having default values. You can define the links to create for precisely using the optional lambda when connecting groups.</p>\n<p>Here is an example with <code class=\"language-text\">FullyConnected</code>:</p>\n<p class=\"code-header\">Defining Link (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">cities<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>City<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Road<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> road <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n  SeededRandom ran <span class=\"token operator\">=</span> road<span class=\"token punctuation\">.</span><span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  RealDistribution lengthDistribution <span class=\"token operator\">=</span> ran<span class=\"token punctuation\">.</span><span class=\"token function\">gaussian</span><span class=\"token punctuation\">(</span><span class=\"token number\">50</span><span class=\"token punctuation\">,</span><span class=\"token number\">25</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  road<span class=\"token punctuation\">.</span>length <span class=\"token operator\">=</span> lengthDistribution<span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"connectors\"><a href=\"#connectors\" 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>Connectors</h2>\n<p>A summary of the <code class=\"language-text\">Connectors</code> available in the SDK as well as their parametrisation.</p>\n<h3 id=\"fullyconnected\"><a href=\"#fullyconnected\" 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>FullyConnected</h3>\n<p>In a <code class=\"language-text\">FullyConnected</code> network, all source agents are connected to all target agents.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-00838.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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAB9klEQVQ4y62V2YoqQQyG+9UVfQjBe0HFS0UF38IF933fF9zN4QsnNT094xk4TEOoVCr5K1ulPfn7vV4vtxr/r8+v59f3ggfP51P5arUqkUhE9vu90uFwkO12K9FoVGq1muqgG3TEM8Hj8XCH1+tVAbPZrHQ6HRmNRkrwyMrlslwuFweErfGe3WTfZrORxWIhg8FA+eVyqXsIHi/7/b7M53NZr9fOzjA8Q0+n05JMJtVwOBzKdDqVyWQi3W5X91Cv11MZxB5QbDKZjIvSM+RisajhoIQXhIjh8XhUT5HBI+OMPbq5XE5tzUvPkHe7nSrgIbnCkELMZrNPBOh4PFbPLRXY3u/3jyqfz2cFAJAVw9VqpXtCszDxDBm5RIe0mA1FckWhqiTaFFGgVRqNhnqEMoTHzWZTPQIM4mJsnYftdlvi8biGySGJB4SVC/AeYAgeGeGaDjaGgdxrtVoSi8UU0K/MaoD1el0pCMhqgIbxayHfbrefi8Jq7WNFQfZjUWgb6yt/2+AdRmbsbxt00LW+dUWxxi6VSpLP57809ul00j1hwtsrQcYFhUJBbV1j29PjCSUSibdPj7cNH3x62KRSqY+nFxwOPHgU/3s4fDe+SDAzjxQExxeySqWihfx2fL0bsBiFQiHNHUQb4XE4HNZZ+XbA/vYv4A8+wd+4DRYjpgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-8e416.webp 173w,\n/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-0b506.webp 345w,\n/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-58be5.webp 690w,\n/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-97a91.webp 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-7e3fa.png 173w,\n/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-7f1d4.png 345w,\n/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-13856.png 690w,\n/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-00838.png 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-13856.png\"\n          alt=\"FullyConnected -- 1 Group.\"\n          title=\"\"\n          src=\"/static/fully_one-fea7a1e255b2876f200cb320019c5e7e-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">1 Group (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">group<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>group<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nsourceGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>targetGroup<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>This connector can be used on one or two groups. In the latter case, the connection will be similar to connections in a complete bipartite graph (like connections between two layers in a simple artificial neural network).</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.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: 650px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 87.53846153846155%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAACiElEQVQ4y6WUy0qyURSGvYhGivfgtJEz70Bw3DyCrqCx0A000MCRiEMRArUIkQ7gMc0sz6c8pKlpaLL6nyWf1O+wDYu9v7XXfte73r32Z5J/Y7lcytfXl/xlLBYLWa1WYuLj+PhY7Ha7vL29Sa/X03k8Hm9tNBrt+N7f36Xf76v/6elJLBaL+Hy+DWAqlZJgMCjX19dSKBSk2+1q8HQ6lY+PD/n8/JT1eq3r+XyugCTudDqSTqclGo1KIBCQer0upp+lEvz8/Kwbg8FAD2CNRkNqtZq0Wi39fn191f1qtSrlcvlX6cowmUwqSwbl5XI5eXx8VCDYGkxhBiAJHx4eNAYSkLq6utJ4BXS5XOJwOCSbzSrDdrstpVJJXl5epFKpqAxYsVhUpmjGHozxRSIRMZvNcnZ2tgGEFWVwmABYwQKmJKE0fCTLZDLKjqQAwtKQArYmxP45AAYkn8/rIZjd398r+O3trTJvNpvbGG57R8Pz83M5Ojraagc7SuIGOch8c3Oj+zDERzUAU/7d3Z0cHBzI5eXlBtDj8cjh4aFuohEsEZhSYWFoCzAxJGSfMgEG0Ol0ysXFxW7J9B8HYcphWGF0Atqxxo8UsKWxd0qezWbbi4AJPUZ/cRgQfMPhUC8MxvhgT3KjbznP81PA09NTsVqtqhPZYYdRDsFcBIyYkQQ/+yTAR6l7e3vi9/s3gAQkEgmljDZGWbDkG3aTyUSZGxcGGHHoyODZsv719Mhu9CFvFRAuiPbBx2z4jbcMc/y/NPR6vbK/vy/xeFyZ0ajog6Evz84wniFg7NE2lBwKhcRms0k4HN4AxmIxcbvdmoE/C+IyY3T//2bsEce/lPXJyYl2wk7b/HV8A4cUFJOvSZxpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-a94c8.webp 173w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-650ec.webp 345w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-9dd91.webp 650w\"\n          sizes=\"(max-width: 650px) 100vw, 650px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-f947c.png 173w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-94825.png 345w,\n/static/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.png 650w\"\n          sizes=\"(max-width: 650px) 100vw, 650px\"\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/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.png\"\n          alt=\"FullyConnected -- 2 Group.\"\n          title=\"\"\n          src=\"/static/fully_con-9772e9d496c7737ccd331a495747e0c1-0b52b.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">2 Groups (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">sourceGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>targetGroup<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>This topology is also called Complete Graph in mathematics and graph theory.</p>\n<div class=\"ui segment warning message\">\n<h4>FullyConnected and scaling</h4>\n<p><code class=\"language-text\">FullyConnected</code> does not scale very well. The number of links is on the order of <code class=\"language-text\">n * m</code> (where <code class=\"language-text\">n</code> and <code class=\"language-text\">m</code> are the respective number of agents of each group).</p>\n<p>For better scaling, use the PartitionConnected connector and the coordinator pattern to produce a similar topology.</p>\n</div>\n<p><a href=\"https://en.wikipedia.org/wiki/Complete_graph\" title=\"wiki complete graph\">Complete graph - Wikipedia</a></p>\n<h3 id=\"partitionconnected\"><a href=\"#partitionconnected\" 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>PartitionConnected</h3>\n<p>In a <code class=\"language-text\">PartitionConnected</code> network, agents from the source group are equally connected to agents of the target group.</p>\n<p>The behaviour of this connector adapts to the number of source and target agents:</p>\n<ul>\n<li>If the source is bigger than the target, target agents will be connected to several source agents</li>\n<li>If the two groups contain the same number of agents, then agents will be connected on a one to one basis.</li>\n<li>If the target is bigger than the source, source agents will be connected to several target agents.</li>\n</ul>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/part_con-68cd9a76730c237b3efda104bb06770b-dbfab.jpg\"\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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 33.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAHABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3QUD/8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQABBQJ//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFRABAQAAAAAAAAAAAAAAAAAAARD/2gAIAQEABj8Cb//EABgQAAIDAAAAAAAAAAAAAAAAAAABEEFx/9oACAEBAAE/IQryP//aAAwDAQACAAMAAAAQg8//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAXEAADAQAAAAAAAAAAAAAAAAAAAbEx/9oACAEBAAE/EHBNBYf/2Q=='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/part_con-68cd9a76730c237b3efda104bb06770b-3de61.webp 173w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-962a7.webp 345w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-fa594.webp 690w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-25ffd.webp 1035w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-56045.webp 1380w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-d8c55.webp 2070w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-469d6.webp 3072w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/part_con-68cd9a76730c237b3efda104bb06770b-88579.jpg 173w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-071cd.jpg 345w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-6f800.jpg 690w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-0e569.jpg 1035w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-d0ddf.jpg 1380w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-9506f.jpg 2070w,\n/static/part_con-68cd9a76730c237b3efda104bb06770b-dbfab.jpg 3072w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/jpeg\"\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/part_con-68cd9a76730c237b3efda104bb06770b-6f800.jpg\"\n          alt=\"PartitionConnected -- 3 dif cases.\"\n          title=\"\"\n          src=\"/static/part_con-68cd9a76730c237b3efda104bb06770b-6f800.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">PartitionConnected - 2 Groups (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">sourceGroup<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>targetGroup<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><code class=\"language-text\">PartitionConnected</code> has two sub-strategies for connections.</p>\n<h3 id=\"shard-connections\"><a href=\"#shard-connections\" 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>Shard connections</h3>\n<p>The <code class=\"language-text\">shard()</code> sub-strategy will partition the two groups of agents in term of proximity of agents.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-5e541.jpg\"\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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3gUH/8QAFRABAQAAAAAAAAAAAAAAAAAAEAH/2gAIAQEAAQUCa//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAACD/2gAIAQEABj8CX//EABkQAAIDAQAAAAAAAAAAAAAAAAABEDFBcf/aAAgBAQABPyF2hxZdHkf/2gAMAwEAAgADAAAAEFPP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHhAAAgEDBQAAAAAAAAAAAAAAAAEREEFxITFRobH/2gAIAQEAAT8Q7yvktzyLYRSxqPan/9k='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-3de61.webp 173w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-962a7.webp 345w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-fa594.webp 690w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-25ffd.webp 1035w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-56045.webp 1380w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-95901.webp 2048w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-88579.jpg 173w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-071cd.jpg 345w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-6f800.jpg 690w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-0e569.jpg 1035w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-d0ddf.jpg 1380w,\n/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-5e541.jpg 2048w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/jpeg\"\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/shard-fe646cd156a39cbce77679f6d3ec1b7b-6f800.jpg\"\n          alt=\"ShardConnected -- shards.\"\n          title=\"\"\n          src=\"/static/shard-fe646cd156a39cbce77679f6d3ec1b7b-6f800.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">PartitionConnected -- Shard (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">sourceGroup<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>targetGroup<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">shard</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"ui segment info message\">\n<p>By default, Shard connections are used for PartitionConnected. Thus indicating shard() won't change anything but it will make this explicit in the code.</p>\n</div>\n<h3 id=\"weaved-connections\"><a href=\"#weaved-connections\" 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>Weaved connections</h3>\n<p>The <code class=\"language-text\">weave()</code> sub-stategy will partition the two groups of agents weaving the links together.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-5e541.jpg\"\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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3aFB/8QAFhABAQEAAAAAAAAAAAAAAAAAARBB/9oACAEBAAEFAtaz/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAFxAAAwEAAAAAAAAAAAAAAAAAARAxAP/aAAgBAQABPyExoRob/9oADAMBAAIAAwAAABDzz//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB0QAAIBBAMAAAAAAAAAAAAAAAABMRFRYXEQkcH/2gAIAQEAAT8QqpZvgi3cUC9/jILa4//Z'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-3de61.webp 173w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-962a7.webp 345w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-fa594.webp 690w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-25ffd.webp 1035w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-56045.webp 1380w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-95901.webp 2048w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-88579.jpg 173w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-071cd.jpg 345w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-6f800.jpg 690w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-0e569.jpg 1035w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-d0ddf.jpg 1380w,\n/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-5e541.jpg 2048w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/jpeg\"\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/weave-00bf68bbdd9b54a3f1a86f74751ad1df-6f800.jpg\"\n          alt=\"PartitionConnected -- Weave.\"\n          title=\"\"\n          src=\"/static/weave-00bf68bbdd9b54a3f1a86f74751ad1df-6f800.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">PartitionConnected -- Weave (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">sourceGroup<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>targetGroup<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">weave</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Used alone, those sub-strategies seems identical and will indeed give the same results. However if you use another connector on one of the groups this will give a completely different behaviour.</p>\n<div class=\"ui segment info message\">\n<h4>Using PartitionConnected to scale your model</h4>\nPartitionConnected can be used to scale your model easily using the coordinator pattern. The idea is to use a set of agents called coordinators that act as intermediary agent between your two original groups.\n</div>\n<h3 id=\"smallworldconnected\"><a href=\"#smallworldconnected\" 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>SmallWorldConnected</h3>\n<p><code class=\"language-text\">SmallWorldConnected</code> operates on one group and will create a small-world network.</p>\n<p>In essence, a small-world network is an <em>intermediate between a ring lattice and a random graph</em>.</p>\n<p>It is parametrised by two coefficients:</p>\n<ul>\n<li><code class=\"language-text\">inDegree</code>, a positive integer that specifies the number of outgoing links to create for each agent - it must be strictly smaller than <code class=\"language-text\">n</code>, the number of agents in the <code class=\"language-text\">Group</code>;</li>\n<li><code class=\"language-text\">beta</code>, a double in <code class=\"language-text\">[0,1]</code> that specifies the degree of randomness of the graph</li>\n</ul>\n<p>More exactly, <code class=\"language-text\">inDegree</code> is equal to the number of agents in the group minus one.\nFurthermore, if <code class=\"language-text\">beta</code> is equal to 0, the graph will be a complete ring lattice and if beta is equal to 1 the graph will be completely random.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/small-82b88006a7ddd100b24752d51bad5c0a-fe4b3.jpg\"\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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 20%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAEABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdyoSD//xAAWEAADAAAAAAAAAAAAAAAAAAAAARD/2gAIAQEAAQUCiP/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAABD/2gAIAQEABj8Cf//EABkQAAIDAQAAAAAAAAAAAAAAAAABESExsf/aAAgBAQABPyEa7Am29P/aAAwDAQACAAMAAAAQ8A//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAcEAABBAMBAAAAAAAAAAAAAAABABEhcTFBYfD/2gAIAQEAAT8QOrZdD4m06IEsFf/Z'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/small-82b88006a7ddd100b24752d51bad5c0a-3de61.webp 173w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-962a7.webp 345w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-fa594.webp 690w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-25ffd.webp 1035w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-56045.webp 1380w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-d8c55.webp 2070w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-646b2.webp 5120w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/small-82b88006a7ddd100b24752d51bad5c0a-88579.jpg 173w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-071cd.jpg 345w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-6f800.jpg 690w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-0e569.jpg 1035w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-d0ddf.jpg 1380w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-9506f.jpg 2070w,\n/static/small-82b88006a7ddd100b24752d51bad5c0a-fe4b3.jpg 5120w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/jpeg\"\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/small-82b88006a7ddd100b24752d51bad5c0a-6f800.jpg\"\n          alt=\"SmallWorldConnected -- Weave.\"\n          title=\"\"\n          src=\"/static/small-82b88006a7ddd100b24752d51bad5c0a-6f800.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">SmallWorldConnected (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// the number of outgoing links to create for each agent</span>\n<span class=\"token keyword\">int</span> inDegree<span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// a double in `[0,1]` that specifies the degree of randomness of the graph</span>\n<span class=\"token keyword\">double</span> beta<span class=\"token punctuation\">;</span>\n\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">smallWorldConnected</span><span class=\"token punctuation\">(</span>inDegree<span class=\"token punctuation\">,</span> beta<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>This type of structure has been used a lot to model social networks in simulations.</p>\n<p><em>More about Small-World network on Wikipedia:</em></p>\n<p><a href=\"https://en.wikipedia.org/wiki/Small-world_network\" title=\"wiki small world graph\">Small-world network - Wikipedia</a></p>\n<h3 id=\"gridconnected\"><a href=\"#gridconnected\" 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>GridConnected</h3>\n<p>GridConnected connects agents as if they were on a square grid. This is the main connector used for <em>cellular automata</em>.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/grid-bd7b49a7bc7458582b76969d35bc44c1-00838.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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAADWElEQVQ4y2VUyyt+URS9YYKRrw8ZmSgjxZciZSIZKBR/AUVKkVDMSQYMKCUZCAMpEeUr8sr7FRF5v9/v9zPLby2dmx+7bp3WPWeftdfaZ1v4F1dXV3h4eMDvuL29/YPd3d39wT4/P/H8/Ky1tb29DYfDgYiICOzv7yvx29sbqqqqYFkWKisr8fLyoq+9vR1eXl7Iz8/H09MT7u/vRSY5ORkBAQFYWVmBtby8DG9vbzidTvT39+Py8hLHx8dITU1VwrS0NBweHuLi4kKJiEVFRWF1dVXJxsfHERgYKHx4eBgWafb09KC3txebm5uizaSzs7Oora3F2NiY2Hx8fGB6elrYwMAATk9PtXd3dxddXV1oamr6LtkkMMEbT05OtCYrxtraGhYXF2H0Nme4l/L8zKGE8/PzoJYslbqwRG6YmprC0dERzs/PlZz/5+bmtD44OMD19bUu50cJlHBvbw9hYWGIjY3FzMyMSmM5eXl5CA4ORllZmYyii9XV1QgJCUFmZqYMpLuUJjExEXFxcbrYmpiYkKC+vr5KyNt5Y3x8vPDs7GxtJOPi4mJhkZGR0o7Y6OgoPD09hVMClUxBW1tbQbYMluJ2u1FeXo6+vj4xYQwNDaGiogIdHR22vjSypqZGn60hGTDoJsU3Dhpz1tfXZQzD/Ds7O8PS0pLkeH19/d8Uik2QL4M3mkQ0hy6yPJrGNTGTmJcYfQ1ji+XQgNzcXNsp3l5XV4ecnBz1mCmZa2L19fU2U56hNHxRSmhM4Ue9yIBPyOVyCSssLFTrEC8oKBAWHh4udsTZ5B4eHsLZZhZLzcjIQHp6OjY2NnTLzc0NSkpKEB0djebmZrvpGxsb5XBRUZGMMwxTUlKQlJQkyWwNHx8fVQbXZMOpQu34MgxGnba2tnQh+5BGkKX5/8fl9/d3vVfjGLVkUAIOkZ97yYbvnEGzDGMl7OzsRHd3t92HTMTEbW1tWFhY0OjiISZlD05OTooVY2dnR4NlZGTkOyEPsNP9/PwwODioctg6CQkJEpqvg4xZemlpqbCYmBixpiw0JSgoSOd5zqIm/v7+mnFkyOHAcrKysnS4oaFB+rLpW1pahHFWsnTidDs0NBQ+Pj7qVcuMdZb1MzgkKPzvYIlm3JtgBeYxfAEssR8fDnnjiQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/grid-bd7b49a7bc7458582b76969d35bc44c1-8e416.webp 173w,\n/static/grid-bd7b49a7bc7458582b76969d35bc44c1-0b506.webp 345w,\n/static/grid-bd7b49a7bc7458582b76969d35bc44c1-58be5.webp 690w,\n/static/grid-bd7b49a7bc7458582b76969d35bc44c1-97a91.webp 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/grid-bd7b49a7bc7458582b76969d35bc44c1-7e3fa.png 173w,\n/static/grid-bd7b49a7bc7458582b76969d35bc44c1-7f1d4.png 345w,\n/static/grid-bd7b49a7bc7458582b76969d35bc44c1-13856.png 690w,\n/static/grid-bd7b49a7bc7458582b76969d35bc44c1-00838.png 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/grid-bd7b49a7bc7458582b76969d35bc44c1-13856.png\"\n          alt=\"GridConnected.\"\n          title=\"\"\n          src=\"/static/grid-bd7b49a7bc7458582b76969d35bc44c1-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p>By default, the grid used is a square and is also responsive to the number of agents (its width is adapted so that all the agents can fit in it).</p>\n<p>However you can change the grid using several sub-strategies, let's present them.</p>\n<h4 id=\"wrapping-the-grid\"><a href=\"#wrapping-the-grid\" 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>Wrapping the grid</h4>\n<p>The grid can be wrapped (so that it becomes a torus): this way, agents on a grid edge will be connected to the agent on the opposite edge.</p>\n<p>This can be triggered using <code class=\"language-text\">GridConnection.wrapped()</code>.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/torus-0cf642209fcf016c15d33c08c085b583-9a509.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: 334px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 68.05755395683454%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABcSAAAXEgFnn9JSAAACi0lEQVQ4y4VT22oTURRd58xM5j6ZadISzKWXxKSQpo32mtSkNQaUWrU2hFaRok82Plm8oGBBBB+9gAjaPogi+AF+gIgf4JsfoH/gq0jcZyaprbW6hzNzZu991l5n7XMAsh60GVBXs2EnZyhJD/Sv4iUC+4R/mLTfdQtcm6yFgS/K6+OlqZq3aWHwos3PZ0J+vFnanc3o0YCBMPS0i/FYHw5liEDMBocKaETsK6W0Ifvpc8Eq/p0qtylF2OIOGOXoDtgFArhhIvVZwUwyh0J0muFbCPJpl3JMoIowysiKFe6UFYBUeZR8g/78lHhNiJcB3LUg/RQ5nOBNckcRI8UEdWmLdnRbF6wczGJojwx1Sioj1ZmTrXYAW8TggxKwhU1DU2FY84l52u4b2u81Av1B4B/Dvl53pqvme9ornrkhtPWA7QLf3QCLKpDeDyyJbVKBe2pjaCXyfHa8Qn7dVkS8wbieWXKAd9qLytFjk95VF9ENS6oeUQJdz+5tChAKtOqlNUXSTbcEe86E32UHnYWgSedS+I+pf3PaYIzoM9uQJZvOhQ1/dKwx8kd6l4QjeuOIryZ1C3M/Tl1iERpRXeK9DNwD478BqzXgfmf+SBSgsbwTNXdmKzSeHLAPM+ggjOGTQKpzGfL783RJ0fZ6hJyPk7LhtgjgrbpdHStnzZaD5JoxsW7uv1bbpO0SIuiDqQbsdHF0QgLpUpdtE3GfVWNdqiRa9sPJWnJtoThM9xmRw5dVeLLWKW3jJguLUyXNmaMUl57ONOOv5utpsV4bWvVQ0orANEo4A0tbNEjLK+pGoZC8nh8bIFEMdXk0gnKcBb0kHlt0jyt0N/qxQI6BjGPnR3pcAkc/z8kJnED6F4PBUQ6i1CcNAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/torus-0cf642209fcf016c15d33c08c085b583-5a223.webp 173w,\n/static/torus-0cf642209fcf016c15d33c08c085b583-a67bc.webp 345w,\n/static/torus-0cf642209fcf016c15d33c08c085b583-5d773.webp 690w,\n/static/torus-0cf642209fcf016c15d33c08c085b583-675f8.webp 695w\"\n          sizes=\"(max-width: 334px) 100vw, 334px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/torus-0cf642209fcf016c15d33c08c085b583-a2811.png 173w,\n/static/torus-0cf642209fcf016c15d33c08c085b583-4551a.png 345w,\n/static/torus-0cf642209fcf016c15d33c08c085b583-1416f.png 690w,\n/static/torus-0cf642209fcf016c15d33c08c085b583-9a509.png 695w\"\n          sizes=\"(max-width: 334px) 100vw, 334px\"\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/torus-0cf642209fcf016c15d33c08c085b583-1416f.png\"\n          alt=\"GridConnected.\"\n          title=\"\"\n          src=\"/static/torus-0cf642209fcf016c15d33c08c085b583-1416f.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">GridConnected -- wrapped2(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">group<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">wrapped</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h4 id=\"specifying-the-width-of-the-grid\"><a href=\"#specifying-the-width-of-the-grid\" 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>Specifying the width of the grid</h4>\n<p>By default, the grid is a square but you can make it a rectangle if you specify the width to use.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-00838.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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAABWElEQVQ4y6WVXcuCQBCF+8NJF0F5IRGSN/Z/TLoIisBKLS+MyIJIkKJvogS1TuyAEfHWG+7AwLDLnp09z4g5/BH3+52SxXA4xGazwfl8pvp9/z1ynwSTJKFaURS0Wi04joNKpZJN8PUQy9PphP1+/7zkk9jXDm+3G9WSJKHdbmMwGKBUKmV/cnqAiS0WC/i+TzW3oOu6mM1mJMp85IZSLpcJim3byOfztMbsyAwliiIcj0ccDgfEcfwVyE9QqtUqDMOAaZpUZ+rw1aNms4nxeExe6rrOD2U6nWK1WmG9XsPzPP45LBaLNC4sBUHgg8Licrlgu91it9vher1+fe5PHcqyDMuy0O12oaoqPxRN0zCZTDAajZ5Q0ssyCTKxIAiwXC4xn8/5oRQKBZrDRqMBURRpLf2KMkNhQFiGYcgPpVarod/vo9PpoF6v83vY6/WoO/YbYLT/8/ABVqAEkAWb5SQAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-8e416.webp 173w,\n/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-0b506.webp 345w,\n/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-58be5.webp 690w,\n/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-97a91.webp 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-7e3fa.png 173w,\n/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-7f1d4.png 345w,\n/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-13856.png 690w,\n/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-00838.png 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-13856.png\"\n          alt=\"GridConnected -- width 2.\"\n          title=\"\"\n          src=\"/static/grid2-0e9b9bdb826020a3302b1642f634b7eb-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">GridConnected -- width of 2(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">group<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">width</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Changing the neighbourhood to use\nBy default and in normal cases, each agent is connected to <code class=\"language-text\">8</code> other agents, called <em>neighbours</em>.\nThis default neighbourhood is the Moore Neighbourhood defined for a Chebyshev distance of <code class=\"language-text\">1</code>.</p>\n<p>This is the common neighbourhood defined in a variety on agent based model like Conway's Game of Life or Thomas Schelling's models of segregation</p>\n<p>This Chebyshev distance can be changed to a number <code class=\"language-text\">n</code> (supposed greater than <code class=\"language-text\">1</code>), making each agents connected to <code class=\"language-text\">(2 * n + 1)^2 - 1</code> other agents.</p>\n<p class=\"code-header\">GridConnected -- Moore Neighbourhood (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">group<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">mooreConnected</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Specifying a distance for the neighboorhood.</span>\n<span class=\"token keyword\">int</span> maxDistance<span class=\"token punctuation\">;</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">mooreConnected</span><span class=\"token punctuation\">(</span>maxDistance<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><em>More about the Moore Neighbourhood on Wikipedia:</em></p>\n<p><a href=\"https://en.wikipedia.org/wiki/Moore_neighborhood\" title=\"wiki moore grid graph\">Moore Neighborhood - Wikipedia</a></p>\n<p>The other neighbourhood available is the Von Neumann Neighbourhood that is by default defined for a Manhattan distance of <code class=\"language-text\">1</code>. Using this neighbourhood, each agent is connected to <code class=\"language-text\">4</code> other agents.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-00838.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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAADG0lEQVQ4y2VUSyh1YRQ9GRhcGSiSEZkZkKmilBFhaECKMlDKyFARJjKRAUKUQiZErtfEozxigPJ+v9/v93v9/1r6jnPcXeeec/b9zvrWXmvvz8L/ODo6wvb2Nv7G8vIyPj4+XLmVlRUcHx+7clNTU9jf39ezdXV1hdDQUAQGBmJgYAB3d3dgrqysDJZlISsrSxsy19XVpVxkZCQmJydxdnaG2tpa5WJiYvD+/g7r+voaERERCA4OxtDQEC4uLrTQAGZnZwvw8vISXq8XHo8HsbGxWFxcxPPzs3IBAQFITU39Ycif2dlZ9Pf3+5Tc0NCAl5cXV25wcBBzc3N6/v7+1n14eBgHBwe/gNzJ6PL19YXPz08t5iJqyBwvBitgVQyuY5ycnOD+/v4X8Pz8XAYYQBMTExP2s8lvbW1JAifg/Py8NBYgmeTm5iI5OVks397e9HFnZyeioqLQ19cnthT85uYGGRkZyMzMxO3trQDZHfHx8SgoKPgBJF2Kz6umpkb0V1dXkZiYqFx6ejrW19eVb25utte2t7fj8PAQVVVVeqdZ7BCV3NTUhJKSEldpGxsbYm76y5RXXl6OyspKlynFxcWqyNbw8fHR/pCAZuHa2pr9odmITNlCDNP0/Pbh4eEX8OnpCXt7ez6AZPkXkD1qDDCANMkF2NLSgsLCQlfJ1Cc/P193Z9TX10s/Z1RXV2vKBEhkf39/CVtRUSGmLJWuM5eSkoLNzU0xa21ttU2h+yy9rq7ONoVdIIZFRUVISkqy+4vR0dGhkWxra9O0UGe6HRcXp812dnbUOjMzM2qvtLQ0SSBA/mEa27jJGBsb8xnHhYUFMXYGDwr7tDEuG3Zm9IyObGjn6NEQEnBufnp66jZlaWkJvb29rl0J1NjY6MNwdHRUo+Y0kCO6u7v7A8iDITo6GkFBQejp6dFuNCYvL09il5aWKsdDgWBhYWE6+0ji9fUV09PT0johIUHvFnswPDwcfn5+6O7uFnUC5OTkCJBTQDdZJqtgLiQkBCMjI3LejCMPaJ5CltGADjqDjpHF32CODjtjfHxcBy7jH5WXNWZ79Kn8AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-8e416.webp 173w,\n/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-0b506.webp 345w,\n/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-58be5.webp 690w,\n/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-97a91.webp 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-7e3fa.png 173w,\n/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-7f1d4.png 345w,\n/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-13856.png 690w,\n/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-00838.png 1024w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-13856.png\"\n          alt=\"von grid\"\n          title=\"\"\n          src=\"/static/von_grid-b384ef5a47b5a6207e9ddf1e93eaed53-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">GridConnected -- Von Neumann  Neighbourhood (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">group<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">vonNeumannConnected</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Specifying a distance for the neighboorhood.</span>\n<span class=\"token keyword\">int</span> maxDistance<span class=\"token punctuation\">;</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">vonNeumannConnected</span><span class=\"token punctuation\">(</span>maxDistance<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>This Manhattan distance can also be changed to a number <code class=\"language-text\">n</code> (supposed greater than <code class=\"language-text\">1</code>), connecting agents to <code class=\"language-text\">2 * n * (n + 1)</code> other agents.</p>\n<p><em>More about the Von Neumann Neighbourhood on Wikipedia:</em></p>\n<p><a href=\"https://en.wikipedia.org/wiki/Von_Neumann_neighborhood\" title=\"wiki moore grid graph\">Von Neumann Neighbourhood - Wikipedia</a></p>\n<h3 id=\"bananatree\"><a href=\"#bananatree\" 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>BananaTree</h3>\n<p>A <em>Banana Tree</em> is a graph obtained by connecting one leaf of each of n copies of a star graph with a single root vertex that is distinct from all the stars.</p>\n<p>Here are examples of different Banana Trees.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/banana-b1ca1cbc6489223cd1a7b211110179e4-19c14.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: 539px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 61.038961038961034%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAPoAAAD6AG1e1JrAAADWElEQVQoz2P47+zMeDw+nmdmZaX8vrw8wf/e3kwvwsK43gYFiWzIy9N6EBgo+jw6mueHu7vEKw8PmQPR0SZ/3Nxk37q4SPyzsFB66+SkdT4iwua/paXSD0dHLQYQOFVYKHFm/nzOo9nZEuebmhheODlxn0xLk73d1iZ3Oj1d9oGPD9fj8HCRcwkJOsdzc1VPpaRovnFwEHvk5aVwPjXV5Ex8vMGJpCTjjx4eamAD1f7/Z9ja1SW6YdYsVgYosPr5k2lzX598+O3bLDAxhv//mac1NSkDaSYkMbbetjZVBmSwSFGRsaW2VnRVcTEziP8hIYH5v44O84LSUuk30dFs/yMjmf6bmnL+1Nfn3RIfr/jfzIz7i709938NDYFvOjqiZyIjNf4LCfH/MTAQBRv4vKpK/lJ3t+CDwkL5//7+jO/Cw4UfREZq301N1bgfH6/9Ojpa5IO9veJjPz/b+4GB5o8DA62/uLmpf3Rzs3zu7+/3zNfX42lgoM83Jyd7sIG3enrY9/b2iuwtL+f6D3V109y5HDsmTVKetGIFN8wn+ZMnc8+oqdEM2rmTEy62fbvA9JYW3dDLl7kgQbBoEcMBID2lqkryQno6OLz+JSYy/hcWZp5dWCj1xdyc9b+AAON/KysWoBjLImAkAS1l/m9hwfpfUJD1pZER16bcXAWwmLk5xKLLJSWqh0tLRS9XVGj+X7WK8VlYmPjD8HDTuxkZxg/Cw02ehoZKffTxMXgSEOD6JDDQ9aWfn8d7T0+Tr46OXu/c3WPeubqGvXV3j/phYxMMNvBMXR3n8f5+gVPd3Xz/Q0IYgLYxruns5D88caLy2p4egV+BgYzbEhKYNjQ0SCytrNSe09EhCowYpr6+Ppa5/f3SC6urDab29IgfLSxkYnj58CHY0ElNTaIMaGBSba04ulhHaakEutjkmhopFIHrJSUK22pqpG8AvQ7iP/by4nsRFWV4NTPT4HlEhMmT6Gi+j35+Km+9vFyf+vi4fAwMdPns5qb2zdPT6ZOLS8R7W9sgYKxHfnd2dgAbeKmlRXTfwoUS59rbwTa9srNjOVldLXdo8mTt48Ak9QyYFp8FB3MdLSpS21Ffb3GorEztq6cn1wt/f6FDpaVGm4qKHI4UFOj98PYWAAAz61CRd+e1gwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/banana-b1ca1cbc6489223cd1a7b211110179e4-21ba7.webp 173w,\n/static/banana-b1ca1cbc6489223cd1a7b211110179e4-22c8c.webp 345w,\n/static/banana-b1ca1cbc6489223cd1a7b211110179e4-9ae8a.webp 539w\"\n          sizes=\"(max-width: 539px) 100vw, 539px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/banana-b1ca1cbc6489223cd1a7b211110179e4-5dfec.png 173w,\n/static/banana-b1ca1cbc6489223cd1a7b211110179e4-083c1.png 345w,\n/static/banana-b1ca1cbc6489223cd1a7b211110179e4-19c14.png 539w\"\n          sizes=\"(max-width: 539px) 100vw, 539px\"\n          type=\"image/gif\"\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/banana-b1ca1cbc6489223cd1a7b211110179e4-19c14.png\"\n          alt=\"Banana.\"\n          title=\"\"\n          src=\"/static/banana-b1ca1cbc6489223cd1a7b211110179e4-19c14.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">BananaTree(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// the number of subgraphs to use</span>\n<span class=\"token keyword\">int</span> nbStars<span class=\"token punctuation\">;</span>\n\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">bananaTreeConnected</span><span class=\"token punctuation\">(</span>nbStars<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Banana Trees can be centred or not:</p>\n<ul>\n<li>In <em>non-centred trees</em>, each star is connected to the central node by one of its outer node.</li>\n<li>In <em>centred trees</em>, each star is connected to the central node by its own central node.</li>\n</ul>\n<div class=\"ui segment info message\">\nBy default, Banana Trees are not centred.\n</div>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-424de.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: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAgABBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe4HoZx//8QAFxABAQEBAAAAAAAAAAAAAAAAARAxQv/aAAgBAQABBQKCzkz/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAADAQEAAAAAAAAAAAAAAAAAASEQMf/aAAgBAQAGPwKlZwe//8QAGhABAAIDAQAAAAAAAAAAAAAAAQARITFBUf/aAAgBAQABPyHNjseMVVOOiUcWONyjncQtjk1z/9oADAMBAAIAAwAAABAgD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAQADAAIDAAAAAAAAAAAAAAEAESExYUFRgf/aAAgBAQABPxDVAW8lfZR2UrgHYwNKTPJPcbssF5zkqVKzx1AAgBRhP//Z'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-8e416.webp 173w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-0b506.webp 345w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-58be5.webp 690w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-59b8d.webp 1035w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-4a474.webp 1380w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-a96f5.webp 2048w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-7e3fa.png 173w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-7f1d4.png 345w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-13856.png 690w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-045bb.png 1035w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-f46ab.png 1380w,\n/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-424de.png 2048w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/jpeg\"\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/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-13856.png\"\n          alt=\"Banana -- centered.\"\n          title=\"\"\n          src=\"/static/banana_center-ed4dc2a9f5d6aafb14504e706b6a6d9a-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p class=\"code-header\">BananaTree -- Centered (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">group<span class=\"token punctuation\">.</span><span class=\"token function\">bananaTreeConnected</span><span class=\"token punctuation\">(</span>nbStars<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">setCentered</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"graphconnected\"><a href=\"#graphconnected\" 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>GraphConnected</h3>\n<p>GraphConnected can be used to generate a graph using a degree distribution and a local clustering coefficient. The Apache commons math distributions are expected as the distribution parameters. Apache commons distributions can be created using the generator methods provided in the Simudyne class <code class=\"language-text\">SeededRandom</code>.</p>\n<p>The degree distribution lower bound must be a positive number, and the clustering coefficient must have an upper bound of 1 and a lower bound of 0.</p>\n<p class=\"code-header\">GraphConnected</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">SeededRandom randomGenerator <span class=\"token operator\">=</span> <span class=\"token function\">getContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getPRNG</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nPoissonDistribution degreeDistribution <span class=\"token operator\">=</span> randomGenerator<span class=\"token punctuation\">.</span><span class=\"token function\">poison</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nUniformRealDistribution clusterCoefficient <span class=\"token operator\">=</span> randomGenerator<span class=\"token punctuation\">.</span><span class=\"token function\">uniform</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">graphConnected</span><span class=\"token punctuation\">(</span>degreeDistribution<span class=\"token punctuation\">,</span> clusterCoefficient<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>The way the degree distribution and clustering coefficent is used to create a graph internally is based on the <a href=\"https://arxiv.org/abs/1610.00664\">Darwini method</a>.</p>\n<h3 id=\"composability-of-connectors\"><a href=\"#composability-of-connectors\" 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>Composability of connectors</h3>\n<p>Connectors are <em>composable</em>: you can combine their parameters and different substrategies. Let's give an example using <code class=\"language-text\">GridConnected</code>:</p>\n<p class=\"code-header\">Composing substrategies(Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// Using a flat square grid (default case)</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Using a wrapped grid</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">wrapped</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Using a flat grid of width w</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">width</span><span class=\"token punctuation\">(</span>w<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Using a grid with a different neighborhood definition</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">vonNeumannConnected</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Composition them all !</span>\n<span class=\"token comment\">// Using a torus of width w with a Von Neumann neighborhood</span>\ngroup<span class=\"token punctuation\">.</span><span class=\"token function\">gridConnected</span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">wrapped</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">width</span><span class=\"token punctuation\">(</span>w<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">vonNeumannConnected</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"connector-summary\"><a href=\"#connector-summary\" 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>Connector Summary</h3>\n<p>With <code class=\"language-text\">n</code> and <code class=\"language-text\">m</code> being respectively the <code class=\"language-text\">sourceGroup</code> and <code class=\"language-text\">targetGroup</code> size, we can summaries the number of links created:</p>\n<table class=\"ui celled table\">\n  <thead>\n    <tr>\n      <th>Connector</th>\n      <th># of links on 1 Group</th>\n      <th># of links on 2 Groups</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>FullyConnected</td>\n      <td>n*(n-1)</td>\n      <td>n*m</td>\n    </tr>\n    <tr>\n      <td>PartitionConnected</td>\n      <td>n</td>\n      <td>max(n,m)</td>\n     </tr>\n    <tr>\n      <td>SmallWorldConnected</td>\n      <td>n*inDegree</td>\n      <td>Does not apply</td>\n     </tr>\n    <tr>\n      <td>GridConnected\n      </td>\n      <td>8 * w^2 - 12w + 4\n          with w = ceil(sqrt(n)) (in the base case )</td>\n      <td>Does not apply</td>\n     </tr>\n    <tr>\n      <td>BananaTree</td>\n      <td>2 * n - 2</td>\n      <td>Does not apply</td>\n     </tr>\n  </tbody>\n</table>\n<h3 id=\"defining-your-own-connector\"><a href=\"#defining-your-own-connector\" 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>Defining your own connector</h3>\n<p>The <em>Simudyne SDK</em> provides some useful connectors you can use to build ABM easily.</p>\n<p>If the 'out the box' connections do not suffice, the <em>Simudyne SDK</em> lets you define and use your own connector. Here is how to proceed.</p>\n<p>You first need to extend the the <code class=\"language-text\">Connector</code> abstract class like this:</p>\n<p class=\"code-header\">Defining a Connector(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\">CustomConnector</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>T<span class=\"token punctuation\">></span></span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">Connector</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">final</span> Class<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>T<span class=\"token punctuation\">></span></span> linkClass<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">final</span> SerializableBiConsumer<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>InitContext<span class=\"token punctuation\">,</span> T<span class=\"token punctuation\">></span></span> dataInjector<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">CustomConnector</span><span class=\"token punctuation\">(</span>Class<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>T<span class=\"token punctuation\">></span></span> linkClass<span class=\"token punctuation\">,</span>\n                           SerializableBiConsumer<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>InitContext<span class=\"token punctuation\">,</span> T<span class=\"token punctuation\">></span></span> dataInjector<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>linkClass <span class=\"token operator\">=</span> linkClass<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>dataInjector <span class=\"token operator\">=</span> dataInjector<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token annotation punctuation\">@Override</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">connectAgent</span><span class=\"token punctuation\">(</span>ConnectionInitializer connectInit<span class=\"token punctuation\">,</span>\n                             GroupInformation sourceInfo<span class=\"token punctuation\">,</span>\n                             GroupInformation targetInfo<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// ... the connection strategy is to define here</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The algorithm to use for you to define for <code class=\"language-text\">CustomConnector</code> is in <code class=\"language-text\">connectAgent()</code>. You will have to analytically define an algorithm that can be applied individually to each node.</p>\n<p>In order to define this algorithm:</p>\n<ul>\n<li>the <code class=\"language-text\">GroupInformation</code> <code class=\"language-text\">sourceInfo</code> and <code class=\"language-text\">targetInfo</code> give you respectively global information about each of the group used as source and target for your <code class=\"language-text\">CustomConnector</code>.</li>\n<li>the <code class=\"language-text\">Agent</code>, is the current agent and gives you access in your algorithm to a given node information.</li>\n</ul>\n<p>Let's create a custom <code class=\"language-text\">ConnectionStrategy</code> that will connect each agent in a ring.</p>\n<p class=\"code-header\">Example of definition of a Connector(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\">CustomConnector</span><span class=\"token operator\">&lt;</span>A <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span><span class=\"token operator\">></span><span class=\"token punctuation\">,</span> L <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Link</span><span class=\"token operator\">></span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">Connector</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">final</span> Class<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>L<span class=\"token punctuation\">></span></span> linkClass<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">final</span> SerializableBiConsumer<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>A<span class=\"token punctuation\">,</span> L<span class=\"token punctuation\">></span></span> dataInjector<span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token function\">CustomConnector</span><span class=\"token punctuation\">(</span>Class<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>L<span class=\"token punctuation\">></span></span> linkClass<span class=\"token punctuation\">,</span> SerializableBiConsumer<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>A<span class=\"token punctuation\">,</span> L<span class=\"token punctuation\">></span></span> dataInjector<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>linkClass <span class=\"token operator\">=</span> linkClass<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>dataInjector <span class=\"token operator\">=</span> dataInjector<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">connectAgent</span><span class=\"token punctuation\">(</span>Agent agent<span class=\"token punctuation\">,</span> GroupInformation sourceInfo<span class=\"token punctuation\">,</span> GroupInformation targetInfo<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    agent<span class=\"token punctuation\">.</span><span class=\"token function\">addLink</span><span class=\"token punctuation\">(</span>targetInfo<span class=\"token punctuation\">.</span><span class=\"token function\">getBaseID</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> linkClass<span class=\"token punctuation\">,</span> link <span class=\"token operator\">-</span><span class=\"token operator\">></span> dataInjector<span class=\"token punctuation\">.</span><span class=\"token function\">accept</span><span class=\"token punctuation\">(</span>agent<span class=\"token punctuation\">,</span> link<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>You can then use your <code class=\"language-text\">CustomConnector</code> using <code class=\"language-text\">Group.connect()</code>:</p>\n<p class=\"code-header\">Using your CustomConnector (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">    cellsGroup<span class=\"token punctuation\">.</span><span class=\"token function\">connect</span><span class=\"token punctuation\">(</span>cellsGroup<span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CustomConnector</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span>MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>cell<span class=\"token punctuation\">,</span> link<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> link<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> cell<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"loading-data\"><a href=\"#loading-data\" 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>Loading Data</h2>\n<p>This part will get you started with populating models using data.</p>\n<h3 id=\"loading-agents-from-data\"><a href=\"#loading-agents-from-data\" 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>Loading agents from data</h3>\n<p>Let's take a simplified version of the agent class <code class=\"language-text\">City</code> and let's say you have the following kind of data where each <code class=\"language-text\">City</code> has:</p>\n<ul>\n<li>a <code class=\"language-text\">name</code>, that is a <code class=\"language-text\">String</code></li>\n<li>a <code class=\"language-text\">population</code>, that is an <code class=\"language-text\">int</code></li>\n<li>a <code class=\"language-text\">surface</code>, that is a <code class=\"language-text\">float</code></li>\n</ul>\n<p>More precisely the data is organised like so:</p>\n<table class=\"ui celled table\">\n  <thead>\n    <tr>\n      <th>id</th>\n      <th>name</th>\n      <th>population</th>      \n      <th>surface</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>23323443</td>\n      <td>Kodiak</td>\n      <td>783 904</td>\n      <td>20 229</td>\n    </tr>\n    <tr>\n      <td>48217039</td>\n      <td>Firebrick</td>\n      <td>13 003</td>\n      <td>4320</td>\n     </tr>\n    <tr>\n      <td>37410058</td>\n      <td>Onalaska</td>\n      <td>2 377 843</td>      \n      <td>61 839</td>\n     </tr>\n     <tr>\n        <td>93749281</td>\n        <td>Ak-Chin Village</td>\n        <td>453 150</td>\n        <td>17 323</td>\n      </tr>\n    <tr>\n      <td>55283047</td>\n      <td>Blacktail</td>\n      <td>1 921 613</td>\n      <td>49 315</td>\n     </tr>\n    <tr>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>      \n      <td>...</td>\n     </tr>\n  </tbody>\n</table>\n<p>Here, there is an <em>additional field</em> called <code class=\"language-text\">id</code> (which is a unique number)  that identifies each record.</p>\n<div class=\"ui segment  warning message\">\n<h4>On the type of data supported</h4>\nThe Simudyne SDK supports consistent schema of data : the records present in your data should not be duplicated and there must exist a field that identifies each individual record.\n<p>Each record will be mapped to an agent, and each field of a record, except the indexing field (that is defaulted to id), will be mapped to the eponymous agent attribute.</p>\n<p>Hence, if your data does not have a field identifying each of your record, you should add a new id column to your dataset to use.</p>\n</div>\n<p>We can come up with a simplified version of the Agent class <code class=\"language-text\">City</code> described above to match this data:</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/loading-a8333558205d561aa4210ed80e0bae16-dfac6.jpg\"\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: 145px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 149.6688741721854%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAeABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAIDBAEF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAH26NcBmEzKuZ0Vqr//xAAcEAEAAQQDAAAAAAAAAAAAAAABAgADEDIREiH/2gAIAQEAAQUCuai5Aw6xq7sy971OXL//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAYEAACAwAAAAAAAAAAAAAAAAAgIQABEf/aAAgBAQAGPwJSmOF//8QAGxABAAMAAwEAAAAAAAAAAAAAAQARIRAxQVH/2gAIAQEAAT8hSO1MEW1Zw04wa4d/ONqlLeymGNHvssCis8hCN7gBumb+9T//2gAMAwEAAgADAAAAEEfKMf/EABkRAQACAwAAAAAAAAAAAAAAAAEAEBEhMf/aAAgBAwEBPxATFbhyf//EABgRAQEAAwAAAAAAAAAAAAAAAAEAEBEx/9oACAECAQE/EE24Y5f/xAAfEAEBAAICAQUAAAAAAAAAAAABEQAhMVFhEEGBobH/2gAIAQEAAT8Q3V6A9OCAsLFrsvvPr0AME6cdy+xprKd5AUQB5PPGQLoFgnymM4DOl5cUO4rJkK0bOPzAJOkcHbn/2Q=='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/loading-a8333558205d561aa4210ed80e0bae16-aa052.webp 173w,\n/static/loading-a8333558205d561aa4210ed80e0bae16-d769f.webp 345w,\n/static/loading-a8333558205d561aa4210ed80e0bae16-f6581.webp 604w\"\n          sizes=\"(max-width: 145px) 100vw, 145px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/loading-a8333558205d561aa4210ed80e0bae16-89287.jpg 173w,\n/static/loading-a8333558205d561aa4210ed80e0bae16-92d86.jpg 345w,\n/static/loading-a8333558205d561aa4210ed80e0bae16-dfac6.jpg 604w\"\n          sizes=\"(max-width: 145px) 100vw, 145px\"\n          type=\"image/jpeg\"\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/loading-a8333558205d561aa4210ed80e0bae16-dfac6.jpg\"\n          alt=\"loading\"\n          title=\"\"\n          src=\"/static/loading-a8333558205d561aa4210ed80e0bae16-dfac6.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p>To import data, you have to annotate your fields like so so that records in your data can be mapped to Cities.</p>\n<p class=\"code-header\">Class definition (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\">City</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Constant</span>\n  String name<span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Constant</span>\n  <span class=\"token keyword\">int</span> population<span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Constant</span>\n  <span class=\"token keyword\">float</span> surface<span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">//...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Finally, to import your agents in your model, you have to use the system loadGroup() method.</p>\n<p>You have to specify a Source to use ; this object is dedicated to import data from your file or data base. Let's use a CSVSource to import the data from a CSV file !</p>\n<div class=\"ui segment info message\">\n<h4>Is there only Source for CSV (CSVSource) out there ?</h4>\nIn our example we suppose the data is stored in a CSV so we use a CSVSource to trigger it. However, you can use other Source -- like JDBCSource -- to import data from other data storage. Check the dedicated section in the following.\n</div>\n<div class=\"ui segment warning message\"><h4>Windows user</h4>The `/` in the paths needs to be replaced with `\\`.</div>\n<p class=\"code-header\">Creating data group (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// Creating a Source to import data -- you can use another type of source too</span>\nCSVSource citySource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/path/to/myCities.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nGroup<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>City<span class=\"token punctuation\">></span></span> cities <span class=\"token operator\">=</span> <span class=\"token function\">loadGroup</span><span class=\"token punctuation\">(</span>City<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> citySource<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>And now, all the Cities contains as records in your data are imported into your model !</p>\n<div class=\"ui segment warning message\">\n<h4>On IDs present in data vs IDs used in the AgentBasedModel</h4>\nThe IDs present in the AgentBasedModel when importing data are not used any more as data gets remapped to agent that are given a new ID adapted to the state of the system.\n<p>Thus, IDs present in your data still remain important as they identify agents; but won't be used in the system once the records are imported.</p>\n</div>\n<div class=\"ui segment warning message\">\n<h4>What if I do not have enough of fields for the agent that I want to model ?</h4>\nIf you do not have enough fields in your dataset compared to what you would like to have in your model for an agent class, this is not restrictive to use data import. The fields present into your data will be mapped to some of the fields of your agents, leaving the remaining ones with their default values.\n</div>\n<h3 id=\"creating-links-from-data\"><a href=\"#creating-links-from-data\" 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>Creating Links from Data</h3>\n<p>Let's now imagine that you want to introduce Roads between your Cities.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/links_from_data-104b759c4849a32469dd90befc5c5d86-dfac6.jpg\"\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: 145px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 276.65562913907286%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAA3ABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAIDBAEF/8QAFwEBAQEBAAAAAAAAAAAAAAAAAQIAA//aAAwDAQACEAMQAAAB9ujXAZhMxznVSSnbHsWLHDs9RF6Rcf/EABwQAQACAwEBAQAAAAAAAAAAAAEAAgMQETISIf/aAAgBAQABBQLJ35F2Bp81mX0jP3t63sw0vIWNZGFglPH/xAAWEQEBAQAAAAAAAAAAAAAAAAABECD/2gAIAQMBAT8B0E//xAAXEQEAAwAAAAAAAAAAAAAAAAAQAREg/9oACAECAQE/ASsSf//EABsQAAICAwEAAAAAAAAAAAAAAAABETEQICFB/9oACAEBAAY/AuC7rGaKK3h+oUCP/8QAHRABAAICAwEBAAAAAAAAAAAAAQARITEQQVFhsf/aAAgBAQABPyFB2p9gi2VnDThqBXBvjNaLeSUwWNHfcsDrHU9Kvbgan7uWi2vTj844HaILLR+QRLIAuiGiLJmk/9oADAMBAAIAAwAAABBHyr2cCIH/xAAZEQEAAwEBAAAAAAAAAAAAAAABABARITH/2gAIAQMBAT8QHliZMaBI+z//xAAYEQEAAwEAAAAAAAAAAAAAAAABABARIf/aAAgBAgEBPxBNaVAcmlDtf//EAB8QAQEAAgIDAAMAAAAAAAAAAAERACExQRBhoVFx0f/aAAgBAQABPxDcXoH4OCAsLFrsvc+eImg7HHcrtwayjwmRLgHce+MQNYNxPjJYDTpe3BruCuk1kpoka/3BfGjfgDWicF79+KVpCrODOxACKOG0o41PARNPOaEISpsP3McThr9c/9k='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/links_from_data-104b759c4849a32469dd90befc5c5d86-aa052.webp 173w,\n/static/links_from_data-104b759c4849a32469dd90befc5c5d86-d769f.webp 345w,\n/static/links_from_data-104b759c4849a32469dd90befc5c5d86-f6581.webp 604w\"\n          sizes=\"(max-width: 145px) 100vw, 145px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/links_from_data-104b759c4849a32469dd90befc5c5d86-89287.jpg 173w,\n/static/links_from_data-104b759c4849a32469dd90befc5c5d86-92d86.jpg 345w,\n/static/links_from_data-104b759c4849a32469dd90befc5c5d86-dfac6.jpg 604w\"\n          sizes=\"(max-width: 145px) 100vw, 145px\"\n          type=\"image/jpeg\"\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/links_from_data-104b759c4849a32469dd90befc5c5d86-dfac6.jpg\"\n          alt=\"links from data\"\n          title=\"\"\n          src=\"/static/links_from_data-104b759c4849a32469dd90befc5c5d86-dfac6.jpg\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p>And let's say your have the same dataset of Cities ...</p>\n<table class=\"ui celled table\">\n  <thead>\n    <tr>\n      <th>id</th>\n      <th>name</th>\n      <th>population</th>      \n      <th>surface</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>23323443</td>\n      <td>Kodiak</td>\n      <td>783904</td>\n      <td>20229</td>\n    </tr>\n    <tr>\n      <td>48217039</td>\n      <td>Firebrick</td>\n      <td>13003</td>\n      <td>4320</td>\n     </tr>\n    <tr>\n      <td>37410058</td>\n      <td>Onalaska</td>\n      <td>2377843</td>      \n      <td>61839</td>\n     </tr>\n     <tr>\n        <td>93749281</td>\n        <td>Ak-Chin Village</td>\n        <td>453150</td>\n        <td>17323</td>\n      </tr>\n    <tr>\n      <td>55283047</td>\n      <td>Blacktail</td>\n      <td>1921613</td>\n      <td>49315</td>\n     </tr>\n    <tr>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>      \n      <td>...</td>\n     </tr>\n  </tbody>\n</table>\n<p>... and that you have another a data sets of Roads linking Cities together:</p>\n<table class=\"ui celled table\">\n  <thead>\n    <tr>\n      <th>from</th>\n      <th>to</th>\n      <th>length</th>      \n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>23323443</td>\n      <td>48217039</td>\n      <td>23.32</td>\n    </tr>\n    <tr>\n      <td>37410058</td>\n      <td>23323443</td>\n      <td>343.3</td>\n     </tr>\n    <tr>\n      <td>23323443</td>\n      <td>55283047</td>\n      <td>43.13</td>      \n     </tr>\n     <tr>\n        <td>55283047</td>\n        <td>93749281</td>\n        <td>33.38</td>\n      </tr>\n    <tr>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>      \n     </tr>\n  </tbody>\n</table>\n<p>Here, <code class=\"language-text\">from</code> and <code class=\"language-text\">to</code> identify respectively the source agents and the target agents.</p>\n<p>The remaining fields will be injected in the link at their creation. In our context, there is just one remaining field, <code class=\"language-text\">length</code>, that represent the length of a <code class=\"language-text\">Road</code> from the <code class=\"language-text\">City</code> identified by the ID from to the <code class=\"language-text\">City</code> identified by the ID <code class=\"language-text\">to</code>.</p>\n<p>You can import those links in your model and between your two groups using the <code class=\"language-text\">connect()</code> with a 'Source'.</p>\n<p class=\"code-header\">Connecting a Group Using Data (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">CSVSource citySource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/path/to/myCities.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nCSVSource roadSource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/path/to/myRoads.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nGroup<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>City<span class=\"token punctuation\">></span></span> cities <span class=\"token operator\">=</span> <span class=\"token function\">loadGroup</span><span class=\"token punctuation\">(</span>City<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> citySource<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\ncities<span class=\"token punctuation\">.</span><span class=\"token function\">loadConnections</span><span class=\"token punctuation\">(</span>cities<span class=\"token punctuation\">,</span> Road<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> roadSource<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>You can also connect two different <code class=\"language-text\">Groups</code> as well:</p>\n<p class=\"code-header\">Connect two Groups using Data</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">CSVSource citySource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/path/to/myCities.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nCSVSource countrySource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/path/to/myCountry.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nCSVSource linkSource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/path/to/myLinks.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nGroup<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>City<span class=\"token punctuation\">></span></span> cities <span class=\"token operator\">=</span> <span class=\"token function\">loadGroup</span><span class=\"token punctuation\">(</span>City<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> citySource<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nGroup<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Country<span class=\"token punctuation\">></span></span> countries <span class=\"token operator\">=</span> <span class=\"token function\">loadGroup</span><span class=\"token punctuation\">(</span>Country<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> countrySource<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\ncities<span class=\"token punctuation\">.</span><span class=\"token function\">loadConnections</span><span class=\"token punctuation\">(</span>countries<span class=\"token punctuation\">,</span> MyLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> linkSource<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"more-about-sources\"><a href=\"#more-about-sources\" 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>More about Sources</h3>\n<p>If you have data you want to import from a database, you can use a <code class=\"language-text\">JDBCSource</code> that supports <em>MySQL</em>, <em>SQLite</em> as well as <em>PostGreSQL</em>. Here is an example for <em>SQLite</em>:</p>\n<p class=\"code-header\">Using JDBC Sources (java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">String connectionString <span class=\"token operator\">=</span> s<span class=\"token string\">\"jdbc:sqlite:path/to/myDataBase.db\"</span><span class=\"token punctuation\">;</span>\n\nJDBCSource citySource <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">JDBCSource</span><span class=\"token punctuation\">(</span>connectionString<span class=\"token punctuation\">,</span> <span class=\"token string\">\"Country\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"username\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"password\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p> <a href=\"https://alvinalexander.com/java/jdbc-connection-string-mysql-postgresql-sqlserver\" title=\"JDBC connection string\">Java JDBC connection string examples</a></p>\n<div class=\"ui segment info message\">\n<h4>How about supporting other Sources ?</h4>\nFor now, Source have been implemented for CSV files and relational databases. In the future, more solutions will be covered, especially non-relational databases a la NoSQL.\n</div>","headings":[{"value":"Agent Links","depth":2},{"value":"Registering Agents And Links","depth":3},{"value":"Agent Links as a Communication Mechanism","depth":3},{"value":"Getting started with Topologies","depth":2},{"value":"Groups as sets of agents","depth":3},{"value":"Connectors as macroscopic description of connections","depth":3},{"value":"Topologies as the alliance of Groups and Connectors","depth":3},{"value":"Example: Transportation problem","depth":3},{"value":"Defining agents more precisely in Groups","depth":3},{"value":"Connectors","depth":2},{"value":"FullyConnected","depth":3},{"value":"PartitionConnected","depth":3},{"value":"Shard connections","depth":3},{"value":"Weaved connections","depth":3},{"value":"SmallWorldConnected","depth":3},{"value":"GridConnected","depth":3},{"value":"Wrapping the grid","depth":4},{"value":"Specifying the width of the grid","depth":4},{"value":"BananaTree","depth":3},{"value":"GraphConnected","depth":3},{"value":"Composability of connectors","depth":3},{"value":"Connector Summary","depth":3},{"value":"Defining your own connector","depth":3},{"value":"Loading Data","depth":2},{"value":"Loading agents from data","depth":3},{"value":"Creating Links from Data","depth":3},{"value":"More about Sources","depth":3}],"frontmatter":{"title":"Topologies","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.4/reference/agents/topologies.md","versioned":true,"version":"2.4","kind":"reference","pagePath":"/reference/agents/topologies","chronology":{"prev":{"name":"Agents","path":"/reference/agents"},"next":{"name":"Agent Spawning","path":"/reference/agents/spawning"}},"lastUpdated":"2026-04-21T13:56:54.850Z"}}