{"data":{"markdownRemark":{"html":"<p>The RunnerBackend and ModelRunner classes need to be used together to setup and run a simulation that can run multiple times.</p>\n<p>This guide assumes you have a Model created which implements <code class=\"language-text\">simudyne.core.Model</code>\nThe following imports are assumed</p>\n<p class=\"code-header\">Imports required for multirun (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>runner<span class=\"token punctuation\">.</span>ModelRunner<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>RunResult<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>runner<span class=\"token punctuation\">.</span>RunnerBackend<span class=\"token punctuation\">;</span></code></pre></div>\n<p>The RunnerBackend class is needed to set up the ModelRunner. The default RunnerBackend can be created by using the RunnerBackend create method. This will create an instance of the RunnerBackend that can be used to run the model locally.</p>\n<p class=\"code-header\">Create a model runner (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">RunnerBackend runnerBackend <span class=\"token operator\">=</span> RunnerBackend<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Create the ModelRunner for a specific model with <code class=\"language-text\">RunnerBackend#forModel</code> passing the class of the model or <code class=\"language-text\">RunnerBackend#forConfig</code> passing the <code class=\"language-text\">ModelConfiguration</code> for the model</p>\n<p class=\"code-header\">Create a model runner for a specific model (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">ModelRunner modelRunner <span class=\"token operator\">=</span> runnerBackend<span class=\"token punctuation\">.</span><span class=\"token function\">forModel</span><span class=\"token punctuation\">(</span>myModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Use the <code class=\"language-text\">ModelRunner</code> to set the number of ticks(steps) to run each run of the model for, and the number of runs (number of times to run the full simulation).</p>\n<p><code class=\"language-text\">withInput</code> can optionally be used to set values of <code class=\"language-text\">@Input</code> variables in the model.</p>\n<p class=\"code-header\">Setting inputs (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">modelRunner\n    <span class=\"token punctuation\">.</span><span class=\"token function\">forRuns</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">forTicks</span><span class=\"token punctuation\">(</span><span class=\"token number\">50</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">withInput</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"{\\\"myBooleanInput\\\": false}\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">withInput</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"{\\\"myStringInput\\\": \\\"aString\\\"}\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>To run the model and wait for the results, use <code class=\"language-text\">ModelRunner#run</code>. Alternatively, the model can be run as an asynchronous process in the background. This means that while its running, the progress can be tracked.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// To run the model and wait for it to complete</span>\nRunResult runResult <span class=\"token operator\">=</span> modelRunner<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\n<span class=\"token comment\">// To run the model a a background process and track the progress</span>\nFuture<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>RunResult<span class=\"token punctuation\">></span></span> runResultFuture <span class=\"token operator\">=</span> modelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">runAsync</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nmodelRunner<span class=\"token punctuation\">.</span><span class=\"token function\">getProgress</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Wait for final result</span>\nRunResult runResult <span class=\"token operator\">=</span> Await<span class=\"token punctuation\">.</span><span class=\"token function\">result</span><span class=\"token punctuation\">(</span>runResultFuture<span class=\"token punctuation\">,</span> Duration<span class=\"token punctuation\">.</span><span class=\"token function\">Inf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"running-a-distributed-multirun-with-spark\"><a href=\"#running-a-distributed-multirun-with-spark\" 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>Running a distributed multirun with Spark</h2>\n<p>Running a multirun distributed simulation depends on the package <code class=\"language-text\">core-runner-spark</code> which needs to be imported, and a config file created as explained in <config guide page>.</p>\n<p>To setup a distributed multirun, create a new instance of the SparkRunnerBackend as the RunnerBackend. All other methods are the same as for the local RunnerBackend.  </p>\n<p class=\"code-header\">Multirun with spark (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">RunnerBackend runnerBackend <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">SparkRunnerBackend</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nModelRunner modelRunner <span class=\"token operator\">=</span> runnerBackend<span class=\"token punctuation\">.</span><span class=\"token function\">forModel</span><span class=\"token punctuation\">(</span>myModel<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Extracting information from the <code class=\"language-text\">RunResult</code> is explained in <a href=\":version/reference/run_mode/multirun_output\">Multirun Output</a></p>","headings":[{"value":"Running a distributed multirun with Spark","depth":2}],"frontmatter":{"title":"Multirun Setup","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.0/reference/run_mode/multirun_setup.md","versioned":true,"version":"2.0","kind":"reference","pagePath":"/reference/run_mode/multirun_setup","chronology":{"prev":{"name":"Run mode","path":"/reference/run_mode"},"next":{"name":"Multirun Output","path":"/reference/run_mode/multirun_output"}},"lastUpdated":"2026-04-21T13:56:54.828Z"}}