{"data":{"markdownRemark":{"html":"<p>Below is a CLD style diagram representing a Checking &#x26; Savings account. We have a balance on our determined by out Income and Spending, and we have a basic plan set up where as long as our balance is above a certain threshold we'll transfer the excess to our Savings to maximize our return on interest.</p>\n<div class=\"bankingcld\">\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-4d34f.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: 447px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 111.2751677852349%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAABJ0AAASdAHeZh94AAACDklEQVQ4y5WUyY4CMQxE8/+fxBUOcOLCLvZ938UOHj2P3Eo3HYaxFHU6ccrlshMnKfZ8PuVwOMhgMJDZbCaLxULm87lMp1Nde71eb2fO57N+HY7r9VoP4DyZTHSUSiXZbrfqdDqd5HK56Jy98XisQfAfDof6bbVast/vxdXrdY3cbDalUChIsVhUZ9Y5eLvdpNPp6BwbjUbS7Xal3W5LPp+XXC4n5XJZlsulrrvH46EpgM4iBjMCwPp6vSoog7RgBGPseDzKarXSvV6v95uyacAmTH0jAKkQGZZIs9lsIg3RmWx8c7YJQ/TBWLP1RqMRgSWNgpnOdiYCJPV+v68p3O/32KFaraZsqT6DbKyIZobj/B+cOYjwOKMLYKRVrVaVLbIQhNSTYLGUk71lKRAEKQAlmN+HvjSpDM3Bd0RbWgbWAFII64w0Mi4JAiPfYEZR6DvA0tKMVTl09WAGK4qElvSfpQzDEKjDabfb6UEqxxfRuXrMMRrXKo8/zR4EpIqIzs3IZDKSzWYVmKsHQ9jCkMGcfvwISGR7KQCrVCr6T4vYtSJFBnOCfwT0f2hshl8Q5KAgXD8CMEKtFlXZKot2iE7zwpw9HgKCJKsfrLK/QZoAoBP60X9U1yQBNNR/sZTZgBUVhKU9Tz6rTyBvgLwYAKIVKcPMwP5ilApIioiP8MbyW82CKcPKniXA/wPi2w+2kaTRLKsklwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-ae178.webp 173w,\n/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-e8c82.webp 345w,\n/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-32776.webp 690w,\n/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-10b20.webp 745w\"\n          sizes=\"(max-width: 447px) 100vw, 447px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-37dcf.png 173w,\n/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-7dfaf.png 345w,\n/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-42dd8.png 690w,\n/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-4d34f.png 745w\"\n          sizes=\"(max-width: 447px) 100vw, 447px\"\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/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-42dd8.png\"\n          alt=\"bankingcld\"\n          title=\"\"\n          src=\"/static/bankingcld-ee557d1485b7047fd39bd63ee5d8f4a1-42dd8.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n</div>\n<p>You'll notice that there are two types of arrows in this design meant to denote the difference between flows and dependencies. This will become clearer as we look into the actual functional requirements for the values of these flows.</p>\n<h5 class=\"ui top attached header\">Defining our Model Logic (psuedo-code)</h5>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">\tBalance = 5000 per month\n\t\n\tSpending = 4000 per month\n\t\n\tSaving = Min(Balance, Max(500, (Income + Balance - Spending - 2000)))\n\t\n\tInterest = Savings * Interest Rate</code></pre></div>\n<p>Given these two simple equations let's begin to compose our model.</p>\n<h5 class=\"ui top attached header\">Defining our Model (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@SystemDynamicsSettings</span><span class=\"token punctuation\">(</span>resolution <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BankingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">SystemDynamicsModel</span> <span class=\"token punctuation\">{</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>We've defined our model, we're extending from a SystemDynamicsModel so that our dependencies are built and our stocks are properly calculated. We also define the resolution here, although the default will always be 1.</p>\n<p>Now let's add our stocks and the basic flows for Income/Spending</p>\n<h5 class=\"ui top attached header\">Adding Variables, and Basic Flows (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@SystemDynamicsSettings</span><span class=\"token punctuation\">(</span>resolution <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BankingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">SystemDynamicsModel</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Stock</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> Balance <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Stock</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> Savings <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Intermediate</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> InterestRate <span class=\"token number\">0.5</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>to <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\">double</span> <span class=\"token function\">Income</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 number\">5000.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>from <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\">double</span> <span class=\"token function\">Spending</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 number\">4000.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>While a typical bank would want you to start with a positive balance, for now, let's simplify and keep it at 0. You'll notice that we've not specified any arguments or a complete source/destination for the two flows.</p>\n<p>This is because we've simplified that our income comes from some 'source' be it employer(s), stocks, etc. and has gone out via spending. You should feel empowered to extend this such that spending is divided into fixed and variable costs and potentially use that to inform value of spending changes, and how it affects savings.</p>\n<p>And now our finished model as we compose the above equations into flows.</p>\n<h5 class=\"ui top attached header\">Creating the more Complex Flow Logic (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@SystemDynamicsSettings</span><span class=\"token punctuation\">(</span>resolution <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BankingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">SystemDynamicsModel</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Stock</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> Balance <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Stock</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> Savings <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Intermediate</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> InterestRate <span class=\"token number\">0.5</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>to <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\">double</span> <span class=\"token function\">Income</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 number\">5000.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>from <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\">double</span> <span class=\"token function\">Spending</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 number\">4000.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n    from <span class=\"token operator\">=</span> <span class=\"token string\">\"Balance\"</span><span class=\"token punctuation\">,</span>\n    to <span class=\"token operator\">=</span> <span class=\"token string\">\"Savings\"</span><span class=\"token punctuation\">,</span>\n    args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"Balance\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Income\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Spending\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Saving</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> bal<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> inc<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> spe<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">double</span> adjusted <span class=\"token operator\">=</span> inc <span class=\"token operator\">+</span> bal <span class=\"token operator\">-</span> spe <span class=\"token operator\">-</span> <span class=\"token number\">2000</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">double</span> ret <span class=\"token operator\">=</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">min</span><span class=\"token punctuation\">(</span>bal<span class=\"token punctuation\">,</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">max</span><span class=\"token punctuation\">(</span><span class=\"token number\">500</span><span class=\"token punctuation\">,</span> adjusted<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> ret<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n    to <span class=\"token operator\">=</span> <span class=\"token string\">\"Savings\"</span><span class=\"token punctuation\">,</span>\n    args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"Savings\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"InterestRate\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Interest</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> save<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> irate<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> save <span class=\"token operator\">*</span> irate<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>You'll notice we decided to create a local variable called 'adjusted' in the Saving flow. This is for easier readability and testing. However, let's make a few changes so we'll be able to see and interact with this model in the Console by adding the core annotations for Input &#x26; Variable.</p>\n<h5 class=\"ui top attached header\">Adding Core Annotations for Console (java)</h5>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@SystemDynamicsSettings</span><span class=\"token punctuation\">(</span>resolution <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BankingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">SystemDynamicsModel</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token annotation punctuation\">@Stock</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> Balance <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token annotation punctuation\">@Stock</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> Savings <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Input</span> <span class=\"token annotation punctuation\">@Intermediate</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> InterestRate <span class=\"token operator\">=</span> <span class=\"token number\">0.5</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>to <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\">double</span> <span class=\"token function\">Income</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 number\">5000.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>from <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\">double</span> <span class=\"token function\">Spending</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 number\">4000.0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n    from <span class=\"token operator\">=</span> <span class=\"token string\">\"Balance\"</span><span class=\"token punctuation\">,</span>\n    to <span class=\"token operator\">=</span> <span class=\"token string\">\"Savings\"</span><span class=\"token punctuation\">,</span>\n    args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"Balance\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Income\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Spending\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Saving</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> bal<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> inc<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> spe<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">double</span> adjusted <span class=\"token operator\">=</span> inc <span class=\"token operator\">+</span> bal <span class=\"token operator\">-</span> spe <span class=\"token operator\">-</span> <span class=\"token number\">2000</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">double</span> ret <span class=\"token operator\">=</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">min</span><span class=\"token punctuation\">(</span>bal<span class=\"token punctuation\">,</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">max</span><span class=\"token punctuation\">(</span><span class=\"token number\">500</span><span class=\"token punctuation\">,</span> adjusted<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> ret<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Flow</span><span class=\"token punctuation\">(</span>\n    to <span class=\"token operator\">=</span> <span class=\"token string\">\"Savings\"</span><span class=\"token punctuation\">,</span>\n    args <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"Savings\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"InterestRate\"</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> <span class=\"token function\">Interest</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span> save<span class=\"token punctuation\">,</span> <span class=\"token keyword\">double</span> irate<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> save <span class=\"token operator\">*</span> irate<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Now when we run our model we'll see that our Balance will add value eventually plateauing at 2000. As well because we've set a very-high interest rate to be calculated every month that our Savings will over time increase dramatically.</p>","headings":[],"frontmatter":{"title":"Savings Model Example","toc":null,"experimental":true}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.6/reference/system_dynamics/savings_model.md","versioned":false,"version":"2.6","kind":"reference","pagePath":"/reference/system_dynamics/savings_model","chronology":{"prev":{"name":"Modelling System Dynamics","path":"/reference/system_dynamics/modelling_sd"},"next":{"name":"Experimental","path":"/reference/experimental"}},"lastUpdated":"2026-04-21T13:56:54.870Z"}}