{"id":1308,"date":"2017-01-09T23:13:26","date_gmt":"2017-01-10T04:13:26","guid":{"rendered":"http:\/\/rpchurchill.com\/?p=1308"},"modified":"2017-02-03T12:57:21","modified_gmt":"2017-02-03T17:57:21","slug":"a-simple-discrete-event-simulation-part-68","status":"publish","type":"post","link":"https:\/\/rpchurchill.com\/wordpress\/posts\/2017\/01\/09\/a-simple-discrete-event-simulation-part-68\/","title":{"rendered":"A Simple Discrete-Event Simulation: Part 68"},"content":{"rendered":"<p><iframe loading=\"lazy\" width=\"418px\" height=\"1150px\" src=\"https:\/\/www.rpchurchill.com\/demo\/des\/discrete-event-sim_20170109.html\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>Last time I got the system to handle multiple types of entities and today I updated the reporting capability so it generates results for the system as a whole and for each type of entity that we might want to report on.  Entities can be differentiated by many properties singly or in combination.  I therefore found it necessary to structure the solution so the hand-coding required to ensure all the correct statistical accumulators get updated is concentrated into as few, easily identifiable places as possible.<\/p>\n<p>The existing code that managed the various accumulators was easily modified to update an accumulator array of choice instead of just the single global one.  The <code>recordGroupStats<\/code> function shown below used to write directly to the <code>statsArray<\/code> accumulator directly, but here we&#8217;ve modified it to write to an accumulator of choice by specifying target accumulator array in the <code>whichStatsArray<\/code> parameter.  We then created a &#8220;wrapper&#8221; function that called the original function so it&#8217;s applied to each desired accumulator.  The invocations of the original function were easy to find in the code and update to their wrapped version with a slight change of parameters.<\/p>\n<p>Note that the wrapper function must refer to the relevant entity so its type and classification can be determined.  This determination can be done using any combination of an entity&#8217;s properties, although this example shows a very simple division based on a single property.  It&#8217;s also possible to collect the statistics in numerous different ways.  In this case we broke things down by an entity&#8217;s residency but in the future we&#8217;ll also break it down by processing speed, when we segregate those entities within the simulation.<\/p>\n<pre class=\"toolbar-overlay:false wrap:false height-set:true lang:default decode:true \">\r\n    function recordGroupStats(whichStatsArray,groupName,beginTime) {\r\n      var elapsedTime = globalSimClock - beginTime;\r\n      var index = getIndexOfGroupStatsItem(groupName);\r\n      if (index >= 0) {\r\n        whichStatsArray[index][statsTimeIndex][0]++;  \/\/number of entries\r\n        whichStatsArray[index][statsTimeIndex][1] += elapsedTime;  \/\/elapsed time accumulator\r\n        if (elapsedTime > whichStatsArray[index][statsTimeIndex][2]) {\r\n          whichStatsArray[index][statsTimeIndex][2] = elapsedTime;  \/\/highest elapsed time\r\n        }\r\n        if (elapsedTime < whichStatsArray[index][statsTimeIndex][3]) {\r\n          whichStatsArray[index][statsTimeIndex][3] = elapsedTime;  \/\/lowest elapsed time\r\n        }\r\n        whichStatsArray[index][statsTimeIndex][4]--; \/\/ number of entities in system at time of recording\r\n        if (whichStatsArray[index][statsTimeIndex][4] > whichStatsArray[index][statsTimeIndex][5]) {\r\n          whichStatsArray[index][statsTimeIndex][5] = whichStatsArray[index][statsTimeIndex][4];  \/\/highest count in system\r\n        }\r\n        if (whichStatsArray[index][statsTimeIndex][4] < whichStatsArray[index][statsTimeIndex][6]) {\r\n          whichStatsArray[index][statsTimeIndex][6] = whichStatsArray[index][statsTimeIndex][4];  \/\/lowest count in system\r\n        }\r\n      } else {\r\n        alert(\"Tried to add stats to nonexistent name: \"+groupName);\r\n      }\r\n    }  \/\/recordGroupStats\r\n\r\n    function recordGroupStatsWrapper(groupName,beginTime,entity) {\r\n      recordGroupStats(statsArrayGlobal,groupName,beginTime);\r\n      \r\n      if (entity.getPropertyValue(\"Residency\") == \"Citizen\") {\r\n        targetStatsArray = statsArrayCitizen;\r\n      } else if (entity.getPropertyValue(\"Residency\") == \"LPR\") {\r\n        targetStatsArray = statsArrayLPR;\r\n      } else if (entity.getPropertyValue(\"Residency\") == \"Visitor\") {\r\n        targetStatsArray = statsArrayVisitor;\r\n      }\r\n      recordGroupStats(targetStatsArray,groupName,beginTime);\r\n    }\r\n<\/pre>\n<p>Initialization of the statistical accumulator arrays was rolled up into a function so the reset mechanism could easily make a single call instead of having to duplicate the code in two places.  We can define accumulators for as many entity subtypes as we'd like.<\/p>\n<pre class=\"toolbar-overlay:false wrap:false height-set:true lang:default decode:true \">\r\n    var groupStatsNamesList = [];\r\n    var statsArrayGlobal;           \/\/accumulator for all entities\r\n    var statsArrayCitizen;          \/\/accumulator for one subtype\r\n    var statsArrayLPR;              \/\/accumulator for one subtype\r\n    var statsArrayVisitor;          \/\/accumulator for one subtype\r\n    var statsTimeIndex = 0;\r\n    var statsUpdateInterval = 30;\r\n    \r\n    function initStatsArrays() {\r\n      statsArrayGlobal = [];        \/\/this line was directly invoked here and in the reset function\r\n      statsArrayCitizen = [];                   \/\/...but resetting just calls the function now\r\n      statsArrayLPR = [];\r\n      statsArrayVisitor = [];\r\n    }\r\n    initStatsArrays();\r\n<\/pre>\n<p>There were a few places where I had to something slightly more complex, like ensure a counter referred to by all the accumulators was only updated once, but the main work was straightforward.<\/p>\n<p>The output of the report is simply repeated once for all entities and again for each entity type or subtype the programmer wanted.  I added a text title for each set of accumulated data to identify its entity subtype and corrected a bug I noticed where the Max and Min values in each row weren't being calculated correctly.  <\/p>\n<pre class=\"toolbar-overlay:false wrap:false height-set:true lang:default decode:true \">\r\nAll Entities\r\nTabulated Results\r\n\r\nPrimary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     1    1    0\r\n  90     0     0.0    0.0    0.0     3    3    1\r\n 120     3    28.9   33.1   23.5     6    6    1\r\n 150     4    29.4   33.1   23.5     6    7    5\r\n 180     5    34.4   40.4   26.5     9   10    6\r\n 210     5    35.4   37.8   29.9    13   13    7\r\n 240     6    51.2   67.2   40.2    12   13   11\r\n 270     6    56.4   64.8   43.7    17   18   12\r\n 300     6    63.1   74.2   49.6    18   18   15\r\n 330     6    69.3   77.0   60.8    14   18   12\r\n 360     6    79.2   90.6   74.1    11   15   11\r\n 390     7    81.1   93.1   59.1     6   11    6\r\n 420     5    70.1   78.2   55.3     1    6    1\r\n 450     1    39.8   39.8   39.8     0    1    0\r\n 480     0     0.0    0.0    0.0     0    0    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal   60    57.1   93.1    0.0    18   18    0\r\n\r\nSecondary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     0    0    0\r\n 180     0     0.0    0.0    0.0     0    0    0\r\n 210     0     0.0    0.0    0.0     1    1    0\r\n 240     0     0.0    0.0    0.0     4    4    1\r\n 270     2    46.3   46.4   46.2     2    4    2\r\n 300     1    78.5   78.5   78.5     3    3    2\r\n 330     1    66.3   66.3   66.3     3    4    3\r\n 360     2    50.3   52.0   48.5     3    3    2\r\n 390     1    83.1   83.1   83.1     4    4    3\r\n 420     1    46.2   46.2   46.2     3    4    3\r\n 450     2    62.2   69.5   54.9     2    3    2\r\n 480     2    66.0   85.8   46.2     0    2    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal   12    60.3   85.8    0.0     4    4    0\r\n\r\nSystem\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     1    1    0\r\n  90     0     0.0    0.0    0.0     3    3    1\r\n 120     3    43.5   47.9   37.4     6    7    3\r\n 150     3    43.8   47.9   39.2    10   11    6\r\n 180     5    49.7   57.1   40.4    12   14   10\r\n 210     5    49.5   52.6   43.8    15   15   11\r\n 240     2    62.4   70.8   54.0    22   22   15\r\n 270     5    73.5  107.2   56.9    24   24   21\r\n 300     6    84.6  116.6   71.6    24   24   20\r\n 330     7   101.9  153.5   77.8    21   24   18\r\n 360     6   105.7  138.4   88.9    17   21   17\r\n 390     5   106.2  156.2   86.2    13   17   13\r\n 420     7    99.7  147.8   74.0     6   13    6\r\n 450     4   124.2  171.7   70.1     2    6    2\r\n 480     1   200.7  200.7  200.7     1    2    1\r\n 510     1   110.6  110.6  110.6     0    1    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal   60    85.7  200.7    0.0    24   24    0\r\n\r\nCitizens\r\nTabulated Results\r\n\r\nPrimary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     1    1    0\r\n  90     0     0.0    0.0    0.0     3    3    1\r\n 120     3    28.9   33.1   23.5     6    6    1\r\n 150     4    29.4   33.1   23.5     6    7    5\r\n 180     5    34.4   40.4   26.5     4    7    4\r\n 210     3    34.5   37.8   29.9     9    9    2\r\n 240     3    45.3   50.2   40.2    10   10    8\r\n 270     5    55.7   64.8   43.7    11   13   10\r\n 300     5    64.1   74.2   49.6    10   12    9\r\n 330     6    69.3   77.0   60.8     5   10    4\r\n 360     1    78.6   78.6   78.6     7    8    5\r\n 390     4    79.4   93.1   59.1     3    7    3\r\n 420     3    72.6   78.2   67.7     0    3    0\r\n 450     0     0.0    0.0    0.0     0    0    0\r\n 480     0     0.0    0.0    0.0     0    0    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal   42    53.5   93.1    0.0    11   13    0\r\n\r\nSecondary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     0    0    0\r\n 180     0     0.0    0.0    0.0     0    0    0\r\n 210     0     0.0    0.0    0.0     0    0    0\r\n 240     0     0.0    0.0    0.0     1    1    0\r\n 270     0     0.0    0.0    0.0     1    1    1\r\n 300     1    78.5   78.5   78.5     2    2    1\r\n 330     0     0.0    0.0    0.0     3    3    2\r\n 360     2    50.3   52.0   48.5     1    3    1\r\n 390     1    83.1   83.1   83.1     1    1    0\r\n 420     0     0.0    0.0    0.0     1    1    1\r\n 450     0     0.0    0.0    0.0     1    1    1\r\n 480     1    85.8   85.8   85.8     0    1    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal    5    69.6   85.8    0.0     3    3    0\r\n\r\nSystem\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     1    1    0\r\n  90     0     0.0    0.0    0.0     3    3    1\r\n 120     3    43.5   47.9   37.4     6    7    3\r\n 150     3    43.8   47.9   39.2     8   10    6\r\n 180     5    49.7   57.1   40.4     7    9    5\r\n 210     4    48.9   52.6   43.8    10   10    6\r\n 240     1    54.0   54.0   54.0    17   17   10\r\n 270     4    65.1   70.9   56.9    15   18   14\r\n 300     3    81.4   88.2   77.1    15   15   13\r\n 330     6    93.3  143.7   77.8    12   15   10\r\n 360     4   113.5  138.4   90.1     9   12    9\r\n 390     3   113.4  156.2   90.4     6    9    6\r\n 420     4    87.6  107.6   74.0     2    6    2\r\n 450     1    93.1   93.1   93.1     1    2    1\r\n 480     1   200.7  200.7  200.7     0    1    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal   42    77.7  200.7    0.0    17   18    0\r\n\r\nLPRs\r\nTabulated Results\r\n\r\nPrimary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     0    0    0\r\n 180     0     0.0    0.0    0.0     1    1    0\r\n 210     1    36.0   36.0   36.0     0    1    0\r\n 240     0     0.0    0.0    0.0     1    1    0\r\n 270     0     0.0    0.0    0.0     5    5    1\r\n 300     1    57.6   57.6   57.6     5    5    4\r\n 330     0     0.0    0.0    0.0     6    6    5\r\n 360     4    76.5   81.4   74.1     2    6    2\r\n 390     1    70.5   70.5   70.5     2    2    1\r\n 420     2    66.2   77.1   55.3     0    2    0\r\n 450     0     0.0    0.0    0.0     0    0    0\r\n 480     0     0.0    0.0    0.0     0    0    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal    9    67.0   81.4    0.0     6    6    0\r\n\r\nSecondary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     0    0    0\r\n 180     0     0.0    0.0    0.0     0    0    0\r\n 210     0     0.0    0.0    0.0     0    0    0\r\n 240     0     0.0    0.0    0.0     0    0    0\r\n 270     0     0.0    0.0    0.0     0    0    0\r\n 300     0     0.0    0.0    0.0     0    0    0\r\n 330     0     0.0    0.0    0.0     0    0    0\r\n 360     0     0.0    0.0    0.0     2    2    0\r\n 390     0     0.0    0.0    0.0     2    2    2\r\n 420     1    46.2   46.2   46.2     1    2    1\r\n 450     1    69.5   69.5   69.5     0    1    0\r\n 480     0     0.0    0.0    0.0     0    0    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal    2    57.9   69.5    0.0     2    2    0\r\n\r\nSystem\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     1    1    0\r\n 180     0     0.0    0.0    0.0     1    1    1\r\n 210     1    51.9   51.9   51.9     0    1    0\r\n 240     0     0.0    0.0    0.0     1    1    0\r\n 270     0     0.0    0.0    0.0     5    5    1\r\n 300     1    71.6   71.6   71.6     5    6    5\r\n 330     0     0.0    0.0    0.0     6    6    5\r\n 360     2    90.0   91.0   88.9     5    6    4\r\n 390     1    86.2   86.2   86.2     4    5    4\r\n 420     2   119.9  147.8   92.0     2    4    2\r\n 450     2   120.9  171.7   70.1     0    2    0\r\n 480     0     0.0    0.0    0.0     0    0    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal    9    96.8  171.7    0.0     6    6    0\r\n\r\nVisitors\r\nTabulated Results\r\n\r\nPrimary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     0    0    0\r\n 180     0     0.0    0.0    0.0     4    4    0\r\n 210     1    37.4   37.4   37.4     4    4    3\r\n 240     3    57.2   67.2   49.9     1    4    1\r\n 270     1    60.2   60.2   60.2     1    1    0\r\n 300     0     0.0    0.0    0.0     3    3    1\r\n 330     0     0.0    0.0    0.0     3    3    3\r\n 360     1    90.6   90.6   90.6     2    3    2\r\n 390     2    89.8   92.5   87.0     1    2    1\r\n 420     0     0.0    0.0    0.0     1    1    1\r\n 450     1    39.8   39.8   39.8     0    1    0\r\n 480     0     0.0    0.0    0.0     0    0    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal    9    64.3   92.5    0.0     4    4    0\r\n\r\nSecondary\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     0    0    0\r\n 180     0     0.0    0.0    0.0     0    0    0\r\n 210     0     0.0    0.0    0.0     1    1    0\r\n 240     0     0.0    0.0    0.0     3    3    1\r\n 270     2    46.3   46.4   46.2     1    3    1\r\n 300     0     0.0    0.0    0.0     1    1    1\r\n 330     1    66.3   66.3   66.3     0    1    0\r\n 360     0     0.0    0.0    0.0     0    0    0\r\n 390     0     0.0    0.0    0.0     1    1    0\r\n 420     0     0.0    0.0    0.0     1    1    1\r\n 450     1    54.9   54.9   54.9     1    2    1\r\n 480     1    46.2   46.2   46.2     0    1    0\r\n 510     0     0.0    0.0    0.0     0    0    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal    5    52.0   66.3    0.0     3    3    0\r\n\r\nSystem\r\nTime Exits   AvgTm  MaxTm  MinTm  Size  Max  Min\r\n  30     0     0.0    0.0    0.0     0    0    0\r\n  60     0     0.0    0.0    0.0     0    0    0\r\n  90     0     0.0    0.0    0.0     0    0    0\r\n 120     0     0.0    0.0    0.0     0    0    0\r\n 150     0     0.0    0.0    0.0     1    1    0\r\n 180     0     0.0    0.0    0.0     4    4    1\r\n 210     0     0.0    0.0    0.0     5    5    4\r\n 240     1    70.8   70.8   70.8     4    5    4\r\n 270     1   107.2  107.2  107.2     4    4    3\r\n 300     2    96.0  116.6   75.3     4    4    2\r\n 330     1   153.5  153.5  153.5     3    4    3\r\n 360     0     0.0    0.0    0.0     3    3    3\r\n 390     1   104.8  104.8  104.8     3    3    2\r\n 420     1   107.4  107.4  107.4     2    3    2\r\n 450     1   161.9  161.9  161.9     1    2    1\r\n 480     0     0.0    0.0    0.0     1    1    1\r\n 510     1   110.6  110.6  110.6     0    1    0\r\n 540     0     0.0    0.0    0.0     0    0    0\r\n 570     0     0.0    0.0    0.0     0    0    0\r\n 600     0     0.0    0.0    0.0     0    0    0\r\n 630     0     0.0    0.0    0.0     0    0    0\r\nTotal    9   112.0  161.9    0.0     5    5    0\r\n<\/pre>\n<p>I've tried to build the reporting mechanism in the most general and modular way possible but there's only so far this can be taken.  The instrumentation needed to collect different kinds of data will necessarily vary based on what we might want to know.  In the end all we can do is keep the code as clean as possible and understand it well.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last time I got the system to handle multiple types of entities and today I updated the reporting capability so it generates results for the system as a whole and for each type of entity that we might want to &hellip; <a href=\"https:\/\/rpchurchill.com\/wordpress\/posts\/2017\/01\/09\/a-simple-discrete-event-simulation-part-68\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60],"tags":[138,121,136],"_links":{"self":[{"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/posts\/1308"}],"collection":[{"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/comments?post=1308"}],"version-history":[{"count":4,"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/posts\/1308\/revisions"}],"predecessor-version":[{"id":1399,"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/posts\/1308\/revisions\/1399"}],"wp:attachment":[{"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/media?parent=1308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/categories?post=1308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpchurchill.com\/wordpress\/wp-json\/wp\/v2\/tags?post=1308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}