{"id":607,"date":"2022-04-05T14:47:54","date_gmt":"2022-04-05T13:47:54","guid":{"rendered":"http:\/\/perf.unime.it\/magnet\/?page_id=607"},"modified":"2022-04-20T07:44:24","modified_gmt":"2022-04-20T06:44:24","slug":"model-analysis","status":"publish","type":"page","link":"http:\/\/perf.unime.it\/magnet\/?page_id=607","title":{"rendered":"Model analysis"},"content":{"rendered":"\n<p>Current version of MagNet implements transient analysis of Markovian agent based models. The analysis is arranged throughout some parameters to set before the starting of the analysis. Parameter names, C type to use for their definition, their semantics, and their default values are summarized in the following table:<\/p>\n\n\n\n<figure id=\"analysisTable\" class=\"wp-block-table\" style=\"font-size:14px\"><table><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Parameter name<\/th><th class=\"has-text-align-center\" data-align=\"center\">C type<\/th><th class=\"has-text-align-center\" data-align=\"center\">Default value<\/th><th>Semantics<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_START_TIME<\/td><td class=\"has-text-align-center\" data-align=\"center\">Time<\/td><td class=\"has-text-align-center\" data-align=\"center\">0.0<\/td><td>starting time point value in transient analysis evaluation<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_END_TIME<\/td><td class=\"has-text-align-center\" data-align=\"center\">Time<\/td><td class=\"has-text-align-center\" data-align=\"center\">0.0<\/td><td>final time point value in transient analysis evaluation<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_STEP<\/td><td class=\"has-text-align-center\" data-align=\"center\">Step<\/td><td class=\"has-text-align-center\" data-align=\"center\">0.0<\/td><td>advancement step used in transient analysis evaluation<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_TOL<\/td><td class=\"has-text-align-center\" data-align=\"center\">Tolerance<\/td><td class=\"has-text-align-center\" data-align=\"center\">10\n                              <sup>-6<\/sup>\n                            <\/td><td>tolerance level used to compare values used in numerical algorithms <\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_MAX_ITERATIONS<\/td><td class=\"has-text-align-center\" data-align=\"center\">unsigned int<\/td><td class=\"has-text-align-center\" data-align=\"center\">20<\/td><td>maximum number of possible iterations; the iteration is stopped when this value is reached\n                              <br>\n                              <br><strong>used with Euler methods only<\/strong>, ignored if othe methods are selected\n                              <br>\n                            <\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_THREADS<\/td><td class=\"has-text-align-center\" data-align=\"center\">unsigned int<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>number of threads to generate if the implementation of the selected method supports multi-threading<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_ALG<\/td><td class=\"has-text-align-center\" data-align=\"center\">SolveType<\/td><td class=\"has-text-align-center\" data-align=\"center\">OLE_2_RKF45<\/td><td>type of solution method to use in the transient ananlysis<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">OUTPUT<\/td><td class=\"has-text-align-center\" data-align=\"center\">OUT_Mode<\/td><td class=\"has-text-align-center\" data-align=\"center\">NO_MODE<\/td><td>how the results are shown<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Where the multi-threading is supported, the number of thread MagNet uses is computed at runtime. In the current version, multi-threading is implemented in the Forward Euler (explicit) method and backward Euler (implicit) method.                       <br>The values different parameters can have are as in the <a href=\"#parameterValues\">following table<\/a>; when a value is not set the default value written <a href=\"#analysisTable\">above<\/a> are assumed.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<figure id=\"paameterValues\" class=\"wp-block-table is-style-regular\" style=\"font-size:14px\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Parameter name<\/th><th>Range<\/th><th class=\"has-text-align-left\" data-align=\"left\">Note<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_START_TIME<\/td><td>&gt;=0.0 <\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_END_TIME<\/td><td>&gt;=0.0 <\/td><td class=\"has-text-align-left\" data-align=\"left\">it is user responsibility to verify that SOLUTION_END_TIME is greater than SOLUTION_START_TIME<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_STEP<\/td><td>&gt;=0.0 <\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_TOL<\/td><td>&gt;=0.0 <\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_MAX_ITERATIONS<\/td><td>&gt; 0<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_THREADS<\/td><td>&gt;=0<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">SOLUTION_ALG<\/td><td>EEULER<\/td><td class=\"has-text-align-left\" data-align=\"left\">Forward Euler (explicit) method <\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td>IEULER<\/td><td class=\"has-text-align-left\" data-align=\"left\">Backward Euler (implicit) method<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td>OLE2_RK2<\/td><td class=\"has-text-align-left\" data-align=\"left\">The GSL explicit embedded Runge-Kutta (2, 3) method<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td>OLE2_RK4<\/td><td class=\"has-text-align-left\" data-align=\"left\">The GSL explicit 4th order Runge-Kutta<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td>OLE2_RKF45<\/td><td class=\"has-text-align-left\" data-align=\"left\">The GSL explicit embedded Runge-Kutta-Fehlberg (4, 5) method<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td>OLE2_RKCK<\/td><td class=\"has-text-align-left\" data-align=\"left\">The GSL explicit embedded Runge-Kutta Cash-Karp (4, 5) method<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td>OLE2_RK8PD<\/td><td class=\"has-text-align-left\" data-align=\"left\">The GSL explicit embedded Runge-Kutta Prince-Dormand (8, 9)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">OUTPUT<\/td><td>W_MODE<\/td><td class=\"has-text-align-left\" data-align=\"left\">Density vectors are written in a set of files, one per deployed agent<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td>NO_MODE<\/td><td class=\"has-text-align-left\" data-align=\"left\">No file is produced<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p>When W_MODE is used as OUTPUT, MagNET generate one file per agent whose names are <code>agent_name.csv<\/code>, where <code>agent_name<\/code> is the same string used as name when the Markovian agent is created with <code>m3am_NewAgent<\/code>.<\/p>\n\n\n\n<p id=\"SetParams\">  <br>  <\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:18px\"><code><strong>Error m3am_SetParams(M3AM *m, ParType Pt, void *val);<\/strong><\/code><\/pre>\n\n\n\n<p><code>m3am_SetParams<\/code> sets the parameter <code>Pt<\/code> of the model <code>m<\/code> to the value <code>val<\/code>. <code>Pt<\/code> is one of the values in column <strong>Name<\/strong> of the <a href=\"#analysisTable\">table<\/a>. The value of a model parameter is passed by reference by using a generic pointer to void, thus the most appropriate way is to use a variable defined as appropriate type according to the model parameter the user want to set and then pass its reference as second parameter of <code>m3am_SetParams<\/code>. Here is an example where 10.0 and forward Euler method are set as final time point and solution method respectively when &#8220;My_Markovian_Agent_model&#8221; is solved<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-color has-cyan-bluish-gray-background-color has-text-color has-background has-medium-font-size\"><code>\nmyModel=m3am_NewModel(\"My_Markovian_Agent_model\", 2);\n  .\n  .\n  .\ndouble p=5.0;\nm3am_SetParams(VoIP, SOLUTION_END_TIME, &amp;p);\nSolveType p3=IEULER;\nm3am_SetParams(VoIP, SOLUTION_ALG, &amp;p3);\n  .\n  .\n<\/code><\/pre>\n\n\n\n<p id=\"Solve\">   <br>                     <\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:18px\"><code><strong>Error m3am_Solve(M3AM *m);<\/strong><\/code><\/pre>\n\n\n\n<p><code>m3am_Solve<\/code> performs the transient analysis of the model referenced by <code>m<\/code> from SOLUTION_START_TIME to SOLUTION_END_TIME using the parameter values previously set. The vectors defined with <code>m3am_AddInitProb<\/code> together with the density value used in <code>m3am_NewAgent<\/code> contribute to create the initial density state used as boundary conditions for the transient analysis. The results can be recovered throughout the set of files generated setting OUTPUT parameter to W_MODE, otherwise the vectors of density values at SOLUTION_END_TIME only can be recovered by using<code> <a href=\"#densityVector\">m3amGetAgentDensities<\/a><\/code> function.<\/p>\n\n\n\n<p id=\"GetAgentDensities\">  <br>                     <\/p>\n\n\n\n<pre id=\"densityVector\" class=\"wp-block-code\" style=\"font-size:18px\"><code><code><strong>Vector *m3am_GetAgentDensities(M3AM *m, const char *ma_label)<\/strong><\/code><\/code><\/pre>\n\n\n\n<p><code>m3am_GetAgentDensities<\/code> gets back a vector storing the densities of an agent, whose name is <code>ma_label<\/code>, in the model referenced by m at last evaluated time point.<br><br><\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n\n\n\n\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link has-white-color has-cyan-bluish-gray-background-color has-text-color has-background\" href=\"http:\/\/perf.unime.it\/magnet\/?page_id=604\" style=\"border-radius:25px\">Prev<\/a><\/div>\n\n\n\n\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Current version of MagNet implements transient analysis of Markovian agent based models. The analysis is arranged throughout some parameters to set before [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-607","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=\/wp\/v2\/pages\/607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=607"}],"version-history":[{"count":21,"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=\/wp\/v2\/pages\/607\/revisions"}],"predecessor-version":[{"id":779,"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=\/wp\/v2\/pages\/607\/revisions\/779"}],"wp:attachment":[{"href":"http:\/\/perf.unime.it\/magnet\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}