{"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>Get started by learning how to build a very simple 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>The Model interface wraps everything you define to build a simulation. 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.</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<p>You will find an error near your model declaration. This is because you need to define the <code class=\"language-text\">step()</code> method.</p>\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\">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 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\">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<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>Click the green play arrow or right click and run <code class=\"language-text\">Main.java</code> to control your model in the console.</p>\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<p>Any models registered on the <code class=\"language-text\">Server</code> will appear in the model list.</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: 32.84457478005865%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsSAAALEgHS3X78AAABWElEQVQoz5XRTUsCQRgH8D31BfoIBV2qSxD0duhUREIXszrV1aibBR3zEtShPoYFaRSVaWoZZRq5omiSUERFChruuhruPPvvcelSINLAj/8wzDzzJkk/DUBbpSKuNI1SQkDWdSQaajUkeLwVmSXZtdTfdWPrbA9PrSyl7V81QOhANvuC56e8SSnrIAK4eHN1Po4B8OZC2t54x5bzDQ57DqWi4KWgh2yGMpkUZ5oUtWyOtSAYqlVDlcLBkh44K+rOtUeR/6gbIf8njg/KhvdQwSk7chfh2SuY9l0FuF2/07Nr9o2grwxNMyrSDp9wc/0VjsUcuCAtWJNkm4jTNJuzyDQzKdOsJUHjg3c01B2hkd5bGmZm9kRotC9KYwMxMW9NQVFINd+wg99wdTljr1aB+2gdAa+Ky3PNdOHnDGgI+SpN+U9UxGN648pC+vvLnCkms8Q/NOabv/wNIo7NoYkyxF0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-8e416.webp 173w,\n/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-0b506.webp 345w,\n/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-58be5.webp 690w,\n/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-39a4e.webp 1023w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-7e3fa.png 173w,\n/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-7f1d4.png 345w,\n/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-13856.png 690w,\n/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-373ef.png 1023w\"\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/model_list-1c9b652191f0cb976a49cfc206c66b4c-13856.png\"\n          alt=\"model list\"\n          title=\"\"\n          src=\"/static/model_list-1c9b652191f0cb976a49cfc206c66b4c-13856.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: 65.08728179551122%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsSAAALEgHS3X78AAAA6UlEQVQ4y62T3Q6CMAyF9/7v5rVeeaMMlZCIboCwtp7yo2iIotDkpFtpvp2OzJRluYnjOE/TNMP6IiIXZm7yu7Q+JnzLiMiFEHamqqpDkiRirRXvvbxEIPklAHQGriLdAEbOOVb5POdQ3rja7thjf4Vy1D6FMpAyg0YLssAyQ3oKjJHuhdr6FDVA5MwURWG12B7A8qeeQIzcAHvns4G4u2ZkLU4cb9rIPXC2w/6nLHaHChw67F1+G/Ot52XkqK5raXnEHfiRx2ojPdQBzwbjnmShANAbuFsBekTeQxGeYjTMnzTs0SeMvL4DAiv/rpx4HqQAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/linechart-87e9be99d296e3626cf07cdab755b86a-8e416.webp 173w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-0b506.webp 345w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-58be5.webp 690w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-59b8d.webp 1035w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-4a474.webp 1380w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-3bbac.webp 1604w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/linechart-87e9be99d296e3626cf07cdab755b86a-7e3fa.png 173w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-7f1d4.png 345w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-13856.png 690w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-045bb.png 1035w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-f46ab.png 1380w,\n/static/linechart-87e9be99d296e3626cf07cdab755b86a-be615.png 1604w\"\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/linechart-87e9be99d296e3626cf07cdab755b86a-13856.png\"\n          alt=\"linechart\"\n          title=\"\"\n          src=\"/static/linechart-87e9be99d296e3626cf07cdab755b86a-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 annotation.\n</div>\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<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<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<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\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.0/docs/overview/credit-card.md","versioned":true,"version":"2.0","kind":"docs","pagePath":"/overview/credit-card","chronology":{"prev":{"name":"Setup","path":"/overview/download"},"next":{"name":"Tutorials","path":"/tutorials"}},"lastUpdated":"2026-04-21T13:56:54.824Z"}}