{"data":{"markdownRemark":{"html":"<p>In this tutorial, you will learn how to build a more complex model than the simple Trading model demonstrated in the introductory tutorial. You will also be taught some more advanced modelling concepts and explore best practice for the iterative development of models.</p>\n<p>The model is a simulation of a commercial bank's mortgage portfolio. Mortgages are lent to households, who are hit by income shocks, earn income, pay taxes, consume -- and attempt to repay their mortgage. Households who are unable to make their repayments eventually default on their mortgage and the mortgage contract is 'written off' the bank's balance sheet.</p>\n<p>This tutorial is divided into three parts: which reflects the iterative nature of building agent-based models.</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-f7bfd.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: 52.98429319371728%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAABPUlEQVQoz6WRbU/EIBCE+/9/o/Zaz5jLeQUKyzt0XDgbzWnUnB+eAAMzsMtA1sFajxhzR2vCuhqEkBB8RHAeetUQQsLzOrLu+HzzKKXhXfjwsm9wHJhS6QHNYE0LC8h1QwVQNsCHyEY+lzNYRqm1a+1sKqWvK+95zhiaOaWMFK+CFwuKeEU+n5DmEel5Ro4RYNMWA6oSKC9HBCmQmHw5Ix0n5OkBfl33wMKlZAQOVcsCNT6CDiPsfABNI0gqWC6ZTifQ8Qk0T6DLArMIrKxZKeG0geEWDJFvz7n0HrSyiSwsE1PqpaRSoclDrhZS82gCJDHadZTx13nbZwZrAwwbGto4RO4VasFWGhlbijCsS0X8CV+51Qf5Lu5YctdP+ITeA/kFvzHcCrcX7Ox7fw9sxj7/3nTXC38y3V3yf3kDc1hO1ySWMLgAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-8e416.webp 173w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-0b506.webp 345w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-58be5.webp 690w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-59b8d.webp 1035w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-4a474.webp 1380w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-70b7b.webp 1910w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-7e3fa.png 173w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-7f1d4.png 345w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-13856.png 690w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-045bb.png 1035w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-f46ab.png 1380w,\n/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-f7bfd.png 1910w\"\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/mortgage_1-203c9abf68883459cc9eb8eb8452f251-13856.png\"\n          alt=\"mortgage 1\"\n          title=\"\"\n          src=\"/static/mortgage_1-203c9abf68883459cc9eb8eb8452f251-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<h2 id=\"skeleton-model\"><a href=\"#skeleton-model\" 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>Skeleton Model</h2>\n<p>In the first instalment of this three-part tutorial, we will sketch out a simplified skeleton model. That skeleton model will introduce simple agents with limited behaviour. Parts two and three will add flesh to these bones.</p>\n<h3 id=\"basic-model-structure\"><a href=\"#basic-model-structure\" 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>Basic Model Structure</h3>\n<ul>\n<li>Two types of agent: Households and a Bank</li>\n<li>One household, one bank</li>\n<li>Mortgage made by the bank</li>\n<li>Household earns income, consumes, and repays mortgage</li>\n</ul>\n<h3 id=\"the-main-model-class\"><a href=\"#the-main-model-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Main Model Class</h3>\n<p>The main model class sets up the agent groups and connects them together. It also specifies the variables that will be output to the console and the control parameters that can be tweaked between model runs.</p>\n<p>The logic of the model -- which describes the sequence of events that takes place within one simulated time-step -- is written in a sequence at the bottom of this file.</p>\n<p>The behaviours taking place for each agent at each step are captured in methods which belong to the agent classes. For example, the bank's methods are found in the Bank class, while the households' methods are found in the Household class. Writing the flow sequence in this way keeps it terse and easy to read. The natural logic of the model is thus easy to follow and edit.</p>\n<p class=\"code-header\">MortgageModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>AgentBasedModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Group<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Input<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MortgageModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Bank Equity (£)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Number of Households\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">long</span> nbHouseholds <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Create our agent groups</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> householdGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> nbHouseholds<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> bankGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Each household is connected to 1 bank</span>\n    householdGroup<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>bankGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\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\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n            Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            household <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              household<span class=\"token punctuation\">.</span><span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              household<span class=\"token punctuation\">.</span><span class=\"token function\">consume</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              household<span class=\"token punctuation\">.</span><span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n            Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            bank <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              bank<span class=\"token punctuation\">.</span><span class=\"token function\">updateBalanceSheet</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><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"the-bank-class\"><a href=\"#the-bank-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Bank class</h3>\n<p>The Bank class describes stylised data and behaviours of a commercial bank. In this skeleton model, the bank's balance sheet is comprised of debt, assets and equity -- which is calculated as assets - debt. The bank updates its assets in line with the sum of mortgage repayments it receives.</p>\n<p class=\"code-header\">Bank.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>graph<span class=\"token punctuation\">.</span>Message<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>List<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Bank</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> debt <span class=\"token operator\">=</span> <span class=\"token number\">90</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">updateBalanceSheet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> assets <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    List<span class=\"token operator\">&lt;</span>Message<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">></span></span><span class=\"token operator\">></span> paymentMessages <span class=\"token operator\">=</span> <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Integer<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>Message<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Integer<span class=\"token punctuation\">></span></span> payment <span class=\"token operator\">:</span> paymentMessages<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      assets <span class=\"token operator\">+=</span> payment<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>assets <span class=\"token operator\">-</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"the-household-class\"><a href=\"#the-household-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Household Class</h3>\n<p>The household class describes the stylised data and behaviours of a household with a mortgage. In the skeleton model, the household earns income, consumes, and compares its stock of wealth with its required mortgage repayment. If it can afford to pay its mortgage, the household sends a message to the bank containing its mortgage repayment</p>\n<p class=\"code-header\">Household.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Household</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> income <span class=\"token operator\">=</span> <span class=\"token number\">5000</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> consumption <span class=\"token operator\">=</span> <span class=\"token number\">3000</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> wealth <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> repayment <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">consume</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> wealth <span class=\"token operator\">-=</span> consumption<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> wealth <span class=\"token operator\">+=</span> income<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span>repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> Boolean <span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">return</span> wealth <span class=\"token operator\">>=</span> repayment<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"complex-behaviours\"><a href=\"#complex-behaviours\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Complex Behaviours</h2>\n<p>In this iteration of the model, we have introduced a more extensive set of agent behaviours -- as described by the two sequences at the bottom of the MortgageModel class. Households actively apply for mortgages, and Banks check that a mortgage application meets certain requirements before issuing it. Significantly more output is reported to the console -- in this stage of model development it is useful to track a large number of variables to ensure that the model is generating sensible intermediate and final outputs.</p>\n<p>The other significant change in this version, compared to the last version, is the collection of the messages together inside an object (Messages). This is a stylistic choice, but one we recommend as best practice -- see <a href=\":version/practices/class-organisation\">Class Organisation</a>.</p>\n<p class=\"code-header\">MortgageModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>AgentBasedModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Group<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Input<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>ModelSettings<span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@ModelSettings</span><span class=\"token punctuation\">(</span>macroStep <span class=\"token operator\">=</span> <span class=\"token number\">120</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MortgageModel</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\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Bank Equity (£)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Bad Loans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Write-offs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"impairments\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Impairments (£k)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"debt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Debt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"income\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Income\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"mortgages\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Mortgages\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">int</span> income <span class=\"token operator\">=</span> <span class=\"token number\">5000</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> wealth <span class=\"token operator\">=</span> <span class=\"token number\">50000</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Number of Households\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">long</span> nbHouseholds <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> householdGroup <span class=\"token operator\">=</span>\n        <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>\n            Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            nbHouseholds<span class=\"token punctuation\">,</span>\n            house <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              house<span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> income<span class=\"token punctuation\">;</span>\n              house<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> wealth<span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> bankGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    householdGroup<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>bankGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\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\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>\n      Household<span class=\"token punctuation\">.</span><span class=\"token function\">applyForMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      Bank<span class=\"token punctuation\">.</span><span class=\"token function\">processApplication</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      Household<span class=\"token punctuation\">.</span><span class=\"token function\">takeOutMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n            Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">(</span>Household h<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">incomeShock</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">consume</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n            Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">(</span>Bank b<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">accumulateIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">processArrears</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">calculateImpairments</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">clearPaidMortgages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">updateAccumulators</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><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Relative to the last version, the bank's behaviour is significantly more complicated. The bank has new methods for processing mortgage applications, processing arrears and cumulating impairments. A final method (<code class=\"language-text\">UpdateAccumulators</code>) updates the bank's balance sheet data via accumulators which are reported on the console.</p>\n<h3 id=\"the-bank-class-1\"><a href=\"#the-bank-class-1\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Bank Class</h3>\n<p class=\"code-header\">Bank.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>graph<span class=\"token punctuation\">.</span>Message<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Bank</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> debt <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> assets <span class=\"token operator\">=</span> <span class=\"token number\">10000000</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span>\n  <span class=\"token keyword\">int</span> <span class=\"token function\">equity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> assets <span class=\"token operator\">-</span> debt<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> nbMortgages <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> termInYears <span class=\"token operator\">=</span> <span class=\"token number\">15</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// Should be 25</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">double</span> interest <span class=\"token operator\">=</span> <span class=\"token number\">1.05</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> termInMonths <span class=\"token operator\">=</span> termInYears <span class=\"token operator\">*</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> impairments <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> income <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">double</span> LTILimit <span class=\"token operator\">=</span> <span class=\"token number\">4.5</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">double</span> LTVLimit <span class=\"token operator\">=</span> <span class=\"token number\">0.95</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> <span class=\"token function\">processApplication</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Action</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span>\n        Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        bank <span class=\"token operator\">-</span><span class=\"token operator\">></span>\n            bank<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>MortgageApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">/</span> m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>income <span class=\"token operator\">&lt;=</span> bank<span class=\"token punctuation\">.</span>LTILimit<span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">*</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token number\">1</span> <span class=\"token operator\">-</span> bank<span class=\"token punctuation\">.</span>LTVLimit<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>\n                    m <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                      bank<span class=\"token punctuation\">.</span><span class=\"token function\">sendMessage</span><span class=\"token punctuation\">(</span>\n                          <span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful</span><span class=\"token punctuation\">(</span>\n                              m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">,</span>\n                              bank<span class=\"token punctuation\">.</span>termInMonths<span class=\"token punctuation\">,</span>\n                              <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">*</span> bank<span class=\"token punctuation\">.</span>interest<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span>\n                                bank<span class=\"token punctuation\">.</span>termInMonths<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                          m<span class=\"token punctuation\">.</span><span class=\"token function\">getSender</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n                      bank<span class=\"token punctuation\">.</span>nbMortgages <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n                      bank<span class=\"token punctuation\">.</span>assets <span class=\"token operator\">+=</span> m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">;</span>\n                      bank<span class=\"token punctuation\">.</span>debt <span class=\"token operator\">+=</span> m<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">;</span>\n                    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">accumulateIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    income <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>payment <span class=\"token operator\">-</span><span class=\"token operator\">></span> income <span class=\"token operator\">+=</span> payment<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">double</span> NIM <span class=\"token operator\">=</span> <span class=\"token number\">0.25</span><span class=\"token punctuation\">;</span>\n    assets <span class=\"token operator\">+=</span> <span class=\"token punctuation\">(</span>income <span class=\"token operator\">*</span> NIM<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * Record how many bad loans the bank has. A loan is counted as bad if it has been more than 3\n   * months in arrears.\n   */</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">processArrears</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>\n            arrears <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arrears<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">></span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              <span class=\"token punctuation\">}</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/** Calculate impairments from written off loans. */</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">calculateImpairments</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    impairments <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>\n            arrears <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              <span class=\"token comment\">// A mortgage is written off if it is more than 6 months in arrears.</span>\n              <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arrears<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">></span> <span class=\"token number\">6</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                impairments <span class=\"token operator\">+=</span> arrears<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>outstandingBalance<span class=\"token punctuation\">;</span>\n\n                <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              <span class=\"token punctuation\">}</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Remove any impairments from our assets total.</span>\n    <span class=\"token comment\">// Note that the debt from the written off loan remains.</span>\n    assets <span class=\"token operator\">-=</span> impairments<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/** Remove any mortgages that have closed from the books. */</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">clearPaidMortgages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> balancePaidOff <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>Message<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>CloseMortgage<span class=\"token punctuation\">></span></span> close <span class=\"token operator\">:</span>\n      <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>CloseMortgage<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        balancePaidOff <span class=\"token operator\">+=</span> close<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">;</span>\n        nbMortgages <span class=\"token operator\">-=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    debt <span class=\"token operator\">-=</span> balancePaidOff<span class=\"token punctuation\">;</span>\n    assets <span class=\"token operator\">-=</span> balancePaidOff<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">updateAccumulators</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"debt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>debt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"impairments\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>impairments<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"mortgages\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>nbMortgages<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"income\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>income<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token function\">equity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"the-household-class-1\"><a href=\"#the-household-class-1\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Household Class</h3>\n<p>Similarly, the behaviour of the household has also been made more complex than in the skeleton version. The households have additional methods which capture behaviours to do with applying for, and taking out a mortgage. A simple class is also included to reflect a mortgage contract</p>\n<p class=\"code-header\">Household.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Household</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> income<span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">int</span> wealth <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n\n  Mortgage mortgage<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> monthsInArrears <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> consumption <span class=\"token operator\">=</span> <span class=\"token number\">3000</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    wealth <span class=\"token operator\">+=</span> income<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>mortgage <span class=\"token operator\">!=</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        wealth <span class=\"token operator\">-=</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">;</span>\n        monthsInArrears <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        mortgage<span class=\"token punctuation\">.</span>term <span class=\"token operator\">-=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        mortgage<span class=\"token punctuation\">.</span>balanceOutstanding <span class=\"token operator\">-=</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">;</span>\n        <span class=\"token function\">checkMaturity</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 keyword\">else</span> <span class=\"token punctuation\">{</span>\n        monthsInArrears <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>Arrears</span><span class=\"token punctuation\">(</span>monthsInArrears<span class=\"token punctuation\">,</span> mortgage<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token comment\">// If we have spent more than 6 months in arrears,</span>\n        <span class=\"token comment\">// default the mortgage (close it with 0 value).</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>monthsInArrears <span class=\"token operator\">></span> <span class=\"token number\">6</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>CloseMortgage</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          mortgage <span class=\"token operator\">=</span> null<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">checkMaturity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>mortgage<span class=\"token punctuation\">.</span>term <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>CloseMortgage</span><span class=\"token punctuation\">(</span>mortgage<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      mortgage <span class=\"token operator\">=</span> null<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>Payment</span><span class=\"token punctuation\">(</span>mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">,</span> mortgage<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> Boolean <span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>mortgage <span class=\"token operator\">==</span> null<span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>wealth <span class=\"token operator\">>=</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> <span class=\"token function\">applyForMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        h <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>h<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">==</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">int</span> purchasePrice <span class=\"token operator\">=</span> h<span class=\"token punctuation\">.</span>income <span class=\"token operator\">*</span> <span class=\"token number\">4</span><span class=\"token punctuation\">;</span>\n            h<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>MortgageApplication</span><span class=\"token punctuation\">(</span>purchasePrice<span class=\"token punctuation\">,</span>\n              h<span class=\"token punctuation\">.</span>income<span class=\"token punctuation\">,</span> h<span class=\"token punctuation\">.</span>wealth<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> <span class=\"token function\">takeOutMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        h <span class=\"token operator\">-</span><span class=\"token operator\">></span>\n          h<span class=\"token punctuation\">.</span><span class=\"token function\">hasMessageOfType</span><span class=\"token punctuation\">(</span>\n            Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n              message <span class=\"token operator\">-</span><span class=\"token operator\">></span>\n                h<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span>\n                  <span class=\"token keyword\">new</span> <span class=\"token class-name\">Mortgage</span><span class=\"token punctuation\">(</span>\n                    message<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">,</span>\n                    message<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">,</span>\n                    message<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>termInMonths<span class=\"token punctuation\">,</span>\n                    message<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">incomeShock</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    income <span class=\"token operator\">+=</span> <span class=\"token number\">200</span> <span class=\"token operator\">*</span> <span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">gaussian</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><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>income <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      income <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">consume</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    wealth <span class=\"token operator\">-=</span> consumption<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>wealth <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      wealth <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Mortgage</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> balanceOutstanding<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> term<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">Mortgage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> balanceOutstanding<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> term<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> amount<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>balanceOutstanding <span class=\"token operator\">=</span> balanceOutstanding<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>term <span class=\"token operator\">=</span> term<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> repayment<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"messages\"><a href=\"#messages\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Messages</h3>\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\">Messages</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\">Arrears</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> monthsInArrears<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> outstandingBalance<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">Arrears</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> monthsInArrears<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> outstandingBalance<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">=</span> monthsInArrears<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>outstandingBalance <span class=\"token operator\">=</span> outstandingBalance<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CloseMortgage</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">CloseMortgage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MortgageApplication</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> income<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> wealth<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">MortgageApplication</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> income<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> wealth<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> amount<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> income<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> wealth<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ApplicationSuccessful</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">int</span> termInMonths<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">ApplicationSuccessful</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> termInMonths<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> amount<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>termInMonths <span class=\"token operator\">=</span> termInMonths<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> repayment<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Payment</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">final</span> <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">final</span> <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">Payment</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> repayment<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"final-model\"><a href=\"#final-model\" 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>Final Model</h2>\n<p>The final version of the model introduces additional features to ensure that it is a more accurate reflection of the system we are seeking to model.</p>\n<p>Agents have more complex behaviour as well as additional data.</p>\n<p>The distribution class is introduced to allow the Households to have their income drawn from data that is representative of the UK household sector as a whole. In this way we can accurately generate any number of realistically parameterised and yet heterogeneous agents.</p>","headings":[{"value":"Skeleton Model","depth":2},{"value":"Basic Model Structure","depth":3},{"value":"The Main Model Class","depth":3},{"value":"The Bank class","depth":3},{"value":"The Household Class","depth":3},{"value":"Complex Behaviours","depth":2},{"value":"The Bank Class","depth":3},{"value":"The Household Class","depth":3},{"value":"Messages","depth":3},{"value":"Final Model","depth":2}],"frontmatter":{"title":"Mortgage Model","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.0/docs/tutorials/mortgage.md","versioned":true,"version":"2.0","kind":"docs","pagePath":"/tutorials/mortgage","chronology":{"prev":{"name":"Trader Model","path":"/tutorials/trader"},"next":{"name":"Best Practices","path":"/practices"}},"lastUpdated":"2026-04-21T13:56:54.825Z"}}