{"data":{"markdownRemark":{"html":"<h2 id=\"phase-1\"><a href=\"#phase-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>Phase 1</h2>\n<p>The Model interface wraps everything you define to build a simulation. Get started by learning how to build the credit card model.</p>\n<h3 id=\"1-create-a-model\"><a href=\"#1-create-a-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>1. Create a Model</h3>\n<p>First, create a new Java class in the same directory as <code class=\"language-text\">Main.java</code> in which you will implement the <code class=\"language-text\">Model</code> interface. In order to do so, right click on the directory and select <code class=\"language-text\">new</code> then <code class=\"language-text\">Java File</code>.</p>\n<div class=\"ui segment info message\">\n  <h4>What is an interface?</h4>\n  A Java interface is a set of methods declared but generally not defined. To implement an interface, an object must first define its methods.\n</div>\n<p>Insert <code class=\"language-text\">implements Model</code> after the class name and hit enter to automatically add the interface declaration at the top of the code.</p>\n<p class=\"code-header\">CreditCard.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>Model<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CreditCard</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">Model</span> <span class=\"token punctuation\">{</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"ui segment info message\">The Model is the core abstraction around which the Simudyne engine is designed. For more detailed information, you can consult the <a href=\"https://javadoc.simudyne.com/javadoc/2.1/index.html\"> javadoc</a>.</div>\nYou will find an error near your model declaration. This is because you need to define the `step()` method.\n<h3 id=\"2-define-step\"><a href=\"#2-define-step\" 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>2. Define step()</h3>\n<p>The <code class=\"language-text\">step()</code> method is called at each tick of the model. The calculations for every tick are specified inside the <code class=\"language-text\">step()</code> method.</p>\n<p>Start by creating a variable called <code class=\"language-text\">balance</code> set to 400 and incremented by 20% at every tick.</p>\n<p class=\"code-header\">Overriding step CreditCard.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>Model<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\">CreditCard</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">Model</span> <span class=\"token punctuation\">{</span>\n <span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Balance\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> balance <span class=\"token operator\">=</span> <span class=\"token number\">400</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\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    balance \\<span class=\"token operator\">*=</span> <span class=\"token number\">1.2</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"ui segment info message\">\n  <h4>What is an annotation ?</h4>\nAnnotations are used to mark fields in the model as inputs, outputs or constants. Learn more about annotations in the <a href=\":version/reference/models/annotations\">reference</a> section.</div>\n<h3 id=\"3-setup-the-server\"><a href=\"#3-setup-the-server\" 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>3. Setup the Server</h3>\n<p>Before running the model, add it to the <code class=\"language-text\">Main.java</code> class to register on the <code class=\"language-text\">Server</code>.</p>\n<p class=\"code-header\">Registering a model Main.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>nexus<span class=\"token punctuation\">.</span>Server<span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>example<span class=\"token punctuation\">.</span>models<span class=\"token punctuation\">.</span>CreditCard<span class=\"token punctuation\">.</span>CreditCard<span class=\"token punctuation\">;</span>\n\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Main</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      Server<span class=\"token punctuation\">.</span><span class=\"token function\">register</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"My Credit Card\"</span><span class=\"token punctuation\">,</span> CreditCard<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      Server<span class=\"token punctuation\">.</span><span class=\"token function\">run</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>or run using the command:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ Run Main\n$ simudyne-maven-java&gt; mvn clean compile exec:java -Dexec.mainClass=&quot;Main&quot; -s settings.xml</code></pre></div>\n<p>By default, the console can be found at <a href=\"localhost:8080\">localhost:8080</a>.</p>\n<h3 id=\"4-launch-console\"><a href=\"#4-launch-console\" 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>4. Launch Console</h3>\n<p>After launching the console, you will be brought to a list of models registered with the server. We have only registered \"My Credit Card\" so we only have one. Click on the model to be brought to the console for that model. Then, click the initialise button to initialise an interactive run.</p>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 95px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 73.68421052631578%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAABaElEQVQ4y51TS46CQBDldp7BC7jwAiauNCFGJSau2JBAMB7DA7hx5U534MKoIH4Q/L6ZqqSdxnQTM5UU9ejX1B8Dv/J6vZQqcyqsEkOQj8cDz+eTrS6ALmDBoS4SCQUoE9W3nOH5fIbrulgulxiNRkxcr1e2k8kE8/mc8Ww2w3Q6ZUyVKDOkx3a7RaVSQa1WQ7VahW3b6Pf78DwP9Xod3W4XrVYLnU4Hpmmi1+shyzK9wziO2clgMMB4PMZwOIRlWXAcB+12m22j0WDO9300m00kSaJ3KDdZ9O52uzE+nU5s7/c7WzoXnLKH8uHnhbIV0U65bA+/XRsZG7qs5HfdaqmqM8QKpGnKKnp4PB4Le0hTpXukxMlZ5Xn+l6FwuFgsWHe7HU+dpkjrFIYhVqsVgiBgLLjNZvPm1ut10SGBy+XCCx5FEWd2OBw4K5oyYeKoApo24f1+z5xc2buHZb/ft1Lo4X+nrJr4DwzVeoVB+m/dAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/model_list_v2_1-bd8ab5110d870e5149c8d70cd4ae00e8-73ace.webp 173w,\n/static/model_list_v2_1-bd8ab5110d870e5149c8d70cd4ae00e8-9c0f4.webp 190w\"\n          sizes=\"(max-width: 95px) 100vw, 95px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/model_list_v2_1-bd8ab5110d870e5149c8d70cd4ae00e8-cee91.png 173w,\n/static/model_list_v2_1-bd8ab5110d870e5149c8d70cd4ae00e8-84223.png 190w\"\n          sizes=\"(max-width: 95px) 100vw, 95px\"\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/model_list_v2_1-bd8ab5110d870e5149c8d70cd4ae00e8-84223.png\"\n          alt=\"model list v2 1\"\n          title=\"\"\n          src=\"/static/model_list_v2_1-bd8ab5110d870e5149c8d70cd4ae00e8-84223.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<p>This will then display a number of buttons.</p>\n<ul>\n<li>The cross allows you to cancel the run at any point.</li>\n<li>Step allows you to run your model for a single time step.</li>\n<li>Run, runs the model for the number of macro time steps we specify (to be discussed).</li>\n</ul>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 270px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 28.888888888888886%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABBElEQVQY041QTUuEUBT1p9WmKSbKWtQ/cVUMRFtnTIdoO4v+wQwFRUsXCtNaRHEjIrjQ8amjTzzNu8NIDFFdONxz7uOd+yGFYYi2bfGf6Lquzz9BhKQoClzXhWVZ8DwPy+UnbNuG4ziUgyAAYwxN0/xq1huapklkva4o85aj4dvPO5Pv0/21gTSbPWOxeIWqPmAyNjA1njCfv0DXH6FpU4xVHe9vH6jrGmmaIs9zlGXZo6oqqok3mvBCvsZodI/B0RkEPzmWcXtzB/n8CqfDSxweDKBNDKxWGXzfRxzHyLKMDAQET5IEURRtDVnOwDnfdGF0q6IoSDNWkBbdhd5fbf92u/oX0qe0hUgsk4wAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-d1817.webp 173w,\n/static/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-01e3a.webp 345w,\n/static/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-47b35.webp 540w\"\n          sizes=\"(max-width: 270px) 100vw, 270px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-9bb62.png 173w,\n/static/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-8b6ee.png 345w,\n/static/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-86a14.png 540w\"\n          sizes=\"(max-width: 270px) 100vw, 270px\"\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/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-86a14.png\"\n          alt=\"run tabs\"\n          title=\"\"\n          src=\"/static/run_tabs-be29e1fd993835ab92f8f2c548ee3af5-86a14.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<h3 id=\"5-run-simulation\"><a href=\"#5-run-simulation\" 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>5. Run Simulation</h3>\n<p>Once you've opened your model you will see a tile for the <code class=\"language-text\">balance</code> variable which you annotated earlier.</p>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 55.59055118110236%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA4ElEQVQoz5VS7Q6DIAzk/R/LLHGPMmP8seEmX6Xj0GYqsGVNzqZwHu2B6roL9/2Vp2liImLnXEaMMdcCay2HlKN1HOYnO+/zOgJcgRpuA4/jyMYYDiHkLIIF8HMSNPcHv8zCFOhwKKBwcqLlwqdTUSOfOxRAFN21OEprfdj0G/k8iiB9PpxYcpSMJwFRjN4E9jevUUN4v69ESERBWJZlHa/iIRnLpOfVTyonUIdxNkH4WPUQa6mL6AO3Qu29QsgYrUuhrVOuvQJ0WBOEP9+8FO7e+6JDyT8v5V/BGqkWLd4baxBlv7i7NesAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-8e416.webp 173w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-0b506.webp 345w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-58be5.webp 690w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-59b8d.webp 1035w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-4a474.webp 1380w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-bc809.webp 2070w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-ac3bb.webp 2540w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-7e3fa.png 173w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-7f1d4.png 345w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-13856.png 690w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-045bb.png 1035w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-f46ab.png 1380w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-ea5f6.png 2070w,\n/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-91c6c.png 2540w\"\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/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-13856.png\"\n          alt=\"blank credit card\"\n          title=\"\"\n          src=\"/static/blank_credit_card-50d54cd0ea99a95455be521ce3ffeaee-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<p>Use the arrows at the top of the console to control your simulation and watch your balance grow.</p>\n<h2 id=\"phase-2\"><a href=\"#phase-2\" 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>Phase 2</h2>\n<p>In order to improve the complexity of the model you will add:</p>\n<ul>\n<li>Spending</li>\n<li>Repayment</li>\n<li>Interest</li>\n</ul>\n<h3 id=\"1-declare-parameters\"><a href=\"#1-declare-parameters\" 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>1. Declare Parameters</h3>\n<p>Add the new parameters required for the extended model.</p>\n<div class=\"ui segment info message\">\n  <h4> Input Annotations</h4>\nTo add inputs to the console, use the @Input(name = \"inputName\").\n</div>\n<p class=\"code-header\">Annotating inputs</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Spending\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> isSpending <span class=\"token operator\">=</span> <span class=\"token boolean\">true</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\">\"Spending Amount\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> spending <span class=\"token operator\">=</span> <span class=\"token number\">250f</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\">\"Repayment Amount\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> repayment <span class=\"token operator\">=</span> <span class=\"token number\">200f</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\">\"Interest Rate\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> interest <span class=\"token operator\">=</span> <span class=\"token number\">0.03f</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"2-define-calculations\"><a href=\"#2-define-calculations\" 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>2. Define Calculations</h3>\n<p>Add new variables and update the calculations in the <code class=\"language-text\">step()</code> method.</p>\n<p class=\"code-header\">Annotating Variables</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Interest Charge\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> <span class=\"token function\">interest_charge</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">return</span> interest <span class=\"token operator\">*</span> balance<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n<span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Balance Additions\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> <span class=\"token function\">balance_additions</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 function\">interest_charge</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>isSpending <span class=\"token operator\">?</span> spending <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 punctuation\">}</span>\n\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  balance <span class=\"token operator\">+=</span> <span class=\"token function\">balance_additions</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> repayment<span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>balance <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    balance <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"3-initialize-balance\"><a href=\"#3-initialize-balance\" 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>3. Initialize Balance</h3>\n<p>To specify an initial value for <code class=\"language-text\">balance</code>, add the <code class=\"language-text\">initializable</code> parameter to its variable annotation.</p>\n<p class=\"code-header\">Initialize Variables</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Balance\"</span><span class=\"token punctuation\">,</span> initializable <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">long</span> balance <span class=\"token operator\">=</span> <span class=\"token number\">400</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"4-model-settings\"><a href=\"#4-model-settings\" 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>4. Model Settings</h3>\n<p>Now we set up the annotations on the model, this will set the model time unit, and define the 'macro step' which is what you'll see on the console when you want to advance time by more than a tick, in this case, a year.</p>\n<p class=\"code-header\">Specify the macroStep</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@ModelSettings</span><span class=\"token punctuation\">(</span>timeUnit <span class=\"token operator\">=</span> <span class=\"token string\">\"MONTHS\"</span><span class=\"token punctuation\">,</span> macroStep <span class=\"token operator\">=</span> <span class=\"token number\">12</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CreditCard</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">Model</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"5-final-model\"><a href=\"#5-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>5. Final Model</h3>\n<p>In the console you will find inputs that you can control during the simulation. Your model class should look like this:</p>\n<p class=\"code-header\">CreditCard.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>Model<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>Variable<span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@ModelSettings</span><span class=\"token punctuation\">(</span>timeUnit <span class=\"token operator\">=</span> <span class=\"token string\">\"MONTHS\"</span><span class=\"token punctuation\">,</span> macroStep <span class=\"token operator\">=</span> <span class=\"token number\">12</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CreditCard</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">Model</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\">\"Spending\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> isSpending <span class=\"token operator\">=</span> <span class=\"token boolean\">true</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\">\"Spending Amount\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> spending <span class=\"token operator\">=</span> <span class=\"token number\">250f</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\">\"Repayment Amount\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> repayment <span class=\"token operator\">=</span> <span class=\"token number\">200f</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\">\"Interest Rate\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> interest <span class=\"token operator\">=</span> <span class=\"token number\">0.03f</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Balance\"</span><span class=\"token punctuation\">,</span> initializable <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">long</span> balance <span class=\"token operator\">=</span> <span class=\"token number\">400</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Interest Charge\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> <span class=\"token function\">interest_charge</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">return</span> interest <span class=\"token operator\">*</span> balance<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Balance Additions\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">float</span> <span class=\"token function\">balance_additions</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 function\">interest_charge</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>isSpending <span class=\"token operator\">?</span> spending <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 punctuation\">}</span>\n\n  <span class=\"token comment\">// Model Interface Methods</span>\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    balance <span class=\"token operator\">+=</span> <span class=\"token function\">balance_additions</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> repayment<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>balance <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      balance <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>If you have followed our guidelines, your model output should closely resemble the following.</p>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 43.784078516902945%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsSAAALEgHS3X78AAAAwUlEQVQoz52R4QqDMAyE+/4P6uifDrS1WrUZn3jSodtggSOmvVyu0XXdw8IzWM7Z5nm2bdus1nqilLLnvu8tpXRw6slb13X/9t5bjNEcDcuy2DRNb4JkQIPuGUqmVt84jhZC2Gu4jkOAGA1ciCwSIFS3L2hBuNY60yUghwKh4XJOlgHpODsCAi512YpCHIbhXImGcs6rgFw6WdWeRGz3B/ghevq3uAjiUE61Sw0hPu3v4lA7lMDdHlvRnw7vBP4RfAENacabfH2y3AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-8e416.webp 173w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-0b506.webp 345w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-58be5.webp 690w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-59b8d.webp 1035w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-4a474.webp 1380w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-5e9f5.webp 1834w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-7e3fa.png 173w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-7f1d4.png 345w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-13856.png 690w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-045bb.png 1035w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-f46ab.png 1380w,\n/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-8e42a.png 1834w\"\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/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-13856.png\"\n          alt=\"console simple credit card visual\"\n          title=\"\"\n          src=\"/static/console_simple_credit_card_visual-3e1215b42d7228e63925c31d05c091ce-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>","headings":[{"value":"Phase 1","depth":2},{"value":"1. Create a Model","depth":3},{"value":"2. Define step()","depth":3},{"value":"3. Setup the Server","depth":3},{"value":"4. Launch Console","depth":3},{"value":"5. Run Simulation","depth":3},{"value":"Phase 2","depth":2},{"value":"1. Declare Parameters","depth":3},{"value":"2. Define Calculations","depth":3},{"value":"3. Initialize Balance","depth":3},{"value":"4. Model Settings","depth":3},{"value":"5. Final Model","depth":3}],"frontmatter":{"title":"Build a Model","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.1/docs/overview/credit-card.md","versioned":true,"version":"2.1","kind":"docs","pagePath":"/overview/credit-card","chronology":{"prev":{"name":"Setup","path":"/overview/download"},"next":{"name":"Tutorials","path":"/tutorials"}},"lastUpdated":"2026-04-21T13:56:54.829Z"}}