<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Making Connections</title>
	
	<link>http://blog.iseesystems.com</link>
	<description>isee systems blog</description>
	<lastBuildDate>Wed, 19 Dec 2012 22:20:57 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/iseesystems/KOIx" /><feedburner:info uri="iseesystems/koix" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>iseesystems/KOIx</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Working with Array Equations in Version 10</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/_wjgrj2nmqA/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/working-with-array-equations-in-version-10/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 23:46:27 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[Version 10]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=4010</guid>
		<description><![CDATA[STELLA/iThink version 10 introduces several new array features, including simplified and more powerful Apply-To-All equations that are designed to reduce the need to specify equations for every individual element.
Dimension names are optional
When an equation is written using other array names, the dimension names are not normally needed.  For example, given arrays A, B, and C, [...]]]></description>
			<content:encoded><![CDATA[<p>STELLA/<em>iThink</em> version 10 introduces several new array features, including simplified and more powerful Apply-To-All equations that are designed to reduce the need to specify equations for every individual element.</p>
<p><strong>Dimension names are optional</strong></p>
<p>When an equation is written using other array names, the dimension names are not normally needed.  For example, given arrays <em>A</em>, <em>B</em>, and <em>C</em>, each with the dimensions <em>Dim1</em> and <em>Dim2</em>, <em>A</em> can be set to the sum of <em>B</em> and <em>C</em> with this equation:</p>
<p style="padding-left: 30px;">B + C</p>
<p>Dimension names are still needed when the dimensions do not match.  For example, to also add in the first 2-dimensional slice of the 3-dimensional array <em>D</em>[<em>Dim1</em>, <em>Dim2</em>, <em>Dim3</em>], the equation becomes:</p>
<p style="padding-left: 30px;">B + C + D[Dim1, Dim2, 1]</p>
<p><strong>The wildcard * is optional</strong></p>
<p>When an array builtin is used, the * is normally not needed.  For example, to find the sum of the elements of a 2-dimensional array <em>A</em>[<em>Dim1,</em> <em>Dim2</em>] requires this equation:</p>
<p style="padding-left: 30px;">SUM(A)</p>
<p>If, however, the sum of only the first column of <em>A</em> is desired, the * is still needed:</p>
<p style="padding-left: 30px;">SUM(A[*, 1])</p>
<p><strong>Simplified array builtins</strong></p>
<p>There are five array builtins:  SIZE, SUM, MEAN, STDDEV, and RANK.  In addition, the MIN and MAX functions have been extended to take either one or two array arguments.  All but RANK can also be applied to queues and conveyors.</p>
<p>SUM, MEAN, and STDDEV all work in a similar way (see examples of SUM above).</p>
<p>Using the MAX function, it is possible to find the maximum value in array <em>A,</em></p>
<p style="padding-left: 30px;">MAX(A)</p>
<p>the maximum value in array <em>A</em>, or zero if everything is negative,</p>
<p style="padding-left: 30px;">MAX(A, 0)</p>
<p>or the maximum across two arrays <em>A</em> and <em>B</em>,</p>
<p style="padding-left: 30px;">MAX(A, B)</p>
<p>MIN works the same way, but finds the minimum.</p>
<p>The SIZE function requires an array parameter, but within an array, the special name SELF can be used to refer to the array whose equation is being set.  In addition, wildcards can be used to determine the size of any array slice.  In the equation for array <em>A</em>[<em>Dim1</em>, <em>Dim2</em>],</p>
<p style="padding-left: 30px;">SIZE(SELF)</p>
<p>gives the total number of elements in array <em>A</em> while</p>
<p style="padding-left: 30px;">SIZE(SELF[*, 1])</p>
<p>gives the size of the first dimension of A, i.e., the number of elements – or rows – in the first column.  Likewise,</p>
<p style="padding-left: 30px;">SIZE(SELF[1, *])</p>
<p>gives the size of the second dimension of A, i.e., the number of elements – or columns – in the first row.</p>
<p>Since RANK returns the index of the element with the given rank, it can also be used to find the index of the minimum element (using rank 1) or the maximum element (using rank SIZE(array)).  Given array <em>A</em>[<em>Dim1</em>, <em>Dim2</em>], the index of the minimum element in the first row can be found with the equation:</p>
<p style="padding-left: 30px;">RANK(A[1, *], 1)</p>
<p>However, to find the minimum element in the entire array, use:</p>
<p style="padding-left: 30px;">RANK(A, 1)</p>
<p>This returns a single index that can be mapped to an array element using the special parentheses subscripting:</p>
<p style="padding-left: 30px;">A(RANK(A, 1))</p>
<p>will be the value of the minimum element in <em>A</em>, i.e, the same value as MIN(A).  However, if array <em>B</em> has the same dimensions as <em>A</em> (i.e., for this example, <em>B</em>[<em>Dim1</em>, <em>Dim2</em>]), the value of the element in <em>B</em> that corresponds to the minimum element in <em>A</em> is found with:</p>
<p style="padding-left: 30px;">B(RANK(A, 1))</p>
<p><strong>Accessing elements of queues and conveyors</strong></p>
<p>Use an array subscript to access an element of a queue or conveyor.  The indices start on the outflow side (at 1) and increase toward the inflow side (up to SIZE(queue) or SIZE(conveyor)).  This allows the entire contents of a queue or conveyor to be assigned to an array allowing additional calculations, for example, a weighted average.  Given a conveyor named <em>Lag</em>, a new array <em>weighted_by_time</em>[<em>Slat</em>] can be created with the equation:</p>
<p style="padding-left: 30px;">(Slat*DT)*Lag[Slat]</p>
<p>Note the subscript is required for the conveyor.  Otherwise, the total value of the conveyor will be used.  Note also that the size of the dimension <em>Slat</em> must be at least large enough to hold all of the conveyor elements (the remaining elements in <em>weighted</em> will be set to zero).  The value of Slat*DT is the amount of time remaining before the material in that slat exits the conveyor.</p>
<p>A converter, <em>average_latency</em>, which is the average time remaining for the contents to exit (a weighted mean), can now be defined with the equation:</p>
<p style="padding-left: 30px;">SUM(weighted_by_time)/Lag</p>
<p><strong>Transposition</strong></p>
<p>It is sometimes helpful to transpose an array.  To facilitate this, the &apos; (apostrophe) operator was added.  Given arrays <em>A</em>[<em>Dim1</em>, <em>Dim2</em>, <em>Dim3</em>] and <em>B</em>[<em>Dim3</em>, <em>Dim2</em>, <em>Dim1</em>], the array <em>A</em> can be set equal to <em>B</em> transposed with the following equation:</p>
<p style="padding-left: 30px;">B &apos;</p>
<p>Note that a space <em>is</em> required between the array name and the apostrophe.  This is equivalent to the following equation that uses dimension names:</p>
<p style="padding-left: 30px;">B[Dim3, Dim2, Dim1]</p>
<p>This is especially helpful for square matrices or other arrays that use the same dimension name many times.  Given arrays <em>C</em>[<em>Dim</em>, <em>Dim</em>, <em>Dim</em>] and <em>D</em>[<em>Dim</em>, <em>Dim</em>, <em>Dim</em>], the array <em>C</em> can be set equal to <em>D</em> transposed with the following equation, which reverses all the dimensions:</p>
<p style="padding-left: 30px;">D &apos;</p>
<p>This is equivalent to the following equation that uses the new positional dimension names:</p>
<p style="padding-left: 30px;">D[@3, @2, @1]</p>
<p>Within a subscript, the @ operator can be followed by an integer that represents the dimension position in the array whose equation is being set.  In the example above, @3 represents the third dimension name of <em>A</em>.  This is particularly useful if straight transposition is not needed and all the dimension names are the same.  For example,</p>
<p style="padding-left: 30px;">D[@2, @1, @3]</p>
<p>flips the first two dimensions of <em>D</em> (when assigning to <em>A</em>) while leaving the third alone.</p>
<p><strong>Subscript expressions</strong></p>
<p>Subscripts can contain any valid expression.  Given an array <em>A</em> and a variable <em>x</em>, an element at a variable index that is one more than twice <em>x</em> can be accessed with:</p>
<p style="padding-left: 30px;">A[2*x + 1]</p>
<p>Element labels can also appear within these expressions.</p>
<p>In Apply-To-All arrays, dimension names can be used.  The following equation sets the values in array <em>A</em>[<em>Dim1</em>] to every even-indexed elements in array <em>B</em>[<em>Dim1</em>], filling the second half of <em>A</em> with zeroes:</p>
<p style="padding-left: 30px;">B[2*Dim1]</p>
<p>Dimension names can also be used outside subscripts.  The following equation slides the elements of <em>B</em> up one position in <em>A</em>, placing 10 in the first element of <em>A</em> (without the IF, the first element would contain 0).</p>
<p style="padding-left: 30px;">IF Dim1 = 1 THEN 10 ELSE B[Dim1 - 1]</p>
<p>Even if <em>Dim1</em> is labeled, it must be compared to the numeric index 1 in the IF expression because element labels can only be used within a subscript.  Note that numeric indices are always valid for any array dimension, even if it is labeled.</p>
<p><strong>Array Ranges</strong></p>
<p>A range of an array can be specified using the range operator : (colon), which takes a lower bound on the left and an upper bound on the right (e.g., 1:10 means “from 1 to 10”).  Just as wildcards allow control over which dimensions to include, ranges control which range of elements to include in each dimension.  For example, the follow equation sums the top-left 3&#215;4 rectangle of array <em>A</em>[<em>Dim1</em>, <em>Dim2</em>]:</p>
<p style="padding-left: 30px;">SUM(A[1:3, 1:4))</p>
<p>We hope you find these new array capabilities useful in your modeling work and welcome any comments and suggestions.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_wjgrj2nmqA:1wJt9YK-5b4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_wjgrj2nmqA:1wJt9YK-5b4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=_wjgrj2nmqA:1wJt9YK-5b4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_wjgrj2nmqA:1wJt9YK-5b4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_wjgrj2nmqA:1wJt9YK-5b4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=_wjgrj2nmqA:1wJt9YK-5b4:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/_wjgrj2nmqA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/working-with-array-equations-in-version-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/working-with-array-equations-in-version-10/</feedburner:origLink></item>
		<item>
		<title>2011 Barry Richmond Scholarship Award</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/W5YzfvxOr4Q/</link>
		<comments>http://blog.iseesystems.com/news-announcements/2011-barry-richmond-scholarship-award/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 18:30:18 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[News & Announcements]]></category>
		<category><![CDATA[Barry Richmond]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[scholarship]]></category>
		<category><![CDATA[System Dynamics Society]]></category>
		<category><![CDATA[WPI]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3939</guid>
		<description><![CDATA[The Barry Richmond Scholarship Award was established in 2007 by isee systems to honor and continue the legacy of its founder, Barry Richmond.  Barry was devoted to helping others become better systems citizens.  Systems citizens are members of a global community that strive to understand the complexities of today&#8217;s world and have the informed capacity to make [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3950" class="wp-caption alignright" style="width: 179px"><img class="size-full wp-image-3950    " title="Sarah accepts award" src="http://blog.iseesystems.com/wp-content/uploads/2011/08/SarahAward1.jpg" alt="Sarah accepts award" width="169" height="198" /><p class="wp-caption-text">Sarah Boyar accepts Scholarship Award from Joanne Egner</p></div>
<p>The Barry Richmond Scholarship Award was established in 2007 by isee systems to honor and continue the legacy of its founder, Barry Richmond.  Barry was devoted to helping others become better systems citizens.  Systems citizens are members of a global community that strive to understand the complexities of today&#8217;s world and have the informed capacity to make a positive difference.  It was Barry&#8217;s mission to make systems thinking and system dynamics accessible to people of all ages, and in all fields.  The award is presented annually at the <a title="System Dynamics Society" href="http://www.systemdynamics.org/" target="_blank">System Dynamics Society Conference</a> to an individual whose work demonstrates a desire to expand the field of systems thinking or to apply it to current social issues.</p>
<p>Through most of his career, Barry focused on education as the key to spreading systems thinking.  As a teacher and a mentor he dedicated much of his time to developing tools and methodologies for teaching systems thinking.  With this in mind, it was a great pleasure to present this year’s award to Sarah Boyar, a recent graduate of the Masters Program in System Dynamics at <a title="WPI Distance Learning in System Dynamics" href="http://online.wpi.edu/sysdyn.html" target="_blank">Worcester Polytechnic Institute</a> (WPI).</p>
<div id="attachment_3954" class="wp-caption alignleft" style="width: 258px"><img class="size-medium wp-image-3954            " title="Sarah Boyar and Karim Chichakly enjoy the conference banquet" src="http://blog.iseesystems.com/wp-content/uploads/2011/08/SarahKarim-280x238.jpg" alt="Sarah Boyar and Karim Chichakly enjoy the conference banquet" width="248" height="158" /><p class="wp-caption-text">Sarah Boyar and Karim Chichakly enjoy the conference banquet</p></div>
<p>Sarah presented a portfolio of her work to the scholarship committee.  In particular, an essay about her teaching philosophy resonated with us.  Sarah wrote this piece while taking a seminar in college teaching in order to fulfill her Real World Dynamics course requirement at WPI.  Since she already had plenty of experience as a consultant applying system dynamics to real world situations, Sarah managed to convince the WPI powers-that-be that an essential real world manifestation of system dynamics is the way that it is taught.  This is something Barry would have encouraged and been excited about.</p>
<p>Her essay titled <em><a title="Beliefs About Teaching and Learning" href="http://blog.iseesystems.com/wp-content/uploads/2011/08/Beliefs-About-Teaching-and-Learning.pdf" target="_blank">Beliefs About Teaching and Learning</a></em> begins as follows:</p>
<blockquote><p>I teach System Dynamics. While I want my students to have some knowledge of system dynamics, most of all I want them to be excited and stimulated by it. I also want them to find it beautiful: I want to teach in such a way that my students find some aspect of beauty in the work, whether it’s through the visual arcs in the model interface, or the precision of algebra in the way we write statements, or the way that system dynamics can ameliorate a social ill that concerns them. I want my students to somehow feel a sense of peace and beauty derived from some aspect of the knowledge I am teaching.</p></blockquote>
<p>Among Sarah&#8217;s aspirations is the desire to teach system dynamics to professionals in other fields, namely lawyers (potential judges) and medical doctors.  Incorporating a systems perspective within both the judicial system and in healthcare could certainly make a positive difference for us all.  Good luck and congratulations Sarah!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=W5YzfvxOr4Q:eeEEj2pX5uY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=W5YzfvxOr4Q:eeEEj2pX5uY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=W5YzfvxOr4Q:eeEEj2pX5uY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=W5YzfvxOr4Q:eeEEj2pX5uY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=W5YzfvxOr4Q:eeEEj2pX5uY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=W5YzfvxOr4Q:eeEEj2pX5uY:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/W5YzfvxOr4Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/2011-barry-richmond-scholarship-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/2011-barry-richmond-scholarship-award/</feedburner:origLink></item>
		<item>
		<title>Connecting iThink and STELLA to a Database</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/ltkyj44ewGA/</link>
		<comments>http://blog.iseesystems.com/stella-ithink/connecting-ithink-and-stella-to-a-database/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 14:19:20 +0000</pubDate>
		<dc:creator>Nat Pierson</dc:creator>
				<category><![CDATA[STELLA & iThink]]></category>
		<category><![CDATA[beer game]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3662</guid>
		<description><![CDATA[A question we periodically get from our customers is: Can iThink or STELLA connect to a database? Saving and pulling information to/from databases presents a lot of advantages for storing, organizing and sharing model data. Thanks to iThink and STELLA’s ability to import and export data via commonly used spreadsheet file formats, it is possible [...]]]></description>
			<content:encoded><![CDATA[<p>A question we periodically get from our customers is: Can <em>iThink</em> or STELLA connect to a database? Saving and pulling information to/from databases presents a lot of advantages for storing, organizing and sharing model data. Thanks to <em>iThink</em> and STELLA’s ability to import and export data via commonly used spreadsheet file formats, it is possible to use comma separated value (CSV) files as a means to create a connection to database applications.</p>
<p>Essentially, data can be moved between a database and <em>iThink</em>/STELLA by using a CSV file as a bridge. CSV files are a widely supported file standard for storing table data, and both <em>iThink</em>/STELLA and many database programs are able to read and write to them.</p>
<div id="attachment_3706" class="wp-caption aligncenter" style="width: 578px"><img class="size-full wp-image-3706      " title="Process overview " src="http://blog.iseesystems.com/wp-content/uploads/2011/04/diagram1_abstract.png" alt="Process overview " width="568" height="176" /><p class="wp-caption-text">The process of connecting to a database using CSV files as an intermediary</p></div>
<p>The process can be automated when you use <em>iThink</em>/STELLA’s ability to <a href="http://blog.iseesystems.com/modeling-tips/running-models-automatically-from-the-command-line/" target="_blank">run models automatically from the command line</a> (Windows only). Most database applications also have command line interfaces, allowing you to create a single macro script that moves data between your model and a database in a single process.</p>
<p>In this post I will use a simple example to demonstrate how to import data from a Microsoft SQL Server database into an <em>iThink</em> model on Windows. The model and all files associated with the import process are available by <a href="http://blog.iseesystems.com/wp-content/uploads/2011/04/Database_Example_Files.zip">clicking here</a>. If you don’t have access to Microsoft SQL Server, you can download a free developer’s version called <a href="http://www.microsoft.com/sqlserver/2005/en/us/express.aspx" target="_blank">SQL Server Express</a> from the Microsoft web site.</p>
<p><strong>The Model</strong></p>
<p>The model used in this example is a variation of the <a href="http://en.wikipedia.org/wiki/Beer_distribution_game" target="_blank">Beer Game model</a>. The structure shown below represents the ordering process for a simple retailer supply chain.</p>
<p style="text-align: center;"><img class="size-full wp-image-3801 aligncenter" title="Retail Supply Chain Model" src="http://blog.iseesystems.com/wp-content/uploads/2011/04/RetailSupplyChain.png" alt="Retail Supply Chain Model" width="645" height="320" /></p>
<p>The model has been set up to import the initial values for <em>On Order with Wholesaler</em> and <em>Unfilled Orders</em> stocks, <em>target inventory</em> and <em>actual customer orders</em> (a graphical function with 21 weeks of data). The source of the imported data is the file named import.csv in the example files.</p>
<p>To set up this example, I manually created the CSV file using the initial model parameters. (Later in this post, you&#8217;ll see that this file will be automatically created by the database.) The model has been initialized in a steady state with <em>actual customer orders</em> at a constant level of 4 cases per week over the 21 week period.</p>
<p><strong>Creating the SQL Server Database </strong></p>
<p>Since the model is set up to import data from the import.csv file, we are ready to populate that same CSV file with data from the SQL Server database. But, first we need to create the database and the associated data table.</p>
<p>Using SQL Server Management Studio, create a new database named Simulation.</p>
<div id="attachment_3804" class="wp-caption aligncenter" style="width: 560px"><img class="size-full wp-image-3804" title="New Database Dialogue in SQL Server" src="http://blog.iseesystems.com/wp-content/uploads/2011/04/new_database.png" alt="New Database Dialogue in SQL Server" width="550" height="181" /><p class="wp-caption-text">Dialog in SQL Server when adding new &quot;Simulation&quot; database</p></div>
<p>Once the database has been created, you can run the full CreateTable.sql script to create a table that will store the data. To open the script, select Open -&gt; File from the File menu and navigate to the CreateTables.sql file. The script is set up to create a table named Import_Data with columns for each variable that is imported into the model. The script will also populate the table with data. It is important to note that the first row of the table contains the variable names exactly as they appear in the retailer supply chain model. Below is a sampling of the commands contained in the script:</p>
<p><span class="code_example">CREATE TABLE [dbo].[Import_Data](<br />
[RowID] [int] IDENTITY(1,1) NOT NULL,<br />
[OnOrder] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,<br />
[UnfilledOrders] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,<br />
[TargetInventory] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,<br />
[ActualOrders] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL<br />
) ON [PRIMARY]<br />
</span><br />
<span class="code_example">INSERT INTO Import_Data<br />
(OnOrder,UnfilledOrders,TargetInventory,ActualOrders)<br />
values<br />
(&#8216;On Order with Wholesaler&#8217;,'Unfilled Orders&#8217;,'target inventory&#8217;,'actual customer orders&#8217;)<br />
INSERT INTO Import_Data<br />
(OnOrder,UnfilledOrders,TargetInventory,ActualOrders)<br />
values<br />
(8,4,20,4)<br />
INSERT INTO Import_Data<br />
(OnOrder,UnfilledOrders,TargetInventory,ActualOrders)<br />
values<br />
(&#8221;,&#8221;,&#8221;,4)<br />
INSERT INTO Import_Data<br />
(OnOrder,UnfilledOrders,TargetInventory,ActualOrders)<br />
values<br />
(&#8221;,&#8221;,&#8221;,10)</span><br />
<img class="size-full wp-image-3852 alignnone" title=". . ." src="http://blog.iseesystems.com/wp-content/uploads/2011/04/vert_elipses.gif" alt=". . ." width="13" height="34" /></p>
<p>To run the script, select Execute from the Query menu. Note that the data shows an increase in <em>actual customer orders</em> in week 2 from 4 to 10 cases. In the model,<em> actual customer orders</em> is a graphical function which is reflecting order data over time.</p>
<div id="attachment_3820" class="wp-caption aligncenter" style="width: 518px"><img class="size-full wp-image-3820" title="Results tab after running CreateTable.sql script" src="http://blog.iseesystems.com/wp-content/uploads/2011/04/SQL_Post_Create_Table_Update.jpg" alt="Results tab after running CreateTable.sql script" width="508" height="226" /><p class="wp-caption-text">Results tab after running CreateTable.sql script</p></div>
<p><strong>Linking the Database to the Model</strong></p>
<p>After the database has been prepared, the Transfer_Data.bat Windows batch file can be used to link the database to the model. Transfer_Data.bat is a script that pulls data from the database into the CSV file, opens<em> iThink, </em>imports the CSV data and runs the model. The batch file takes advantage of the utility Microsoft provides with SQL Server called <a href="http://www.simple-talk.com/sql/database-administration/working-with-the-bcp-command-line-utility/" target="new">Bulk Copy Program (BCP)</a> and <em>iThink</em>’s ability to run models from the command line. You’ll need to make a few edits to the batch file shown below before you can run it.</p>
<p><span class="code_example">BCP Simulation.dbo.Import_Data out import.csv -c -t, -U &lt;Login&gt; -P &lt;Password&gt; -S &lt;Server name&gt;</span></p>
<p><span class="code_example">&#8220;%PROGRAMFILES%\isee systems\iThink 9.1.4\iThink.exe&#8221; -i -r -nq Supply_Chain.itm</span></p>
<p>Using a text editor such as WordPad or NotePad, replace the placeholders for &lt;Login&gt;, &lt;Password&gt; and &lt;Server name&gt; in the first line to match the authentication for the Simulation database that was previously created. If your SQL Server database is on your local machine, you can delete the –U, -P and –S settings altogether. This command will make use of the BCP utility to copy the contents of the Import_Data table to the import.csv file. Depending on the version of <em>iThink </em>or STELLA you are running (version 9.1.2 or later is required) and its location, you may also need to edit the second line of the batch file.</p>
<p>After the Transfer_Data.bat file has been edited and saved, double-click on the file to run it. Once the data has been retrieved from the database, <em>iThink </em>will import the data via the CSV file, and run the simulation. The results will appear in the graph in the model as shown below:</p>
<p><img class="aligncenter size-full wp-image-3835" title="Retail inventory graph" src="http://blog.iseesystems.com/wp-content/uploads/2011/04/retailer_supply_graph.jpg" alt="Retail inventory graph" width="494" height="284" /></p>
<p><strong>Updating the Data</strong></p>
<p>In a real-world situation, the database that stores information we need to run a model is usually connected to another application that updates or changes the data. In the absence of a real-world application, I created a script that allows you to update the Simulation database and experiment with your own set of data.</p>
<p>In SQL Server Management Studio, open the script called UpdateTable.sql. Edit the values for each variable as desired.</p>
<p><span class="code_example">USE [Simulation]<br />
UPDATE Import_Data SET OnOrder=8, UnfilledOrders=4, TargetInventory=20, ActualOrders = 4<br />
WHERE RowID=2<br />
UPDATE Import_Data SET ActualOrders = 4<br />
WHERE RowID=3<br />
UPDATE Import_Data SET ActualOrders = 4<br />
WHERE RowID=4</span><br />
<img class="size-full wp-image-3852 alignnone" title=". . ." src="http://blog.iseesystems.com/wp-content/uploads/2011/04/vert_elipses.gif" alt=". . ." width="13" height="34" /><br />
When you have finished editing the UpdateTable.sql script, execute the script to update the Import_Data table. Now you are ready to re-run the Transfer_Data.bat batch file and link the updated data with the Supply_Chain.itm model.</p>
<p><strong>Summary</strong></p>
<p>This example should give you a good idea of how the process of importing data from a database into an <em>iThink </em>or STELLA model can be set up and run automatically. Other database applications such as Oracle, MySQL and SQLite could also be used in a similar manner. I have not yet tried to set up examples, but these other databases also have command line interfaces for automating the transfer of data to CSV files that <em>iThink </em>and STELLA can connect to.</p>
<p>Stay tuned for part two of this post where I’ll provide an example of exporting model results to a SQL Server database.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ltkyj44ewGA:8ZchzBwReIg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ltkyj44ewGA:8ZchzBwReIg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=ltkyj44ewGA:8ZchzBwReIg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ltkyj44ewGA:8ZchzBwReIg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ltkyj44ewGA:8ZchzBwReIg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=ltkyj44ewGA:8ZchzBwReIg:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/ltkyj44ewGA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stella-ithink/connecting-ithink-and-stella-to-a-database/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stella-ithink/connecting-ithink-and-stella-to-a-database/</feedburner:origLink></item>
		<item>
		<title>What is the difference between STELLA and iThink?</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/eg7anA0RveM/</link>
		<comments>http://blog.iseesystems.com/stella-ithink/what-is-the-difference-between-stella-and-ithink/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 16:26:09 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[STELLA & iThink]]></category>
		<category><![CDATA[default settings]]></category>
		<category><![CDATA[iThink/STELLA]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3565</guid>
		<description><![CDATA[The question we get asked most frequently by just about anyone who wants to know more about our modeling software is &#8220;What is the difference between STELLA and iThink?&#8221;  From a functional perspective, there are no differences between the STELLA and iThink software — they are two different brands of the same product.
The STELLA brand [...]]]></description>
			<content:encoded><![CDATA[<p>The question we get asked most frequently by just about <em>anyone</em> who wants to know more about our modeling software is &#8220;What is the difference between STELLA and <em>iThink</em>?&#8221;  From a functional perspective, there are no differences between the STELLA and <em>iThink </em>software — they are two different brands of the same product.</p>
<p><img class="size-full wp-image-3638 alignleft" title="STELLA_icon" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/STELLA_icon.png" alt="" width="54" height="57" />The STELLA brand is targeted toward individuals in educational and research settings.  Supporting materials such as <em>An Introduction to Systems Thinking with STELLA</em> and sample models cover the natural and social sciences.</p>
<p><img class="size-full wp-image-3639 alignleft" title="ithink_icon" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/ithink_icon.png" alt="" width="48" height="55" /><em>iThink</em>, on the other hand, is targeted toward an audience of users in business settings.  <em>An Introduction to Systems Thinking with iThink</em> is written with the business user in mind and model examples apply the software to areas such as operations research, resource planning, and financial analysis.</p>
<p>Aside from the different program icons and other graphic design elements that go along with branding, there are just a few minor differences in the default settings for STELLA and <em>iThink</em>.  These differences are intended to pre-configure the software for the model author.  They do not limit you in any way from configuring the default setup to match your own individual preferences.</p>
<p>Below is a list of <em>all</em> the differences between the default settings for STELLA and <em>iThink</em>.</p>
<p><strong>Opening Models </strong></p>
<p>When opening a model with STELLA on Windows, by default, the software looks for files with a .STM extension.  Similarly, <em>iThink</em> looks for files with an .ITM extension.  If you want to open an <em>iThink</em> model using STELLA or vice-versa, you need to change the file type in the Open File dialog as shown below.</p>
<p style="text-align: center;"><img class="aligncenter" title="STELLA file open dialog" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/STELLAfileopen.png" alt="STELLA file open dialog" width="356" height="86" /></p>
<p>On Macs, the open dialog will show both <em>iThink </em>and STELLA models as valid files to open.</p>
<p>If you open a model with a file type associated with the different product than the one you are using, you’ll get a message similar to the one below warning you that the model will be opened as &#8220;Untitled&#8221;.  Simply click OK to continue.</p>
<p style="text-align: center;"><img class="aligncenter" title="STELLA file conversion dialog" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/STELLAopen.png" alt="STELLA file conversion dialog" width="374" height="162" /></p>
<p><strong>Saving Models</strong></p>
<p>When saving a model in STELLA, by default, the software saves the model with a .STM file extension.  Similarly, <em>iThink</em> saves model s with an .ITM extension.  If you’re using STELLA and want to save your model as an <em>iThink</em> file or vice-versa, use the Save As&#8230; menu option and select the appropriate type as shown below.</p>
<div class="wp-caption aligncenter" style="width: 363px"><img id="Picture 4" title="STELLA save as dialog" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/STELLAsaveas.png" alt="STELLA save as dialog" width="353" height="116" /><p class="wp-caption-text">STELLA on Windows save dialog</p></div>
<p style="text-align: center;">&nbsp;</p>
<div id="attachment_3656" class="wp-caption aligncenter" style="width: 403px"><img class="size-full wp-image-3656  " title="STELLA on Mac save dialog" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/mac-save-as.png" alt="STELLA on Mac save dialog" width="393" height="191" /><p class="wp-caption-text">STELLA on Mac save dialog</p></div>
<p><strong>Run Specs </strong></p>
<p>Since <em>iThink</em> is targeted toward business users who tend to measure performance monthly, the default Unit of time for <em>iThink</em> is set to Months.  It’s also easier to think about simulations starting in month 1 (rather than month zero) so we set the default simulation length in <em>iThink</em> to run from 1 to 13.  STELLA on the other hand, reports the Unit of time as &#8220;Time&#8221; and, by default, runs simulations from 0 to 12.</p>
<div style="width: 600px;">
<div id="attachment_3591" class="wp-caption aligncenter" style="width: 598px"><a href="http://blog.iseesystems.com/wp-content/uploads/2011/03/iThinkrunspecs_sm.png"></a><img class="size-full wp-image-3599         " style="margin-top: 0px; margin-bottom: 0px;" title="Run Spec comparison" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/runspecs_comparison.png" alt="Run Spec comparison" width="588" height="238" /><p class="wp-caption-text">Run Spec Default Settings Comparison</p></div>
</div>
<p><strong>Table Reporting</strong></p>
<p>In a business context, financial results are generally reported at the end of a time period and the values are summed over the report interval.  For example, in a report showing 2010 revenues we would assume the values reflect total revenues at the end of the year.  In line with this assumption, the default Table settings in <em>iThink</em> include reporting Ending balances, Summed flow values, and a report interval of one time step.</p>
<p>In a research setting, scientists tend to prefer reporting precise values at a particular time.   For this reason, the default Table settings in STELLA are configured to report Beginning balances, Instantaneous flow values, and a report interval of Every DT.</p>
<div id="attachment_3601" class="wp-caption aligncenter" style="width: 598px"><img class="size-full wp-image-3601      " style="margin-top: 0px; margin-bottom: 0px;" title="table default settings comparison" src="http://blog.iseesystems.com/wp-content/uploads/2011/03/table_comparison.png" alt="table default settings comparison" width="588" height="234" /><p class="wp-caption-text">Table Default Settings Comparison</p></div>
<p><strong> </strong></p>
<p><strong>STELLA or <em>iThink</em></strong></p>
<p>When choosing between STELLA or <em>iThink</em>, try to think about the kinds of models you intend to build and the problems you are looking to solve.  If your objective is to drive business improvement, chances are <em>iThink</em> will be a better fit.  If your purpose is to understand the dynamics of a natural environment or social system, STELLA will likely be your brand of choice.  Whatever you decide, both products will provide you with the exact same functionality and can easily be configured to suit your own preferences.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=eg7anA0RveM:iaRI-wuAKgQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=eg7anA0RveM:iaRI-wuAKgQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=eg7anA0RveM:iaRI-wuAKgQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=eg7anA0RveM:iaRI-wuAKgQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=eg7anA0RveM:iaRI-wuAKgQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=eg7anA0RveM:iaRI-wuAKgQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/eg7anA0RveM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stella-ithink/what-is-the-difference-between-stella-and-ithink/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stella-ithink/what-is-the-difference-between-stella-and-ithink/</feedburner:origLink></item>
		<item>
		<title>Using PEST to Calibrate Models</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/EKXZkEoEwjQ/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/calibrate-models-pest/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 23:00:18 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[calibration]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[h1n1]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[Version 9.1.2]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3529</guid>
		<description><![CDATA[There are times when it is helpful to calibrate, or fit, your model to historical data. This capability is not built into the iThink/STELLA program, but it is possible to interface to external programs to accomplish this task. One generally available program to calibrate models is PEST, available freely from www.pesthomepage.org. In this blog post, [...]]]></description>
			<content:encoded><![CDATA[<p>There are times when it is helpful to calibrate, or fit, your model to historical data. This capability is not built into the iThink/STELLA program, but it is possible to interface to external programs to accomplish this task. One generally available program to calibrate models is PEST, available freely from <a href="http://www.pesthomepage.org/">www.pesthomepage.org</a>. In this blog post, I will demonstrate how to calibrate a simple STELLA model using PEST on Windows. Note that this method relies on the Windows <a href="http://blog.iseesystems.com/modeling-tips/running-models-automatically-from-the-command-line/">command line interface</a> added in version 9.1.2 and will not work on the Macintosh. The export to comma-separated value (CSV) file feature, added in version 9.1.2, is also used.</p>
<p>The model and all files associated with its calibration are available by clicking <a title="here" href="blog.iseesystems.com"></a><a href="http://blog.iseesystems.com/wp-content/uploads/2011/01/calibrate.zip">here</a>.</p>
<p><strong>The Model</strong></p>
<p>The model being used is the simple SIR model first presented in my blog post <a href="http://blog.iseesystems.com/stella-ithink/limits-to-growth/">Limits to Growth</a>. The model is shown again below. There are two parameters: <em>infection rate</em> and <em>recovery rate</em>. Technically, the initial value for the <em>Susceptible</em> stock is also a parameter. However, since this is a conserved system, we can make an excellent guess as to its value and do not need to calibrate it.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2011/01/image2.png" border="0" alt="image" width="299" height="125" /></p>
<p><strong>The Data Set</strong></p>
<p>We will calibrate this model to two data sets. The first is the number of weekly deaths caused by the Hong Kong flu in New York City over the winter of 1968-1969 (below).</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image004" src="http://blog.iseesystems.com/wp-content/uploads/2011/01/clip_image004.gif" border="0" alt="clip_image004" width="330" height="266" /></p>
<p>The second is the number of weekly deaths per thousand people in the UK due to the Spanish flu (H1N1) in the winter of 1918-1919 (shown later).</p>
<p>In both cases, I am using the number of deaths as a proxy for the number of people infected, which we do not know. This is reasonable because the number of deaths is directly proportional to the number of infected individuals. If we knew the constant of proportionality, we could multiply the deaths by this constant to get the number of people infected.</p>
<p><strong> </strong></p>
<p><span id="more-3529"></span></p>
<p><strong>Preparing the Model</strong></p>
<p>The original model ran from 0 to 40 days. This needs to be changed to match the data, i.e., to 1 to 13 weeks. Changing this will force us to change the parameter values also, as described below.</p>
<p>The initial values of <em>Susceptible</em> and <em>Infected</em> must be changed to match the data set. The total number of people in the model should match the total population in the data. Summing the Hong Kong flu data set gives a population of 1035 people. The initial value for <em>Infected</em> is just the first reported value, 14. That leaves 1021 people that are <em>Susceptible</em>.</p>
<p>If you run the model using the original parameter values, you will find the infection is spreading far too quickly. To improve the chances of the calibration succeeding, it is necessary to adjust the parameters so that the results are in the ballpark of the historical data. To do this, it is useful to paste the historical data into a graphical function (called <em>data</em> in this model) and graph it alongside the model output. I first reduced the <em>infection rate</em> from 0.005 to 0.0015 and then adjusted <em>recovery rate</em> from 0.25 to 0.5 to get a closer fit to the data.</p>
<p>The model must also be modified to persistently import its parameters and export the time series we wish to fit to the historical data. The import sheet is most easily set up by creating an empty CSV file, exporting “all model variables” and “One set of values” to this file, and then removing the variables that are not needed from this file. The file can also be built manually. The final file, input.csv, looks like this:</p>
<pre style="padding-left: 30px;">infection rate,recovery rate
0.0015,0.5</pre>
<p>You will also need to create an empty file called output.csv for the exported data.</p>
<p>Set up the import by choosing Edit-&gt;Import Data… and entering the settings shown below:</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image006" src="http://blog.iseesystems.com/wp-content/uploads/2011/01/clip_image006.jpg" border="0" alt="clip_image006" width="502" height="464" /></p>
<p>Add a table, called Table 1, to the model and add the stock <em>Infected</em> to the table. Set up the export by choosing Edit-&gt;Export Data… and entering the settings shown below. Note the “Use table settings” option is not used. This option cannot be used for calibration as it will restrict to precision of the output to match the table.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image008" src="http://blog.iseesystems.com/wp-content/uploads/2011/01/clip_image008.jpg" border="0" alt="clip_image008" width="494" height="620" /></p>
<p>Save the model. It is ready to be calibrated.</p>
<p><strong>Setting up PEST</strong></p>
<p>PEST is a very powerful program. This post will only touch on the simplest capabilities that it provides. For more details and for more complex uses, consult the PEST manual.</p>
<p>PEST requires three text input files:</p>
<ul>
<li>The template file (.tpl), which tells it how to write the parameters to the model input file (input.csv in our case). </li>
<li>The instruction file (.ins), which tells it how to read the data from the model output file (output.csv in our case). </li>
<li>The control file (.pst), which tells PEST what to do. </li>
</ul>
<p><strong>Creating the Template File</strong></p>
<p>This is the simplest file to create, as it only requires replacing data values in the model input file with markers so PEST can insert the parameter values it chooses.</p>
<p>Open the model input file, input.csv, in a text editor. Add the following line to the top of the file:</p>
<pre style="padding-left: 30px;">ptf #</pre>
<p>This tells PEST this is a template file and that parameter fields, including the parameter name, will be surrounded by pound signs (#).</p>
<p>Replace each parameter value in the file with a short alphanumeric name for that parameter, surrounded by #s. Add any additional spaces that are necessary to make each field 13 characters long, <em>including</em> the pound signs. Using 13-character field widths, which is the maximum precision in single-precision floating point, is absolutely necessary to make certain the calibration succeeds (see end note about precision).</p>
<p>Save this file as input.tpl. The final file should look like this:</p>
<pre style="padding-left: 30px;">ptf #
infection rate,recovery rate
#infectrate #,#recoverrate#</pre>
<p><strong>Creating the Instruction File</strong></p>
<p>The instruction file contains a set of instructions that PEST can follow to extract the model-generated data that corresponds to the historical data from the model output file. The model output file is a CSV file that has a header line followed by 13 lines, one for each week in the model run. Each of the 13 lines contains two numbers separated by a comma. The first value on each line is the week number and the second is the number of people who have been infected.</p>
<p>The contents of the instruction file, output.ins, appear below:</p>
<pre style="padding-left: 30px;">pif @
l2 @,@ !infected1!
l1 @,@ !infected2!
l1 @,@ !infected3!
l1 @,@ !infected4!
l1 @,@ !infected5!
l1 @,@ !infected6!
l1 @,@ !infected7!
l1 @,@ !infected8!
l1 @,@ !infected9!
l1 @,@ !infected10!
l1 @,@ !infected11!
l1 @,@ !infected12!
l1 @,@ !infected13!</pre>
<p>The first line tells PEST that this is an instruction file and that the at-sign (@) will be used to delimit search keys. Each succeeding line tells PEST how to read the model output file, output.csv.</p>
<p>Each instruction line starts with a lowercase L, the PEST command to skip to the beginning of the Nth following line. The number one (1) is used to move to the start of the next line (interpreted as the start of the first line when at the beginning of the file), while larger numbers skip over an additional N &#8211; 1 lines. Thus, the “l2” in the first command, moves to the start of the second line in the file, skipping over the header. Each additional command uses “l1” to move to the start of the next line.</p>
<p>On every single line, it is necessary to skip to the second field (<em>Infected</em>), as we do not care about the week number. Surrounding the comma in at-signs (@,@) tells PEST to move to the next comma it finds (which will be the first comma on the line in all cases shown here). The exclamation points (!) delimit the name of the observation (historical data point) that corresponds to the data after the comma (called <em>observation names</em> in PEST). Note that each value of a time-series requires a unique observation name and that each observation name cannot be longer than 20 characters. In this case, there are 13 values, one for each week, in our historical data and our model-generated data, so the variables are named <em>infected1</em> thru <em>infected13</em>.</p>
<p>In many cases, there will be far more data values that need to be assigned names. The instructions in this file, including the ever-incrementing names, can be quickly created in some text editors and also in Excel. The following formula can be pasted into cell A1 of Excel and filled down as far as necessary to create the proper instructions:</p>
<p style="padding-left: 30px;">=CONCATENATE(&#8220;l1 @,@ !infected&#8221;, ROW(A1), &#8220;!&#8221;)</p>
<p>The above instruction names uses the name <em>infected</em> as the root of all observation names. Make sure to change this name in the above formula to match the variable name in your model. After you copy the text generated by Excel into your instruction file, make sure to change the <em>first</em> command so that it begins with “l2” rather than “l1”. If you fail to do this, PEST will not skip over the header in output.csv and will abort when it tries to read numeric values from the text that appears there.</p>
<p>There will also be cases where it is desirable to calibrate to multiple pieces of data. In this case, the commands in the instruction file will have to be modified to include the additional data. For example, if there is a second historical time series <em>Treated</em> and <em>Treated</em> appears after <em>Infected</em> in the model output file, each command would change to (using the fifth value as an example):</p>
<pre style="padding-left: 30px;">l1 @,@ !infected5! @,@ !treated5!</pre>
<p><strong>Creating the Control File</strong></p>
<p>The control file contains a number of PEST parameters, the historical data, the command to run the model, and the names of the other files needed by PEST. It is a difficult file to create on your own. Luckily, PEST provides some command line tools to help. In particular, PESTGEN will generate the control file (with default settings) from two simpler text files:</p>
<ul>
<li>The parameter file (.par), which lists the input parameters to the model </li>
<li>The observations file (.obf), which lists the historical time series; INSCHEK can generate this from the model output file and the instruction file Both files are fixed-format, which means the field widths and alignment must be properly respected. It is easiest to create the parameter file by editing an existing parameter file (PEST outputs a parameter file containing the final parameter values at the end of a calibration; the file used for this calibration is also included with the model). </li>
</ul>
<p>The parameter file for this model, hkflu.par, appears below.</p>
<pre>  single point
    infectrate    1.5000000E-03     1.000000         0.000000
   recoverrate    0.5000000         1.000000         0.000000    </pre>
<p>The first line tells PEST to use single-precision floating point and to always include the decimal point when writing parameters to the model input file. The file then contains one line for each input parameter.</p>
<p>Each line starts with the name of the input parameter, as it appears in the template file, right-justified. This is followed by the initial value of that parameter, a scale factor (normally one) and an offset (normally zero). To add additional parameters, copy and paste the lines and make sure the columns line up with the existing lines.</p>
<p>The observations file contains all of the observation names with the historical data values for each. The command line tool INSCHEK, which comes with PEST, will generate this file by merging the observation names in the instruction file with data in a file formatted the same as the model output file. The instruction file has already been created. To complete this process, copy and paste the historical data into the second column (<em>Infected</em>) of the model output file, output.csv, and save it. Open the Windows command prompt window by choosing “Command Prompt” under All Programs-&gt;Accessories. Make sure to change the current directory to the directory containing your model and your PEST files. This is easily done by type “cd ” (the ending space is necessary) and then <em>dragging</em> the folder icon in the address field of the Windows Explorer window for that folder onto the command window. Reselect the command window and press Enter. The directory is now set. Now type:</p>
<p style="padding-left: 30px;">inschek output.ins</p>
<p>Note that inschek will need to be preceded by the path to the PEST directory if you have not added the PEST directory to your PATH environment variable. This command will verify there are no syntax errors in your instruction file. If you get any errors, correct them and check again. Continue until there are no errors reported. Then type:</p>
<p style="padding-left: 30px;">inschek output.ins output.csv</p>
<p>This will create the observations file, output.obf, from the data you pasted into output.csv.</p>
<p>It is now possible to create the control file, hkflu.pst. Type:</p>
<p style="padding-left: 30px;">pestgen hkflu hkflu.par output.obf</p>
<p>If there are errors reported in the parameter file, fix them and try again. This command generates a default control file for case <em>hkflu</em> (short for Hong Kong flu – you can name it anything you want) with your parameter values and historical data. This file will require some editing before PEST can be run.</p>
<p><strong>Editing the Control File</strong></p>
<p>The generated file looks like this (to view, right-click on hkflu.pst, choose “Open With…”, and select WordPad):</p>
<pre>pcf
* control data
restart  estimation
    2    13     2     0     1
    1     1 single point   1   0   0
  5.0   2.0   0.3  0.03    10
  3.0   3.0 0.001
  0.1
   30  0.01     3     3  0.01     3
    1     1     1
* parameter groups
infectrate   relative 0.01  0.0  switch  2.0 parabolic
recoverrate  relative 0.01  0.0  switch  2.0 parabolic
* parameter data
infectrate   none relative   1.500000E-03  -1.000000E+10   1.000000E+10
<img src="http://blog.iseesystems.com/wp-content/uploads/2011/01/indent_char.gif" alt="" width="11" height="13" /> infectrate     1.0000        0.0000      1
recoverrate  none relative   0.500000      -1.000000E+10   1.000000E+10
<img src="http://blog.iseesystems.com/wp-content/uploads/2011/01/indent_char.gif" alt="" width="11" height="13" /> recoverrate     1.0000        0.0000      1
* observation groups
obsgroup
* observation data
infected1      14.0000      1.0  obsgroup
infected2      28.0000      1.0  obsgroup
infected3      50.0000      1.0  obsgroup
infected4      66.0000      1.0  obsgroup
infected5      156.000      1.0  obsgroup
infected6      190.000      1.0  obsgroup
infected7      156.000      1.0  obsgroup
infected8      108.000      1.0  obsgroup
infected9      68.0000      1.0  obsgroup
infected10     77.0000      1.0  obsgroup
infected11     33.0000      1.0  obsgroup
infected12     65.0000      1.0  obsgroup
infected13     24.0000      1.0  obsgroup
* model command line
model
* model input/output
model.tpl  model.inp
model.ins  model.out
* prior information</pre>
<p>This is also a fixed-format file, so you need to be careful when editing it. Luckily, only a few things need to be edited.</p>
<p>The “pcf” at the top of the file tells PEST this is a control file. The control data section sets a number of parameters that can stay the way they are unless the calibration does not work (in which case, you will need to dig deeply into the PEST manual to figure out what to change and how to change it). The parameter groups section, the observation groups section, and the observation data sections will not require any changes. However, the parameter data section needs to be adjusted and both the model command line and model input/output need to be specified.</p>
<p>For each parameter under parameter data, you must decide whether the changes made by PEST to the parameter will be <em>relative</em> (i.e., additive – the default), or <em>factor</em> (i.e., multiplicative). There are advantages and disadvantages to each, however, for a STELLA model, this simple guideline should help: change all time constants, rates, and multipliers to <em>factor</em>. In the SIR model, both variables are rates, so the word “relative” must be replaced with “factor ”. Note the two extra spaces after “factor”; the new text must <em>completely</em> fill the space formerly occupied by “relative”.</p>
<p>The default domain for each parameter is set to -1.0e10 to 1.0e10. You are likely to have better information (especially if it is a multiplier) and should enter it here in place of those numbers. I restricted the domain of <em>infectrate</em> to between 0.0001 and 0.01 and that of <em>recoverrate</em> to between 0.01 and 1.0. This was based on both my knowledge of these variables and some simple experiments I ran. The domains for these parameters could be much wider, as long as they stay above zero in both cases. This leads to the following changed lines (truncated after limits):</p>
<pre style="padding-left: 30px;">infectrate   none factor     1.500000E-03   1.000000E-04   1.000000E-02 …
recoverrate  none factor     0.250000       1.000000E-02   1.000000E+00 …</pre>
<p>The model command line is changed to:</p>
<pre style="padding-left: 30px;">run.bat</pre>
<p>The batch file run.bat contains commands to create the model output file and to run the STELLA SIR.stm model:</p>
<p style="padding-left: 30px;">@echo off<br />
 echo &gt; output.csv<br />
 start /min /wait &#8220;&#8221; &#8220;C:\Program Files\isee systems\STELLA 9.1.4\STELLA&#8221; -r SIR.stm</p>
<p>If STELLA was not installed to the default directory shown in the above command, run.bat will need to be edited to contain the correct path to STELLA.  The model output file needs to be recreated in the batch file (using echo) because PEST deletes the model output file before running the model.</p>
<p>Finally, the model input/output section was changed to name the template, model input, instruction, and model output files. Note these are not fixed-width fields.</p>
<pre style="padding-left: 30px;">input.tpl  input.csv
output.ins output.csv</pre>
<p><strong>Running PEST</strong></p>
<p>Before running PEST, it is a good idea to verify that all of the input files are valid. This is accomplished with PESTCHEK:</p>
<p style="padding-left: 30px;">pestchek hkflu</p>
<p>Fix any errors that are reported and repeat until all errors are gone. Note that PESTCHEK does not require the case name (<em>hkflu</em>) to be specified. Without the name, it will find all case names in the current directory (by searching for PEST control files) and check them all.</p>
<p>Finally, start the calibration process with:</p>
<p style="padding-left: 30px;">pest hkflu</p>
<p>PEST will run until it detects no further changes or cannot proceed. Each iteration, it will report a value named <em>phi</em>. This is the sum of the squared residuals and should be decreasing each iteration. If PEST succeeds, the model input file will contain the best parameter values found and the model output file will contain the results obtained with those parameter values.</p>
<p>PEST outputs a number of files as well. As already discussed, the parameter file (.par) will be updated (or created) to contain the final successful parameter values. The run details file (.rec) will contain a log of the search, including parameter values tried and their relative success, as well as the final results compared to the historical data, with residuals. The 95% confidence interval for the parameters is also given. A number of other files are generated by PEST. See the PEST manual for further details.</p>
<p>The results of running PEST with this model and these initial parameters are shown in the graph below. The final parameter settings discovered by PEST were <em>infection rate</em> = 0.0015766646 and <em>recovery rate</em> = 0.82166505, with a final error (phi) of 4785.7 (compared to 773,059 with the original parameters).</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2011/01/image.png" border="0" alt="image" width="455" height="252" /></p>
<p><strong>Changing the Data Set</strong></p>
<p>Shown below is the number of weekly deaths per thousand people in the UK due to the Spanish flu (H1N1) in the winter of 1918-1919.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image012" src="http://blog.iseesystems.com/wp-content/uploads/2011/01/clip_image012.gif" border="0" alt="clip_image012" width="343" height="267" /></p>
<p>To calibrate to this data set, it is necessary to change the initial values of the <em>Susceptible</em> and <em>Infected</em> stocks in the model. The historical data values in the PEST control file must also be changed.</p>
<p>The initial value of <em>Infected</em> is, again, the first data value (1 in this case). The initial value of <em>Susceptible</em> is, again, the remaining population (148). The model SIR2.stm contains these changed settings, as well as the new historical data set.</p>
<p>While it is relatively easy to regenerate and edit the PEST control file, it is just as easy to edit the few historical values. Control file spflu.pst contains the new dataset. It also uses run2.bat to run SIR2.stm instead of SIR.stm.  Type:</p>
<p style="padding-left: 30px;">pest spflu</p>
<p>Although it takes some time, the calibration almost succeeds using the same starting parameters as those for the Hong Kong flu. It fails in the end because the domain of <em>infection rate</em> is too narrow; <em>infection rate</em> gets stuck at 0.01. It is important to note that PEST reported success in this case. Looking at the graph in STELLA, however, made it clear that it only came close, while looking at the chosen parameters showed the boundary was reached. Changing the maximum value to 0.1 in spflu.pst fixed that problem. The final results are shown below.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2011/01/image1.png" border="0" alt="image" width="455" height="252" /></p>
<p>This was generated with <em>infection rate</em> = 0.012101631 and <em>recovery rate</em> = 0.89054160. The error decreased from 2233.8 at the start to 110.6 with these parameters.</p>
<p><strong>Troubleshooting PEST</strong></p>
<p>Chapter five of the PEST User Manual includes a detailed troubleshooting section titled “If PEST Won’t Optimize.” If PEST is not changing parameters or not succeeding, this section will help you discover why.</p>
<p><strong>Troubleshooting Data</strong></p>
<p>In the examples used in this post, the model-generated data was one-to-one with the historical data. In many cases, data is not collected at a set frequency, does not coincide in time with model-generated data, and there are missing data points. While this was not covered in this example, PEST is capable of dealing with these cases. Missing data points can be handled by using !dum! as a placeholder in the instruction file (or additional lines can be skipped between points). PEST can also interpolate the model-generated data to match it in time to the historical data. Refer to the PEST manual for instructions to handle these cases.</p>
<p><strong>End Note (about precision): </strong>While STELLA and iThink use double-precision for its calculations and PEST supports double-precision output, it is not possible to directly interface to PEST in double-precision mode as PEST outputs exponentials using “D” instead of “E” when in double-precision mode (as FORTRAN does). Such non-standard numeric formats cannot be read by STELLA. Double-precision can be used if necessary by adding a preprocessor to convert those “D”s in the model input file to “E”s before running STELLA and by adding a post-processor after running STELLA to change the “E”s output by STELLA to “D”s. Each parameter should also be given a field that is 23 characters wide, instead of 13, in the template file. Most applications will not need to use double-precision.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=EKXZkEoEwjQ:DBZrkNhSa_0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=EKXZkEoEwjQ:DBZrkNhSa_0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=EKXZkEoEwjQ:DBZrkNhSa_0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=EKXZkEoEwjQ:DBZrkNhSa_0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=EKXZkEoEwjQ:DBZrkNhSa_0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=EKXZkEoEwjQ:DBZrkNhSa_0:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/EKXZkEoEwjQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/calibrate-models-pest/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/calibrate-models-pest/</feedburner:origLink></item>
		<item>
		<title>Shifting the Burden</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/X4IPCOIfo1U/</link>
		<comments>http://blog.iseesystems.com/systems-thinking/shifting-the-burden/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 18:55:44 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Systems Thinking]]></category>
		<category><![CDATA[archetypes]]></category>
		<category><![CDATA[Causal Loop]]></category>
		<category><![CDATA[CLD]]></category>
		<category><![CDATA[personal finance]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/news-announcements/shifting-the-burden/</guid>
		<description><![CDATA[The Shifting the Burden Systems Archetype shows how attacking symptoms, rather than identifying and fixing fundamental problems, can lead to a further dependence on symptomatic solutions.  This Systems Archetype was formally identified in Appendix 2 of The Fifth Discipline by Peter Senge (1990).  The Causal Loop Diagram (CLD) is shown below.

When a problem symptom appears, [...]]]></description>
			<content:encoded><![CDATA[<p>The Shifting the Burden Systems Archetype shows how attacking symptoms, rather than identifying and fixing fundamental problems, can lead to a further dependence on symptomatic solutions.  This Systems Archetype was formally identified in Appendix 2 of <span style="text-decoration: underline;">The Fifth Discipline</span> by Peter Senge (1990).  The Causal Loop Diagram (CLD) is shown below.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image.png" border="0" alt="image" width="282" height="280" /></p>
<p>When a <em>problem symptom</em> appears, two options present themselves:  1) apply a short-term fix to the symptom, or 2) identify and apply a longer-term fix to the fundamental issue.  The second option is less attractive because it involves a greater time delay and probably additional cost before the problem symptom is relieved.  However, applying a short-term fix, as a result of relieving the problem symptoms sooner, reduces the desire to identify and apply a more permanent fix.  Often the short-term fix also induces a secondary unintended side-effect that further undermines any efforts to apply a long-term fix.  Note that the short-term fix only relieves the symptoms, it does not fix the problem.  Thus, the symptoms will eventually re-appear and have to be addressed again.</p>
<p>Classic examples of shifting the burden include:</p>
<ul>
<li>Making up lost time for homework by not sleeping (and then controlling lack of sleep with stimulants) </li>
<li>Borrowing money to cover uncontrolled spending </li>
<li>Feeling better through the use of drugs (dependency is the unintended side-effect) </li>
<li>Taking pain relievers to address chronic pain rather than visiting your doctor to try to address the underlying problem </li>
<li>Improving current sales by focusing on selling more product to existing customers rather than expanding the customer base </li>
<li>Improving current sales by cannibalizing future sales through deep discounts </li>
<li>Firefighting to solve business problems, e.g., slapping a low-quality – and untested – fix onto a product and shipping it out the door to placate a customer </li>
<li>Repeatedly fixing new problems yourself rather than properly training your staff to fix the problems – this is a special form known as “shifting the burden to the intervener” where you are the intervener who is inadvertently eroding the capabilities and confidence of your staff (the unintended side-effect) </li>
<li>Outsourcing core business competencies rather than building internal capacity (also shifting the burden to the intervener, in this case, to the outsource provider) </li>
<li>Implementing government programs that increase the recipient’s dependency on the government, e.g., welfare programs that do not attempt to simultaneously address low unemployment or low wages (also shifting the burden to the intervener, in this case, to the government) </li>
</ul>
<p><strong><span id="more-3508"></span>Moving from CLD to Model</strong></p>
<p>The canonical CLD shown above can be confusing in two important ways:</p>
<ol>
<li>The problem itself does not explicitly appear in the CLD, but is hidden in the left causal connection of balancing loop B2.  In fact, applying the fundamental solution reduces the problem, and therefore the symptom, rather than directly acting on the symptom.  In contrast, the symptomatic solution only affects the symptom, so the problem is never addressed and is free to generate more symptoms in the future.  This is shown in the revised CLD below.
<p><br class="spacer_" /></p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image1.png" border="0" alt="image" width="296" height="280" /></p>
</li>
<li>The solution-induced side-effect affects the <em>desire</em> or <em>ability</em> to apply the fundamental solution, rather than the actual application of the fundamental solution as implied by the CLD.  This works in concert with the delay in balancing loop <em>B2</em> to inform the decision about which solution to apply. </li>
</ol>
<p>Even after acknowledging these two issues, the CLD remains difficult to translate into a model.  For example, what are the stocks and what are the flows?  I intentionally renamed what is normally called “symptomatic solution” and “fundamental solution” to “apply symptomatic solution” and “apply fundamental solution” to clarify these are <em>flows</em>, not stocks.  I likewise renamed “side-effect” to “solution-induced side-effect” to emphasize the side-effect was caused by applying the symptomatic solution.</p>
<p>Is the <em>problem</em> a stock or a flow?  It could be either, and that will determine whether the <em>problem symptom</em> is based on a stock or a flow.  In addition, since the problem is recurring, the fundamental solution will always correct a flow.  Finally, since the side-effect is continuously undermining the ability to apply the fundamental solution, i.e., it persists, it must be a stock.</p>
<p>This CLD hides one other detail that makes it hard to model:  the causal arrows leaving <em>problem symptom</em> imply a decision point; typically, only one path will be chosen.  The decision process is also implied in the CLD, being based on both the solution-induced side-effect and the delay, as well as a perhaps higher cost (not shown), to the fundamental solution.</p>
<p>It is unlikely the decision process will appear in a model constructed from this archetype.  When modeling the long-term impact of applying the symptomatic solution, there is no need to include either the fundamental solution or the decision process in the model.  In this case, the reinforcing loop <em>R</em> will guarantee the model continues to use the symptomatic solution until the system collapses (the <a href="http://blog.iseesystems.com/stella-ithink/success-to-the-successful/">Success to the Successful</a> archetype again).  When modeling the long-term benefits to applying the fundamental solution, including short-term use of the symptomatic solution, the decision has also already been made and, again, the decision process remains outside the model.</p>
<p>In the end, I do not believe this is an archetype that is meant to be modeled in its entirety.  It allows discussion points to be raised and pieces of it can be seen in models.  Recognizing the pattern allows you to change the behavior and escape the potentially devastating results caused by the reinforcing loop.  In the following discussion, two models will be presented:  one that favors the symptomatic solution and another that favors the fundamental solution.  Only the second contains all of the loops in the CLD.  Neither one contains the decision process, as the decision was already made based on the purpose of the model.</p>
<p><strong>Exploring Shifting the Burden with Credit Card Debt</strong></p>
<p>People are often tempted to spend more than they earn, ignoring Mr. Macawber’s dire warning in Charles Dickens’ <span style="text-decoration: underline;">David Copperfield</span> (with updated monetary units):  “Annual income $20,000, annual expenditure $19,500, result happiness.  Annual income $20,000, annual expenditure $20,500, result misery.”  Credit cards, unfortunately, make it very easy to achieve misery and most people do not see the danger of overextending themselves.</p>
<p>Consider someone who takes home $2000/month, but has managed to start spending $3000/month by a sudden change in lifestyle (new house, new car, etc.).  This person has $5000 remaining in savings at this point, no outstanding bills or debts, and a number of credit cards with varying limits over $5000.  It is clear that within five months, the savings will be used up.  What will the person do to cover their expenses?  One very common solution, the “symptomatic solution,” is to increase credit card balances by charging more purchases, including the use of credit card checks, and only paying the required minimum payment.</p>
<p>The CLD for this situation matches the Shifting the Burden archetype, as shown below with the symptomatic solution at the top and the fundamental solution at the bottom.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image2.png" border="0" alt="image" width="289" height="299" /></p>
<p>The model below (available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/12/credit-card.itm">here</a>) implements this structure when the symptomatic solution is always chosen.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image3.png" border="0" alt="image" width="477" height="471" /></p>
<p>The model is divided into three sections, vertically.  The bottom section manages a bank account based on income and bill payments.  The center section manages spending, accruing bills, and the bill payment process.  The top section manages credit card debt (with no limits).</p>
<p>The model is annotated with all constant and initial values.  The balancing loop <em>B1</em> corresponds to applying the symptomatic solution, i.e., drawing on credit to meet payment obligations.  The reinforcing loop <em>R</em> corresponds to the unintended side-effects created by this decision, i.e., mounting credit card debt that undermines the ability to apply the fundamental solution of balancing the monthly personal budget.  Note that the second balancing loop, <em>B2</em>, which corresponds to applying the fundamental solution does not appear in this model.  In fact, with regard to the solving the problem, this model is in open-loop:  there is no connection between spending and income (aka the right brain and the left).  While, ostensibly, the fundamental solution is to pay the bills from the bank account (there is a minor balancing loop there), there is no ability to do so without first bringing spending into line with income.  The real solution to the problem is to either reduce spending (shown in the CLD above), increase income, or do both.</p>
<p>A few assumptions allowed the model structure to be simplified without adversely impacting the outcome:</p>
<ul>
<li>The person has enough, or can obtain enough, credit to make it to the end of the simulation.  Thus, no credit limits, and no collapse, appear in this model. </li>
<li>The system is continuous, i.e., there are no monthly payments per se, but payments are made throughout the month as one would expect from a normal stream of bills and a number of different credit cards all with different payment due dates.  The implication is that the person in question is faced with the problem symptoms (not enough money to pay their bills), and the choice between the symptomatic and the fundamental solution, on a daily basis. </li>
<li>While there may be multiple credit cards, only one minimum payment cutoff is modeled.  This cutoff should be set to the sum of the minimum payments for all cards being used. </li>
</ul>
<p>The model simulation produces the following results over three years.  Note how quickly the debt runs away, bringing the person to the brink of bankruptcy.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image4.png" border="0" alt="image" width="454" height="251" /></p>
<p>As expected, the bank balance is quickly depleted and the pipeline of bills increases to the monthly spending ($3000 plus the minimum credit card payment).  The credit card debt increases exponentially, and has reached over $35,000 after 30 months.  The monthly interest on this debt has risen to almost $600, nearly one-third of this person’s monthly income.</p>
<p><strong>Investigating the Fundamental Solution</strong></p>
<p>The fundamental solution (balancing loop <em>B2</em>) can be implemented by restricting the spending – including any credit card payment – based on the money available, as shown below (and available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/12/credit-card2.itm">here</a>).  In reality, it will take some time to adjust expenses downward, hence the converter <em>time to react</em>.  Note this is the <em>inherent delay</em> associated with applying the fundamental solution.  This means that it will still be necessary to borrow from the credit card, i.e., pursue the symptomatic solution in the short term.  This is a normal consequence of the Shifting the Burden structure.  The maximum credit card balance will then depend on how long it takes to adjust expenses down and how much extra money – beyond the minimum payment – is given to the credit card company.  There are, of course, lower interest alternatives to the credit card companies for short-term debt that would make it easier to reduce the debt balance.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image5.png" border="0" alt="image" width="474" height="296" /></p>
<p>The simulation results for the fundamental solution are shown below.  Note the credit card debt continues to grow even after spending has been controlled.  This is because the model continues to pay only the minimum payment ($45), which is less than the monthly interest charge (almost $90 by month 36).  To reduce the debt (almost $6000), an amount larger than the interest charge must be paid each month.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image6.png" border="0" alt="image" width="454" height="251" /></p>
<p>Forcing the minimum payment to be $100 (by increasing the <em>minimum payment cutoff</em>) is sufficient to both reduce the maximum debt to less than $5000 and to begin to lower the amount of debt.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/image7.png" border="0" alt="image" width="454" height="251" /></p>
<p><strong>Summary</strong></p>
<p>Shifting the Burden is an important pattern that helps you recognize when you are caught in a never-ending cycle of applying a symptomatic solution.  As the first model shows, this can lead to long-term devastating results.  However, it is not true that symptomatic solutions should never be applied.  As the second model shows, sometimes they are needed as a short-term transitional fix to stabilize the system and/or buy time until the fundamental solution can be applied.  In these cases, a conscious decision has been made to sacrifice some long-term stability (increased debt burden over a long period of time in this case) in order to shore up the system until the long-term solution arrives.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X4IPCOIfo1U:opuErS-108U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X4IPCOIfo1U:opuErS-108U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=X4IPCOIfo1U:opuErS-108U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X4IPCOIfo1U:opuErS-108U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X4IPCOIfo1U:opuErS-108U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=X4IPCOIfo1U:opuErS-108U:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/X4IPCOIfo1U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/systems-thinking/shifting-the-burden/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/systems-thinking/shifting-the-burden/</feedburner:origLink></item>
		<item>
		<title>The Politics of Economic Recovery</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/XqQZhTd0baM/</link>
		<comments>http://blog.iseesystems.com/systems-thinking/the-politics-of-economic-recovery/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 17:34:42 +0000</pubDate>
		<dc:creator>Corey Peck</dc:creator>
				<category><![CDATA[Systems Thinking]]></category>
		<category><![CDATA[crisis]]></category>
		<category><![CDATA[economy]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[housing]]></category>
		<category><![CDATA[stimulus]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3465</guid>
		<description><![CDATA[Editor&#8217;s Note: This is a guest post from isee&#8217;s training and consulting partner, Corey Peck of Lexidyne LLC.
The mid-term elections are now a month behind us and the political airwaves are still abuzz with commentary about the results.  Exit polls showed that unemployment was at the top of most voters’ list of issues, and that concerns [...]]]></description>
			<content:encoded><![CDATA[<p><em>Editor&#8217;s Note: This is a guest post from isee&#8217;s training and consulting partner, Corey Peck of <a href="http://www.lexidyne.com" target="_blank">Lexidyne LLC</a>.</em></p>
<p>The mid-term elections are now a month behind us and the political airwaves are still abuzz with commentary about the results.  Exit polls showed that unemployment was at the top of most voters’ list of issues, and that concerns about the federal government’s financial condition (record deficits and debt levels) were a hot topic as well.  Voters appeared to be asking “How can the federal government spend so much money and have so little positive impact on the nation’s economy?” </p>
<p><img class="alignright size-medium wp-image-3495" style="margin-left: 10px; margin-right: 20px;" title="US Political Parties" src="http://blog.iseesystems.com/wp-content/uploads/2010/12/PoliticalParties-280x185.jpg" alt="" width="252" height="167" />The responses by politicians to such an important question are all over the map.  Democrats are claiming that economic conditions would have been much worse if not for massive federal bailouts and stimulus spending.  Republicans are touting the situation as a death knoll for the Obama platform in an effort to position themselves for 2012.  And the Tea Party movement has emerged to push for a roll-back of what they see as an intrusive and ineffective “Big Government”.</p>
<p>But, this political posturing reminds me that one of the true strengths of Systems Thinking is to force people to think very clearly and very operationally about the structure/behavior link embedded in such cases.  A little over a year ago, we sat down with Dr. Mark Paich, who used some very simple stock/flow language and some well-established principles of macroeconomics to lay out some relevant dynamics about the economic crisis and its aftermath:</p>
<ul>
<li>Why the collapse of the housing market made consumers re-evaluate their net asset position and hence started saving more of their incomes to pay off high interest credit card debt.</li>
<li>How such actions on the part of consumers, in aggregate, kicked off a vicious cycle of decreased spending and contracting national output.</li>
<li>Why government stimulus spending could close some, but not all, of the gap left by suddenly thrifty consumers, and that the recovery was likely to be a long, slow one.</li>
</ul>
<p>We certainly don’t know how the future will play out, but the data suggest that consumers are indeed cutting back spending, and paying off debt.  (The Bureau of Economic Analysis has terrific <a href="http://www.bea.gov/national/nipaweb/Nipa-Frb.asp" target="_blank">historical data on household balance sheets and income</a>.)  The unemployment numbers remain stubbornly high (around 9.5%), and although the recession is technically over, few economists are predicting rapid post-crisis economic expansion.</p>
<p>For a bit of clarity amidst all the rhetoric, you may want to check out <a href="http://www.iseesystems.com/store/UnderstandingEconomicCrisis/default.aspx">Mark’s video offering</a>.  His model and associated explanation do not provide a “magic bullet” of a solution, but they do provide some substance (and perhaps insight) to this vexing situation.  Now if only the politicians could follow suit!</p>
<p>To read a previous blog post about <em>Modeling the Economic Crisis</em> or view a 5-minute video trailer<em>, </em>click <a href="http://blog.iseesystems.com/systems-thinking/modeling-the-economic-crisis/">here</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=XqQZhTd0baM:JOpeQuopZuM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=XqQZhTd0baM:JOpeQuopZuM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=XqQZhTd0baM:JOpeQuopZuM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=XqQZhTd0baM:JOpeQuopZuM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=XqQZhTd0baM:JOpeQuopZuM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=XqQZhTd0baM:JOpeQuopZuM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/XqQZhTd0baM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/systems-thinking/the-politics-of-economic-recovery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/systems-thinking/the-politics-of-economic-recovery/</feedburner:origLink></item>
		<item>
		<title>What are “Mental Models”? Part 2</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/oOWMTtTBoNU/</link>
		<comments>http://blog.iseesystems.com/systems-thinking/what-are-mental-models-part-2/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 17:35:00 +0000</pubDate>
		<dc:creator>Jeremy Merritt</dc:creator>
				<category><![CDATA[Systems Thinking]]></category>
		<category><![CDATA[feedback-loops]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[mental model]]></category>
		<category><![CDATA[oscillation]]></category>
		<category><![CDATA[population dynamics]]></category>
		<category><![CDATA[predator-prey]]></category>
		<category><![CDATA[simulation]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3365</guid>
		<description><![CDATA[Editor’s note:  This post is part two of a two part series on mental models.  You can read the first post by clicking here.
In part one of this series I stated “A mental model is a model that is constructed and simulated within a conscious mind.”  A key part of this definition is that mental [...]]]></description>
			<content:encoded><![CDATA[<p><em>Editor’s note:  This post is part two of a two part series on mental models.  You can read the first post by <a href="http://blog.iseesystems.com/systems-thinking/what-are-mental-models/">clicking here</a>.</em></p>
<p>In part one of this series I stated “A mental model is a model that is constructed and simulated within a conscious mind.”  A key part of this definition is that mental models are not static; they can be played forward or backward in your mind like a video player playing a movie.  But even better than a video player, a mental model can be simulated to various outcomes, many times over, by changing the assumptions.</p>
<p><strong>Mental Simulation</strong></p>
<p><img style="background-image: none; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="Child reaching toward hot stove" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/iStock_000005079030XSmall1.jpg" border="0" alt="Child reaching toward hot stove" width="187" height="240" align="right" />Remember the example from part one of the child reaching for the hot stove?  One possible outcome we can simulate is that the child does not get burned.  We can simulate this outcome by altering our assumptions. We could include a parent in the room who rescues the child in the nick of time.  Or, we could simulate the child slipping just before reaching the stovetop because the hardwood floor appears slippery.  This kind of mental simulation allows us to evaluate what may happen, given different conditions, and inform our decision making.  We don’t have to make any decisions while looking at the picture, but imagine what actions you might take if the scene above was actually unfolding in front of you.</p>
<p>It seems effortless to mentally simulate these types of mental models.  Most of the time we are not even aware that we are doing it.  But other times, it becomes very obvious that our brain is working rather hard.  For example, looking at the chess board below, can you determine if the configuration is a checkmate?</p>
<p><img style="background-image: none; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;" title="Chess board" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/checkmate1.png" border="0" alt="Chess board" width="212" height="212" align="left" /></p>
<p>It is indeed.  But I’ll bet it took noticeably more effort for you to mentally simulate the chess game than it did with the child near the stove scenarios.  Think about the mental effort that the players make trying to simulate the positions on the board just a few moves ahead in the game.</p>
<p>The paper “<a href="http://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two" target="_blank">The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information</a>” by G.A. Miller (1956) established that people can generally hold seven objects (numbers, letters, words, etc.) simultaneously within their working memory.  Think of “working memory” as you would think of memory in a computer.  It’s like the amount of RAM we have available to perform computations within our mind.  And it’s not very much.  This means if people want to do any really complex<em> </em>information processing, they’ll need some help.  Over the last 50 years or so, the help has come from computers.  (In fact, IBM designed a computer specifically for playing chess, dubbed ‘Deep Blue’).</p>
<p>Digital computers have catapulted humankind’s ability to design, test, and build new technology to unbelievable levels in a relatively short period of time.  Space exploration, global telecommunication, and modern health care technology would not have been possible without the aid of computers.  We are able to perform the computation required to simulate complex systems using a computer instead of our minds.  Running simulations with a computer is faster and more reliable.</p>
<p><strong>What makes a model useful?</strong></p>
<p>Models that we can simulate using computers come in many forms.  For example, a model could be a financial model in a spreadsheet, an engineering design rendered with a CAD program, or a population dynamics model created with STELLA.  But what makes any of these models <em>useful</em>?  Is it the model’s results?  Its predictions?  I think the ability to <em>explain</em> the results is what makes a model truly useful.</p>
<p>Models are tools that can contribute to our understanding and decision making processes.  To make decisions, a person needs to have some understanding of the system the model represents.  A business finance model, for example, can be a useful tool <em>if </em>you understand how the business works.</p>
<p>Consider a model that does not provide any explanatory content, only results.  This type of model is often referred to as a black box.  It gives you all the answers, but you have no idea <em>how</em> it works.  People rarely trust these types of models and they are often not very useful for generating understanding.</p>
<p><img style="background-image: none; margin: 10px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="Mental model of the learning process" src="http://blog.iseesystems.com/wp-content/uploads/2010/11/cld-learning.png" border="0" alt="Mental model of the learning process" width="261" height="203" align="right" />The most useful models are structured so that <em>the model itself</em> will provide an explanatory framework that enables someone to ask <em>useful</em> questions of it.  Those questions may be answered by experimenting with the model (simulating) which, in turn, can help deepen a person’s understanding of the system.</p>
<p>This is an important feedback loop in a person’s learning process.  This feedback loop can be accelerated if the model provides explanations and can be simulated with a computer.</p>
<p>Transforming your mental models into visual models that are easier to understand and experiment with, will deepen your understanding, and help you communicate your models more effectively.</p>
<p><span id="more-3365"></span></p>
<p><strong>Modeling Dynamic Systems</strong></p>
<p>Dynamic systems are notoriously difficult to understand.  A survey of opinions and policy proposals concerning the recent global economic crisis, health-care reform in the US, and climate change will yield a myriad of mental models about how these systems work, and what action we can take to improve them.  These systems are hard to understand because they challenge both our mental capacity to model, and to simulate them.  Systems problems are characterized by non-linearity, delays, and competing feedback loops, all of which are challenging phenomenon to understand.</p>
<p>As a result of the complexity that is inherent within dynamic systems, you’ll often find a lot of debate and mistrust of proposals to change them.  Think about how complex issues are presented in newspapers, blogs, on television and the workplace.  Typically, projections concerning what will happen, if we adopt one proposal or another, will be presented with little explanation of how the proposal will change the system’s behavior.  People will have difficulty engaging in meaningful discussion about how to actually solve problems without any common ground for understanding the dynamics of the system.</p>
<p>This is why developing a <em>visual</em> representation of how a system is <em>structured</em> underpins the philosophy behind Systems Thinking and the <em>iThink</em> and STELLA software.</p>
<p><strong>Stocks and Flows</strong></p>
<p>The mental model of the learning process pictured above is a visual representation of cause and effect relationships.  These cause and effect relationships need to be modeled <em>operationally</em> using stocks and flows to simulate them using STELLA.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="Stock" src="http://blog.iseesystems.com/wp-content/uploads/2010/11/stock1.png" border="0" alt="Stock" width="81" height="75" align="right" />A <em>stock</em> is an accumulation within a system.  Think of it as a bathtub.  Like a bathtub, stocks can be filled and drained.  In STELLA, stocks are indicated by a rectangle.  Stocks can be anything that accumulates—water, money, people, anger, and motivation are all examples of stocks.</p>
<p>A <em>flow</em> can add to, or subtract from, a stock.  Think of the faucet running water into the bathtub as it fills.  The stock is the accumulation of water in the bathtub and the flow is the rate at which the water is flowing in.</p>
<p>In the example below, the <em>Population</em> stock increases as people are born.   If people are born at a constant rate, then we’ll see a linear increase in the <em>Population</em> over time.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Inflow" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/births1.png" border="0" alt="Inflow" width="600" height="182" /></p>
<p>Similarly, the <em>deaths</em> flow pictured below, removes people from the population, causing the level to drop over time. <strong><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Outflow" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/deaths1.png" border="0" alt="Outflow" width="600" height="182" /></strong></p>
<p>The clouds on the ends of the flows represent infinite sources or sinks.  In the model above, <em>deaths</em> flow into a cloud, which is outside the system boundary and therefore can accumulate infinitely.</p>
<p><strong>Feedback Loops</strong></p>
<p>Feedback loops are what enable systems to run themselves.  They are difficult to simulate mentally, but easy to construct using stocks and flows.  A connector (red arrow) indicates a dependency between two parts of a system.  In the model below, the <em>births</em> flow is dependent on the <em>Population</em> level and <em>birth rate</em>.</p>
<p>The <em>birth rate</em> is represented using a converter.  Converters can contain expressions or constants that can used to modify other parts of the model.  As you might suspect, the <em>births</em> flow is defined as <em>Population</em> * <em>birth rate</em>.  By placing the <em>birth rate</em> in a converter we can easily see that the flow of <em>births</em> is a function of both <em>Population</em> and <em>birth rate</em>. <img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Reinforcing feedback loop" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/reinforcing1.png" border="0" alt="Reinforcing feedback loop" width="600" height="182" /></p>
<p>This structure creates a reinforcing feedback loop.  Notice the population exhibits exponential growth when simulated over time.  There is nothing limiting the growth of the population.  One way to limit the growth is to add a balancing loop.<img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Balancing feedback loop" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/s-shaped1.png" border="0" alt="Balancing feedback loop" width="600" height="182" /></p>
<p>The relationship between the size of the <em>Population</em> and the <em>death rate</em> form a balancing loop.  The <em>death rate</em> changes based on the <em>Population</em> size and therefore limits the growth of the population.  If the population grows too dense, deaths occur at a higher rate.</p>
<p>Now that you have learned the basic building blocks (stock, flow, connector, converter) and understand how to map out feedback loops, we can build, and experiment with, a real model of a complex feedback system.</p>
<p><strong>Predator-Prey Dynamics</strong></p>
<p>A classic example of a complex feedback system is the dynamics exhibited by predator-prey populations.  A remarkable dataset from the Hudson Bay Company in Canada, of lynx and snowshoe hare pelt trading records, gives us a rare look at an isolated, natural system.  The records span almost a century, beginning in 1845.  From these records, we can infer the population levels of both species.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Lynx and hare populations" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/lynxhare1.gif" border="0" alt="Lynx and hare populations" width="529" height="223" /></p>
<p>At first pass, it seems that there was little keeping the hare population in check other than the lynx population, (hares are the primary food source for lynx).  What is interesting here is the oscillation pattern.   How does the interaction between the two population systems generate this oscillation?  Let’s try to answer this question by constructing a model that we can easily understand and experiment with.</p>
<p><strong>Understanding the System</strong></p>
<p>What is your mental model of how a lynx population increases or declines over time?  My guess is that it may include a long-list of external factors (industrialization, weather, urban sprawl etc.) but the core of the mental model probably contains operational understanding; births and deaths ultimately control the population level.  Converting this mental model into an operational stock and flow model in STELLA looks like this:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Lynx population" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/Capture52.png" border="0" alt="Lynx population" width="383" height="156" /></p>
<p>The more lynx you have in a given population, the more lynx are born.  This is a reinforcing feedback loop.  As the population increases, lynx may start dying at a faster rate because they run out of some resource, such as food.  This is a balancing feedback loop.  Here are the results after I run the simulation:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Lynx population graph" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/Capture41.png" border="0" alt="Lynx population graph" width="501" height="291" /></p>
<p>We can see the population exhibits S-shaped growth.  The value at which the population levels off is the number of lynx that is sustainable within this particular system.</p>
<p>This simple model is congruent with most people’s mental models of population dynamics:  the population grows or declines based on the the limits of what is required to sustain it.  But let’s go a bit deeper and think about <em>how</em> this works.  What we have modeled is two feedback loops (reinforcing and balancing) competing with one another.</p>
<p>The graph above illustrates that the reinforcing feedback loop dominates at the beginning of the simulation, but as the population grows, the balancing loop takes control and dampens the growth.  Lynx are still being born when the population level stabilizes, it’s just that the number of deaths has become equal to the number of births.  Sometimes a balancing loop is referred to as a goal-seeking loop.  The level of the stock stabilizes when the goal is met.</p>
<p>Take a moment to think about how the feedback loops within the lynx and hare populations could interact with one another to generate the oscillation we saw.  We know that each population in isolation will grow until the carrying capacity of the system limits it.  What would happen if we modified the model diagram to show the dependency between the lynx and hare population?</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Lynx and Hares" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/2pop.png" border="0" alt="Lynx and Hares" width="447" height="310" /></p>
<p>I have connected the <em>Lynx</em> population with<em> hare deaths</em> and the stock of <em>Hares</em> with <em>lynx death fraction</em> via the <em>hare density</em> variable.  (The <em>lynx death fraction</em> changes based on the density of hares in the given <em>area</em>.)  I now have a useful model of a complex system: it is easy to understand how the model is structured, and I can experiment with the model by simulating different scenarios.</p>
<p><strong>Experimenting</strong></p>
<p>I have initialized the values in the model so that it begins in “dynamic equilibrium”—lynx and hares are dying and being born, but the population levels stay the same.  This is like a bathtub that has the faucet running at the same rate as the water leaving through the drain.  The level stays constant, but water is cycling through.  In this case, we have many generations of lynx and hares, but within the respective populations, the number of births and deaths are equal.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Lynx and Hare populations in steady-state" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/Capture71.png" border="0" alt="Lynx and Hare populations in steady-state" width="503" height="291" /></p>
<p>If we begin with the model in a steady-state, we’ll easily recognize change in behavior as we experiment.  Let’s explore the impact of trapping on the populations since we know both species were trapped for pelts when the data was collected.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Trapping lynx outflow" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/Capture81.png" border="0" alt="Trapping lynx outflow" width="409" height="155" /></p>
<p>I have added an additional outflow to the stock of <em>Lynx</em> that represents trapping.  I defined the outflow so that trapping begins after ten years.  At that point, 100 lynx are trapped and removed from the stock of <em>Lynx</em>.  Pictured below is the graph after the simulation is run with this new scenario:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Trapping scenario 1 results" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/Capture91.png" border="0" alt="Trapping scenario 1 results" width="501" height="291" /></p>
<p>And here is the graph after I set <em>lynx trapped</em> to 500 and run again:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Trapping scenario 2 results" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/os-500.png" border="0" alt="Trapping scenario 2 results" width="504" height="294" /></p>
<p>In both experiments, the populations begin oscillating at the moment the trapping suddenly reduces the lynx population.  How can our knowledge of the feedback loops at play in this system help explain these results?</p>
<p>We know that in this model, the size of the hare population is limited only by the number of lynx.  When that number suddenly drops, the hare population increases because there are not as many lynx hunting the hares.  What happens to the lynx population?  Because there are more hares and less lynx, the lynx population increases as well.  (There is ample food available for the reduced lynx population.)  The reinforcing loop of births increases the population level, unconstrained by its balancing loop (Fig. 1).</p>
<div class="wp-caption aligncenter" style="width: 214px"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="Figure 1" src="http://blog.iseesystems.com/wp-content/uploads/2010/11/graph_zoom_12.png" border="0" alt="Figure 1" width="204" height="192" /><p class="wp-caption-text">Figure 1</p></div>
<p>Then something interesting happens:  the hare population peaks as the lynx population reaches its pre-trapping level.  At this point, the lynx population has increased to a level that limits the growth of the hare population (Fig. 2).  Lynx are eating hares faster than they can reproduce because of the increased hare density and number of lynx hunting.  In other words, the hare population’s balancing loop is limiting hare growth.</p>
<div class="wp-caption aligncenter" style="width: 214px"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="Figure 2" src="http://blog.iseesystems.com/wp-content/uploads/2010/11/graph_zoom_22.png" border="0" alt="Figure 2" width="204" height="192" /><p class="wp-caption-text">Figure 2</p></div>
<p>For a few years following the hare population’s peak, the lynx population continues to grow.  During this period, (as the hare population falls and lynx rises), the reinforcing births loop dominates the lynx population level (Fig 3).  There are ample hares available to prevent the lynx population from starving; the lynx balancing loop is not limiting their growth.</p>
<div class="wp-caption aligncenter" style="width: 214px"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="Figure 3" src="http://blog.iseesystems.com/wp-content/uploads/2010/11/graph_zoom_32.png" border="0" alt="Figure 3" width="204" height="192" /><p class="wp-caption-text">Figure 3</p></div>
<p>A few years later, the lynx population’s balancing loop kicks in as the number of hares plunges downward.  There are not enough hares left to support so many lynx, so they die at a much faster rate.  This rapid decline in lynx has the same effect on the hare population as trapping lynx: it begins another cycle of the populations overshooting the carrying capacity of the system, and subsequently collapsing.</p>
<p>How did our understanding of the model structure help us understand the results of our experiments?  We traced the cause of the oscillation back to the behavior of the feedback loops at play within the population systems.  In doing so, we gained a deeper understanding of the system that includes the behavior of two interdependent balancing loops.  This understanding can lead to more questions:  Will we observe the same behavior if we trap hares instead of lynx?  How can we stop the oscillation?  How will the oscillation change if we include the hare population’s food constraint in the model?</p>
<p>In the early 1900’s, the mathematicians Lotka and Volterra came up with <a href="http://en.wikipedia.org/wiki/Lotka%E2%80%93Volterra_equation" target="_blank">a pair of non-linear, differential equations</a> to describe the dynamics of a predator-prey system.  (They did not have the luxury of computers and software).  The same oscillating behavior is observed in economic systems and as a result the Lotka-Volterra equations played a role in the development of economic theory.  It is the understanding of the <em>dynamics</em> of oscillation that is useful here—much more so than the numbers.  This understanding enables us identify the structures that cause this behavior.  When we observe oscillatory behavior in the future, our mental models will be more accurate and we’ll be better equipped to make an informed analysis.</p>
<p><strong>Better Mental Models, Simulated More Reliably</strong></p>
<p>Our world is only going to become more complex and we need good thinkers helping to make it a better place for everyone.  Sharing systems models with people is a great way to increase their understanding of feedback loops and system dynamics.  Building models yourself is even more valuable, because you’ll learn a lot about your own mental models and improve them.  Practicing at this will help you to construct better mental models, simulate them more reliably, and communicate them more effectively.  Improving these skills will help inform what actions you take in the face of complex, systemic problems.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=oOWMTtTBoNU:HZxVtuP58Ks:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=oOWMTtTBoNU:HZxVtuP58Ks:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=oOWMTtTBoNU:HZxVtuP58Ks:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=oOWMTtTBoNU:HZxVtuP58Ks:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=oOWMTtTBoNU:HZxVtuP58Ks:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=oOWMTtTBoNU:HZxVtuP58Ks:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/oOWMTtTBoNU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/systems-thinking/what-are-mental-models-part-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/systems-thinking/what-are-mental-models-part-2/</feedburner:origLink></item>
		<item>
		<title>2010 isee User Conference “Making Connections”</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/MbGSXDCptSU/</link>
		<comments>http://blog.iseesystems.com/news-announcements/2010_isee_user_conference/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 16:01:22 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[News & Announcements]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[violence]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3252</guid>
		<description><![CDATA[
Earlier this month, we had the pleasure of hosting the 2010 isee User Conference in Providence, Rhode Island. During this amazing gathering of isee customers, partners, friends, and iThink/STELLA enthusiasts, we learned about the important work that is being done applying Systems Thinking to solve real-world problems, shared ideas, and made connections with one another.
For [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3302" class="wp-caption alignright" style="width: 235px"><img class="size-full wp-image-3302 " title="Welcome Reception" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/Reception.jpg" alt="" width="225" height="202" /><p class="wp-caption-text">Connecting at the welcome reception</p></div>
<p>Earlier this month, we had the pleasure of hosting the 2010 isee User Conference in Providence, Rhode Island. During this amazing gathering of isee customers, partners, friends, and <em>iThink</em>/STELLA enthusiasts, we learned about the important work that is being done applying Systems Thinking to solve real-world problems, shared ideas, and made connections with one another.</p>
<p class="mceTemp">For two and a half days, I saw participants immersed in keynote presentations, breakout sessions, and hands-on workshops.  As important, however, were the less structured round table discussions, poster presentations, and social activities.  Everywhere I looked, folks were engaged in conversation and connecting with one another.  Even better, I knew that many of those connections would continue to be fostered and developed well after the conference was over.</p>
<p class="mceTemp"><strong>Presentations and models</strong></p>
<p class="mceTemp"><a href="http://www.iseesystems.com/community/UserConference/ConferencePresentations2010.aspx" target="_blank">Conference presentations and models </a>are now available on the isee systems web site.  Please download and share these materials with your colleagues and friends. You&#8217;ll get a glimpse into the wide range of fields where Systems Thinking is being used to better understand the interconnections of dynamic systems including business, healthcare, education, energy, and the environment.  You can also download and listen to audio recordings of the keynote presentations:</p>
<ul>
<li><a href="http://www.iseesystems.com/community/UserConference/ConferencePresentations2010.aspx#biz_tsunami" target="_blank">Business Tsunami: Surviving Disruptive Change in a Networked World <br />
</a>by Henk Akkermans</li>
<li><a href="http://www.iseesystems.com/community/UserConference/ConferencePresentations2010.aspx#interdependent_world" target="_blank">Education for an Interdependent World: Developing Systems Citizens<br />
</a>by Peter Senge</li>
<li><a href="http://www.iseesystems.com/community/UserConference/ConferencePresentations2010.aspx#learning_and_teaching" target="_blank">Learning and Teaching System Dynamics Modeling: A 20 Year Journey<br />
</a>by Diana Fisher</li>
<li><a href="http://www.iseesystems.com/community/UserConference/ConferencePresentations2010.aspx#generating_understanding" target="_blank">Generating Understanding of Social, Economic and Climate Dynamics in Interaction</a><br />
by Matthias Ruth </li>
<li><a href="http://www.iseesystems.com/community/UserConference/ConferencePresentations2010.aspx#youth_violence" target="_blank">The Youth Violence Systems Project<br />
</a>by Steve Peterson and Paul Bothwell </li>
</ul>
<p><strong>A Conference Highlight</strong></p>
<div id="attachment_3281" class="wp-caption alignleft" style="width: 130px"><img class="size-full wp-image-3281 " title="Steve Peterson" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/Steve1.jpg" alt="" width="120" height="139" /><p class="wp-caption-text">Steve Peterson describes the modeling process</p></div>
<p>One of the highlights of the conference for me was listening to the story that Steve Peterson and Paul Bothwell told about using Systems Thinking and dynamic modeling to help communities in high-violence Boston neighborhoods.</p>
<p>In their work with the Youth Violence Systems Project, there were two objectives:</p>
<ul style="padding-left: 140px;">
<li>Improve understanding of community-based violence in Boston </li>
<li>Help communities strategize and achieve sustained reductions in violence </li>
</ul>
<p>What made this project different from other attempts to research and solve the youth violence problem in Boston was that it engaged &#8220;the community&#8221; in the development of the model.  From the get go, they included youth in the modeling process.  Gang members, in particular, turned out to be an important missing link to understanding violence and the dynamic system behavior.  Both Steve and Paul described some of the harsher realities of working with young people whose family members and friends were victims of violence.  The modeling process actually helped community members to articulate the &#8220;slippery slope dynamics&#8221; that move youth through the different stocks to gang involvement.  If you have a chance, I highly recommend listening to the audio recording!</p>
<p><strong>Staying Connected</strong></p>
<div id="attachment_3285" class="wp-caption alignright" style="width: 290px"><img class="size-medium wp-image-3285 " title="Round Table Discussion" src="http://blog.iseesystems.com/wp-content/uploads/2010/10/round-table-280x176.jpg" alt="" width="280" height="176" /><p class="wp-caption-text">Participants engaged in round table discussions</p></div>
<p>Having time to interact with other participants was an important part of the conference experience.  It was wonderful to see the excitement and energy that is created when Systems Thinkers have an opportunity to connect with one another.  The cross fertilization that occurs so naturally between field experts, modelers, and educators was inspiring.</p>
<p>Please stay connected and let us know if there are other ways in which we can foster our growing community of STELLA and <em>iThink</em> modelers!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=MbGSXDCptSU:Ng1DaBILuEs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=MbGSXDCptSU:Ng1DaBILuEs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=MbGSXDCptSU:Ng1DaBILuEs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=MbGSXDCptSU:Ng1DaBILuEs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=MbGSXDCptSU:Ng1DaBILuEs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=MbGSXDCptSU:Ng1DaBILuEs:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/MbGSXDCptSU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/2010_isee_user_conference/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/2010_isee_user_conference/</feedburner:origLink></item>
		<item>
		<title>System Dynamics Conference in Seoul</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/wg0T8cWlyFc/</link>
		<comments>http://blog.iseesystems.com/news-announcements/system-dynamics-conference-in-seoul/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 11:00:42 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[News & Announcements]]></category>
		<category><![CDATA[Barry Richmond]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[scholarship]]></category>
		<category><![CDATA[System Dynamics Society]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3187</guid>
		<description><![CDATA[isee systems is proud to have sponsored the 28th International System Dynamics Conference held in Seoul, Korea last month.  We especially enjoyed supporting the conference again this year through the Barry Richmond Scholarship Award.   The scholarship was established in 2007 to honor and continue the legacy of our company founder, Barry Richmond.  Barry was devoted to helping others become better “Systems Citizens”.  It was his [...]]]></description>
			<content:encoded><![CDATA[<div class="mceTemp"><a href="http://www.systemdynamics.org/index.html" target="_blank"><img class="alignright" style="margin: 13px;" title="System Dynamics Society" src="http://blog.iseesystems.com/wp-content/uploads/2009/07/SDSLogoJP.gif" alt="" width="98" height="68" /></a>isee systems is proud to have sponsored the <a href="http://www.systemdynamics.org/conferences/2010/index.htm" target="_blank">28th International System Dynamics Conference</a> held in Seoul, Korea last month.  We especially enjoyed supporting the conference again this year through the Barry Richmond Scholarship Award.   The scholarship was established in 2007 to honor and continue the legacy of our company founder, Barry Richmond.  Barry was devoted to helping others become better “Systems Citizens”.  It was his mission to make Systems Thinking and System Dynamics accessible to people of all ages and in all fields.</div>
<div class="mceTemp">Presenting the scholarship in Seoul was isee&#8217;s longtime consulting and training partner, Mark Heffernan.  Mark had this story to tell about Barry:</div>
<blockquote><p>I first met Barry 20 years ago, when I had to trudge through the snow to get to his small wooden office.  I was building a discrete event model using STELLA and I wanted him to make some changes to the software so I didn’t have these “egg timer“ structures everywhere.  Barry was horrified with what I had done with his software and said words to the effect that it&#8217;s not meant for that, it was created to spread the gospel of System Dynamics.  Despite the fact that I was a civil engineer, he encouraged me to take a look at SD.  Such was his passion and conviction that 20 years later I’m still attending this conference.&#8221;</p></blockquote>
<div id="attachment_3191" class="wp-caption alignright" style="width: 235px"><a href="http://blog.iseesystems.com/wp-content/uploads/2010/08/boys-and-SDS-085.jpg"><img class="size-medium wp-image-3191 " title="2010 Barry Richmond Scholarship Award" src="http://blog.iseesystems.com/wp-content/uploads/2010/08/boys-and-SDS-085-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">Tony Phuah accepts Scholarship Award from Mark Heffernan</p></div>
<p>Through most of his career Barry saw education as the key to spreading Systems Thinking.  As a teacher and a mentor, he dedicated much of his time to developing tools and methodologies for learning.  It is fitting therefore that this year&#8217;s award was presented to Tony Phuah, a Master’s student in System Dynamics at the University of Bergen.</p>
<p>Tony’s work includes an experimental study that explores the question: <em>How can we improve people’s understanding of basic stock and flow behavior?</em>  His experiment uses two different methods for teaching stock and flow behavior — the standard method (using graphical integration) and a method he calls “running total”.  Tony presented his paper at a parallel session during the conference and it can be downloaded by <a href="http://www.systemdynamics.org/conferences/2010/proceed/papers/P1099.pdf" target="_blank">clicking here</a>.  Although the results of his study favor traditional methods for teaching stock and flow behavior, we all should be encouraged by the work being done to try to improve Systems Thinking education and communication.  In Tony’s own words:</p>
<blockquote><p>Speeding up ‘Systems Thinkers beget more Systems Thinkers’ growth will make us one step closer to Barry Richmond’s vision of a systems citizen world.”</p></blockquote>
<p>Congratulations Tony and thank you Mark for helping us to celebrate Barry&#8217;s passion!</p>
<p>Applications for the 2011 Barry Richmond Scholarship Award will be available on the <a href="http://www.iseesystems.com/community/news/RichmondScholarship.aspx" target="_blank">isee systems</a> and <a href="http://www.systemdynamics.org/" target="_blank">System Dynamics Society</a> web sites.  Check those sites for more information.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wg0T8cWlyFc:DlbmpEP15OM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wg0T8cWlyFc:DlbmpEP15OM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=wg0T8cWlyFc:DlbmpEP15OM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wg0T8cWlyFc:DlbmpEP15OM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wg0T8cWlyFc:DlbmpEP15OM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=wg0T8cWlyFc:DlbmpEP15OM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/wg0T8cWlyFc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/system-dynamics-conference-in-seoul/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/system-dynamics-conference-in-seoul/</feedburner:origLink></item>
		<item>
		<title>What is Delta Time (DT)?</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/Zm9KepvN4O0/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/why-dt-matters/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 17:13:15 +0000</pubDate>
		<dc:creator>Nat Pierson</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[DT]]></category>
		<category><![CDATA[iThink/STELLA]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=3004</guid>
		<description><![CDATA[After reading Karim Chichakly’s recent post on Integration Methods and DT, I was reminded that delta time (DT) has always been a tricky modeling concept for me to grasp.   Beginning modelers don&#8217;t usually need to think about changing DT since STELLA and iThink set it to a useful default value of 0.25.   But once you [...]]]></description>
			<content:encoded><![CDATA[<p>After reading Karim Chichakly’s recent <a href="http://blog.iseesystems.com/modeling-tips/integration-methods-and-dt/" target="_blank">post on Integration Methods and DT</a>, I was reminded that delta time (DT) has always been a tricky modeling concept for me to grasp.   Beginning modelers don&#8217;t usually need to think about changing DT since STELLA and <em>iThink</em> set it to a useful default value of 0.25.   But once you progress with your modeling skills, you might consider the advantages and risks of playing with DT.</p>
<div id="attachment_3162" class="wp-caption alignright" style="width: 300px"><img class="size-full wp-image-3162 " title="RunSpecs" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/RunSpecs1.png" alt="" width="290" height="218" /><p class="wp-caption-text">The DT setting is found in the Run Specs menu.</p></div>
<p>By definition, system dynamics models run over time and DT controls how frequently calculations are applied each unit of time.  Think of it this way, if your model was a movie, then DT would indicate the time interval between still frames in the strip of movie film.  For a simulation over a period of 12 hours, a DT of 1/4 (0.25) would give you a single frame every 15 minutes.  Lowering the DT to 1/60 would give a frame every minute.   The smaller the DT is, the higher the calculation frequency (1/DT).</p>
<p><strong>Beware of the Extremes</strong></p>
<p>A common tendency for modelers is to set the calculation frequency too high.  Without really thinking too hard about it, more data seems to imply a higher quality model &#8211; just like more frames in movie film make for smoother motion.  If your model calculates more data for every time unit, its behavior will begin to resemble the behavior of a smoothly continuous system.  But a higher frequency of calculations can greatly slow down your model’s run performance and more data does not directly translate to a better simulation.</p>
<p><strong>Beware of Discrete Event Models</strong></p>
<p>Another situation where DT can often lead to unexpected behavior is with models that depend on discrete events.   My eyes were opened to this when I attended one of isee’s <a href="http://www.iseesystems.com/store/Training/InterDynamicModelingIthink.aspx" target="_blank">workshops </a>taught by Corey Peck and Steve Peterson of Lexidyne LLC.</p>
<p>One of the workshop exercises involved a simple model where the DT is set to the default 0.25, the inflow is set to a constant 10, and the outflow is set to flush out the stock’s contents as soon as it reaches 50.   This is how the model&#8217;s structure and equations looked:</p>
<p style="text-align: center;"><img class="size-full wp-image-3007 aligncenter" style="margin-top: -10px; margin-bottom: -30px;" title="Discrete Model" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/discrete_model1.png" alt="Discrete Model" width="369" height="102" /></p>
<p style="text-align: center;"><span style="font-size: 9pt; font-family: Courier, monospace;">Stock = 0</span></p>
<p style="text-align: center;"><span style="font-size: 9pt; font-family: Courier, monospace;">inflow = 10</span></p>
<p style="text-align: center;"><span style="font-size: 9pt; font-family: Courier, monospace;">outflow = IF Stock &gt;= 50 THEN 50 ELSE 0</span></p>
<p>I would have expected the value of the stock to plunge to zero after it reached or exceeded 50, but this graph shows the resulting odd saw-tooth pattern.</p>
<p style="text-align: center;"><img class="size-full wp-image-3006 aligncenter" title="Sawtooth Model Behavior" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/discrete_graph.png" alt="Sawtooth Model Behavior" width="422" height="244" /></p>
<p>The model ends up behaving like a skipping scratched record, in a perpetual state of never progressing far enough to reach the goal of zero.  (<a href="http://blog.iseesystems.com/wp-content/uploads/2010/08/DeltaTime.itm">Click here</a> to download the model.)</p>
<p><p><img class="size-full wp-image-3081    alignleft" style="margin-top: 10px; margin-bottom: 10px;" title="Table Output" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/dt_discrete_table.png" alt="" width="210" height="236" /></p>
</p>
<p>What is happening in the model?  In the first DT after the stock’s value reaches exactly 50, the outflow sets itself to 50 in order to remove the contents from the stock. So far so good, but now the DT gotcha begins to occur.   Since the outflow works over time, its value is always per time.  To get the quantity of material that actually flowed, you must multiply the outflow value (or rate) by how long the material was flowing.  When DT is set to 0.25,  the material flows 0.25 time units each DT.  Hence, the quantity of material removed from the stock is 50*0.25 = 12.50.</p>
<p>Suddenly we are in a situation where only 12.50 has been removed from the stock but the stock’s value is now less than 50.  Since the stock is no longer greater than or equal to 50, the outflow sets itself back to 0 and never actually flushes out the full contents of the stock. </p>
<p>So what do we do?  One solution to this problem would be to use the PULSE built-in to remove the full value from the stock.   Here&#8217;s what the equation for the outflow would look like:</p>
<p style="text-align: center;"><span style="font-size: 9pt; font-family: Courier, monospace;">outflow = IF Stock &gt;= 50 THEN PULSE(Stock) ELSE 0</span></p>
<p><em>(Note: This option will only work using Euler&#8217;s integration method.)</em></p>
<p style="text-align: left;"><strong>Further Reading</strong></p>
<p>STELLA and <em>iThink</em> have great help documentation on DT.  The general <a href="http://www.iseesystems.com/Helpv9/Content/DT/How_does_DT_work_.htm" target="_blank">introduction</a> provides a good explanation of how DT works. The more advanced <a href="http://www.iseesystems.com/Helpv9/Content/DT/DT_Special_Care.htm" target="_blank">DT Situations Requiring Special Care</a> section focuses more on artifactual delays and the discrete model issues mentioned in this post.  Delta time and resulting model behaviors are reminders that system dynamics models run over time, but they achieve this by applying numerous discrete calculations in order to simulate the smooth behavior of actual systems.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Zm9KepvN4O0:F3hBQXXeKx8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Zm9KepvN4O0:F3hBQXXeKx8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=Zm9KepvN4O0:F3hBQXXeKx8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Zm9KepvN4O0:F3hBQXXeKx8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Zm9KepvN4O0:F3hBQXXeKx8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=Zm9KepvN4O0:F3hBQXXeKx8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/Zm9KepvN4O0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/why-dt-matters/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/why-dt-matters/</feedburner:origLink></item>
		<item>
		<title>Integration Methods and DT</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/moKNCa1pUPA/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/integration-methods-and-dt/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 20:51:56 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[DT]]></category>
		<category><![CDATA[Euler]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[RK4]]></category>
		<category><![CDATA[Runge-Kutta]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2982</guid>
		<description><![CDATA[The simulation engine underlying STELLA® and iThink® uses numerical integration.  Numerical integration differs from the integration you may have learned in Calculus in that it uses algorithms that approximate the solution to the integration.  The two approximations currently available are known as Euler’s method and the Runge-Kutta method.  All algorithms require a finite value for [...]]]></description>
			<content:encoded><![CDATA[<p>The simulation engine underlying STELLA® and <em>iThink</em>® uses numerical integration.  Numerical integration differs from the integration you may have learned in Calculus in that it uses algorithms that approximate the solution to the integration.  The two approximations currently available are known as Euler’s method and the Runge-Kutta method.  All algorithms require a finite value for DT, the integration step-size, rather than the infinitesimally small value used in Calculus.  On the surface, it may seem that the smaller DT is, the more accurate the results, but this turns out not to be true.</p>
<p><strong>Compound Interest:  Euler’s Method over Runge-Kutta</strong></p>
<p>To introduce Euler’s method, let’s take a look at the simple problem of compound interest.  If we have $100 that we invest at 10% (or 0.1) compounded annually, we can calculate the interest after <em>N</em> years by adding in the interest each year and recalculating:</p>
<p style="padding-left: 30px;">1st year:  <em>interest</em> = $1000 × 0.1 = $100; <em>Balance</em> = 1000 + 100 = $1100 <br />
 2nd year: <em>interest</em> = $1100 × 0.1 = $110; <em>Balance</em> = 1100 + 110 = $1210 <br />
 3rd year:  <em>interest</em> = $1210 × 0.1 = $121; <em>Balance</em> = 1210 + 121 = $1331</p>
<p>And so on up to year <em>N</em>.  We have just seen the essence of how Euler’s method works.  It calculates the new change in the stock for this DT (in this case, <em>interest</em>) and then adds that to the previous value of the stock (<em>Balance</em>) to get the new value of the stock.  In this example, DT = 1 year.</p>
<p>By noticing we always add the existing balance in, we can instead just multiply the previous year’s balance by 1 + <em>rate</em> = 1 + 0.1 = 1.1:</p>
<p style="padding-left: 30px;">1st year:  <em>Balance</em> = $1000 × 1.1 = $1100 <br />
 2nd year: <em>Balance</em> = $1100 × 1.1 = $1210 <br />
 3rd year:  <em>Balance</em> = $1210 × 1.1 = $1331</p>
<p>And so on up to year <em>N. </em>We can further generalize by noticing we are multiplying by 1.1 <em>N</em> times and thus arrive at the compound interest formula:</p>
<p style="padding-left: 30px;"><em>Balance</em> = <em>Initial_Balance</em>*(1 + <em>rate</em>)^<em>N</em></p>
<p>Checking this, we find our <em>Balance</em> at the end of year 3 is 1000*1.1^3 = $1331.  In the general case of the formula, <em>rate</em> is the fractional interest rate per compounding period and <em>N</em> is the number of compounding periods (an integer).  In our example, the compounding period is one year, so <em>rate</em> is the annual fractional interest rate and <em>N</em> is the number of years.  However, if interest is compounded quarterly (four times a year), the interest rate has to be adjusted to a per quarter rate by dividing by 4 (so <em>rate</em> = 0.1/4 = 0.025) and <em>N</em> must be expressed as the number of quarters (<em>N</em> = number of years*4 = 3*4 = 12 for the end of year 3).  We can use this formula in our model to test the accuracy of Euler’s method.  Note that for quarterly compounding, we would set DT = 1/4 = 0.25 years.</p>
<p>To explore the differences between Euler’s and Runge-Kutta, the following structure will be used for all of the examples in this post.  This structure models the compound interest problem outlined above.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image8.png" border="0" alt="image" width="186" height="180" /></p>
<p>The equations change for each example and can be seen in the individual model files (accessed by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/07/Integration-Methods.zip"></a><a href="http://blog.iseesystems.com/wp-content/uploads/2010/07/Integration-Methods1.zip">here</a>).  For this example, the actual value is calculated using the compound interest formula, <em>Initial_Balance</em>*(1 + <em>rate</em>)^<em>TIME</em>.  The approximated value is calculated by integrating <em>rate</em>*<em>Approx_Balance</em> (into <em>Approx_Balance</em>).</p>
<p>In addition to the actual and approximate values, three errors are also calculated across the model run:  the maximum absolute error, the maximum relative error, and the root-mean-squared error (RMSE).  The absolute error is:</p>
<p style="padding-left: 30px;">ABS(<em>Actual_Balance</em> – <em>Approx_Balance</em>)</p>
<p>The relative error is:</p>
<p style="padding-left: 30px;"><em>absolute_error</em>/ABS(<em>Actual_Balance</em>)</p>
<p>and is usually expressed as a percentage.  The RMSE is found by averaging the values of the absolute error squared, and then taking the square root of that average.</p>
<p><span id="more-2982"></span>Running this model under Euler’s method leads to the behavior shown in the following graph.  As expected, Euler’s method tracks this function perfectly.  All three errors are essentially zero.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image9.png" border="0" alt="image" width="454" height="251" /></p>
<p>However, changing the integration method to Runge-Kutta 4 (known as RK4) does not give a good approximation (see graph below).  The relative error is 1.6%, the absolute error is $56 and the RMSE is $26, all rather large for RK4.  DT must be reduced a factor of 32, to 1/128, in order to bring the errors below 0.1% (0.001).</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image10.png" border="0" alt="image" width="454" height="251" /></p>
<p><strong>Continuous Compounding:  Runge-Kutta over Euler’s Method</strong></p>
<p>Our friend Euler was a busy mathematician.  He is also famous for discovering the formula for continuously compounding interest.  If you increase the frequency of compounding from once a year to once a month to once a day (what most banks do now and called “daily compounding”) to once a second and so on until you are compounding every infinitesimally small instant (which should remind you of the dt from Calculus), the compound interest formula becomes:</p>
<p style="padding-left: 30px;"><em>Balance</em> = <em>Initial_Balance</em>*<em>e</em>^(<em>rate</em>*<em>time</em>)</p>
<p>where <em>e</em> ≈ 2.718281828 is Euler’s number, <em>rate</em> is the annual fractional interest rate, and <em>time</em> is the number of years that have passed (a real number).  Using continuous compounding, our <em>Balance</em> at the end of year 3 is 1000*<em>e</em>^(0.1*3) ≈ $1350, $8 more than with annual compounding.</p>
<p>This function is known as <em>continuous</em> function, which, in layman’s terms, means its value smoothly changes with time, rather than experiencing jumps or gaps.  [Note the compound interest formula given in the first section is <em>not</em> continuous; since <em>N</em> must be an integer, this function only exists at integer values.]  While Euler’s method does not depend on a function being continuous, it does introduce an error proportional to DT when trying to integrate these equations (called <em>truncation error</em>).  Thus, the only way to reduce these errors is to reduce DT, requiring more computations.  Unfortunately, this only works up to a point.  Below that point, errors increase again due to <em>round-off error</em> in the computer’s finite representation of floating point values.</p>
<p>The graph below shows the effect of using Euler’s method to calculate continuously compounding interest.  Note it does not follow the actual curve, calculated with the EXP function, very well.  The relative error is 1.6%, the maximum error is $56, and the RMSE is $25.  If we cut DT in half, to 1/8, the errors also cut in half as we expect, to 0.8%, $29, and $13, respectively.  This will continue until DT reaches the limit of the machine’s representation, which is approximately 1/2048 for single-precision floating point numbers and 1/67,108,864 (1/2^26) for double-precision floating point numbers (note STELLA and <em>iThink</em> always use double-precision).  After this point, errors will increase again.  Note these values are theoretical; your mileage will vary.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image11.png" border="0" alt="image" width="454" height="251" /></p>
<p>There is a better solution than reducing DT.  The Runge-Kutta integration method assumes a continuous function and takes steps to follow such a function very closely.  Because it uses a weighted average of values across each DT-interval, it does not perform well with <em>discontinuous</em> functions, i.e., functions that have gaps or sharp changes, such as that produced with the STEP and PULSE functions (however, STELLA and <em>iThink</em> compensate for this so that these functions still perform correctly under Runge-Kutta).  Leaving DT at 0.25 and changing the integration method to RK4 produces the following graph, with the largest relative error being 0.0077%, the largest absolute error being $0.27 and the RMSE being $0.14.  To achieve this level of accuracy with Euler’s method, it is necessary to reduce DT to 1/1024.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image12.png" border="0" alt="image" width="454" height="251" /></p>
<p>The number after the RK is the order of the integration method.  Typically, but not always, higher-order methods will give smaller errors.  Euler’s method is a first-order method and RK4 is a fourth-order method.  Note, however, that Euler’s outperformed RK4 in the first example.  STELLA and <em>iThink</em> also provide a second-order method, Runge-Kutta 2 (RK2), which is a compromise between Euler’s and RK4; with the speed of today’s computers, it is no longer necessary to use and remains only for backward-compatibility.</p>
<p><strong>Oscillations:  The Case for Runge-Kutta</strong></p>
<p>Oscillations represent one area where RK4 really shines.  The following graph shows the results of using Euler’s method to integrate the sine function with DT = 0.25.  Notice it misses horribly.  The resulting function is clearly outside the range of the sine function [-1, 1].  The maximum absolute error is 0.25 and the RMSE is 0.15.  However, the maximum relative error is 340%!</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image5.png" border="0" alt="image" width="454" height="251" /></p>
<p>Reducing DT by a factor of 128 to 1/512 helps somewhat (below).  The maximum absolute error reduces to 0.0020 and the RMSE to 0.0012, but the maximum relative error only decreases to 200%.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image6.png" border="0" alt="image" width="454" height="251" /></p>
<p>On the other hand, if we leave DT = 0.25 and change the integration method to RK4, it calculates the sine function quite well, with a maximum absolute error of only 0.0078 and an RMSE of 0.0045.  The maximum relative error is also acceptable at 2.2%.  Cutting DT in half to 1/8 reduces the maximum relative error an order of magnitude, to 0.34%.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/07/image7.png" border="0" alt="image" width="454" height="251" /></p>
<p><strong>Guidelines for DT</strong></p>
<p>DT should initially be set to one-half of the smallest time constant in your model.  This minimal value, according to Nyquist’s Sampling Theorem, avoids undersampling your values.  [Undersampling means looking at your signal so infrequently that you distort the signal, or, more to the point, do not have enough information to reconstruct it.  For example, in the sine wave above, evaluating it every π will make you think you have a straight line at the origin, since all you will see are the zeroes.]</p>
<p>Finding the smallest time constant can be tricky.  They often appear in compounding or in draining processes.  For example, in the first two examples, the interest rate is the reciprocal of the time constant (it always appears in the divisor).  Thus, the time constant for this compounding formula is 10.  This suggests DT could start at 5, but there are other constraints.  In fact, we wish to compound every quarter, so DT must be set to 1/4.</p>
<p>Run the model with your chosen DT.  Then cut DT in half and try again.  If the results change, cut DT in half and try again.  If they do not change, the previously chosen DT is likely fine.</p>
<p>Whenever possible, choose a value of DT that is a power of 2 (1, 1/2, 1/4, 1/8, 1/16, … or 1, 0.5, 0.25, 0.125, 0.0625, …).  This is because most other fractions, for example 1/10, are repeating decimals in base-2 and so cannot be accurately represented on the computer.  Obviously if your problem requires you to use a DT of 1/7, in weekly simulations for example, do so, but understand that adding 1/7 seven times will not equal one.  There are also other cases where you might need to use a DT that is not a power of 2.  If your smallest time constant is 1/52, for example, choosing the closest power of 2 to (1/52)/2 = 1/104, which is 1/128, would be disastrous.  Your time constant would then be 1/64 sometimes and 1/32 other times, not at all close to what you need.  Make sure you can represent your smallest time constants as a multiple of whatever DT you choose.</p>
<p><strong>Guidelines for Integration Method</strong></p>
<p>Changing DT is often not sufficient.  Your system may exhibit instabilities or wild oscillations caused by the errors in Euler’s method.  It is therefore also wise to always run the model in Euler’s and then in RK4.  If there is a difference, stick with RK4 and proceed to test DT.</p>
<p>Euler’s method is noticeably faster than RK4 and works fine in many situations.  A system that has linear relationships and uses exponential functions that are <em>not</em> based on Euler’s number will work fine using Euler’s method.  For qualitative results, Euler’s will work well in a broad variety of situations.  Euler’s is also the preferred method when you are using discontinuous or discrete functions (but note the discrete functions in STELLA and <em>iThink</em> are Runge-Kutta-aware and should work reasonably well under RK4).</p>
<p>Any continuous system that is based on exponential functions using Euler’s number as a base, and this includes trigonometric functions, oscillations, and logistic functions, will be better served by RK4.  In these cases, you should generally use this method from the start.</p>
<p>There is one additional type of system you may run into that neither of these methods will solve very well:  stiff systems.  In simple terms, a stiff system is one that has time constants of wildly different magnitudes, for example, 0.005 and 10,000.  The smaller time constant suggests a DT of 0.0025 which is far too small for the part of the system with a time constant of 10,000.  It is best to reframe your problem to avoid these situations when possible.  For example, when simulating such a system, the part of the system with a time constant of 10,000 can often be considered constant over a shorter period of interest.  Over long periods of interest, it is often possible to aggregate the behavior of the part of the system with the shorter time constant, using averages instead of exact values.</p>
<p><em>Note:  The integration method and DT are both set in the Run Specs, accessible from the Run menu.  Additional information can be found in the chapter on DT in the </em><a href="http://www.iseesystems.com/Helpv9/Content/DT/How_does_DT_work_.htm"><em>Technical Documentation</em></a><em>.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=moKNCa1pUPA:EjqXpGI4SDM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=moKNCa1pUPA:EjqXpGI4SDM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=moKNCa1pUPA:EjqXpGI4SDM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=moKNCa1pUPA:EjqXpGI4SDM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=moKNCa1pUPA:EjqXpGI4SDM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=moKNCa1pUPA:EjqXpGI4SDM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/moKNCa1pUPA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/integration-methods-and-dt/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/integration-methods-and-dt/</feedburner:origLink></item>
		<item>
		<title>Gulf Oil Leak: A Systems Thinking Perspective</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/PcYBgb3M3cY/</link>
		<comments>http://blog.iseesystems.com/systems-thinking/gulf-oil-leak/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 18:11:17 +0000</pubDate>
		<dc:creator>Chris Soderquist</dc:creator>
				<category><![CDATA[Systems Thinking]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[oil production]]></category>
		<category><![CDATA[peak oil]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2905</guid>
		<description><![CDATA[Editor&#8217;s note: This is a guest post by isee&#8217;s consulting &#38; training partner Chris Soderquist
It’s been a little over 10 weeks since the Deepwater Horizon oil rig explosion that has resulted in a constant flow of oil into the Gulf of Mexico.  Oil is now beginning to impact the economy of the Florida coast.  Some [...]]]></description>
			<content:encoded><![CDATA[<p><em>Editor&#8217;s note: This is a guest post by isee&#8217;s consulting &amp; <a href="http://www.iseesystems.com/store/Training/OnlineCourses.aspx">training</a> partner <a href="http://www.pontifexconsulting.com/" target="_blank">Chris Soderquist</a></em></p>
<p><img class="alignright size-full wp-image-2950" title="Oil on a Pensacola FL beach" src="http://blog.iseesystems.com/wp-content/uploads/2010/06/oil-pensacola-beach-sm.jpg" alt="Oil on a Pensacola FL beach" width="230" height="164" />It’s been a little over 10 weeks since the Deepwater Horizon oil rig explosion that has resulted in a constant flow of oil into the Gulf of Mexico.  Oil is now beginning to <a href="http://www.eturbonews.com/16602/study-oil-spill-going-ripple-throughout-floridas-economy" target="_blank">impact the economy of the Florida coast</a>.  Some estimate that the disaster could cost nearly 200,000 tourism jobs.   Efforts  to remove the impacts on the environment, including a <a href="http://www.cnn.com/video/#/video/us/2010/06/18/pkg.mattingly.save.the.cnn?iref=allsearch" target="_blank">massive rescue of manatees</a> could cost billions.  The ability to truly restore the environment to pre-April 20 conditions is beyond that of mere mortals. It is an event truly unprecedented.</p>
<p><strong>Who&#8217;s to Blame?</strong></p>
<p>The current media focus has centered on an activity I refer to as the <em>Find the Knucklehead Game</em>. The idea is that there must be someone out there to blame, tar and feather, and that if we just remove the idiot from the system we’ll never have this problem again. Finé. Complete. Case closed! (And there was great rejoicing…)</p>
<p>However, if we begin to apply the systems thinking paradigm, there’s another analysis that might suggest we are in a long-term trend that is still just ramping up – and that if we don’t take action soon the impact on the economy and environment may be much worse.</p>
<p><strong>A Systems Thinking Perspective</strong></p>
<p>Two of the skills required to practice systems thinking are Dynamic Thinking and 10,000 Meter Thinking. If we look at the history of oil extraction from the balcony, as a long-term trend over time, we see something that may be quite useful. Let’s apply a concept developed by <a href="http://scitizen.com/future-energies/charlie-hall-s-balloon-graph_a-14-1305.html" target="chart">Charles Hall (SUNY-College of Environmental Science and Forestry) called EROI</a> (&#8220;energy return on investment&#8221;).  EROI is the ratio between the energy we receive – to run our transportation system, heat our buildings, run electricity generators – and the amount of energy required to get the raw material out of the ground and process it into usable form. In the early 20th Century, oil was easy to extract. In many places it was just below the surface in the wide open fields. The EROI was 100:1 in 1930 – 100 units of energy received for 1 unit of energy extracting/processing. Since then there has been a marked decline, and as the United States passed peak oil production (the maximum production rate) in the early 1970s, and as we’ve begun importing most of our oil, the EROI for oil in the US is approximately 20:1.</p>
<div id="attachment_2925" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-2925  " title="Charles Hall's Energy Return on Investment Graph" src="http://blog.iseesystems.com/wp-content/uploads/2010/06/EROI_Graph.png" alt="Charles Hall's Energy Return on Investment Graph" width="500" height="259" /><p class="wp-caption-text">Charles Hall&#39;s Energy Return on Investment Graph</p></div>
<p>Why the marked decline? Because the purest, easiest to extract/process oil has likely been found and burned (leading to too much in our atmosphere, but that’s another point). We now need to go to more distant places (no longer fields) – offshore, into the Arctic – to find oil. Often the oil is no longer in purest form; converting the &#8220;oil goo&#8221; from the <a href="http://en.wikipedia.org/wiki/Oil_sands" target="_blank">tar sands in Alberta, Canada</a> is a prime example.</p>
<p><strong>Continuation of a Trend</strong></p>
<p>Using the systems thinking perspective, we may conclude that the &#8220;event&#8221; of Deepwater Horizon is an inevitable continuation of a trend (that includes the Exxon Valdez). And that the trend is likely to get worse as our need (thirst) for oil increases – which will occur as developing nations continue trying to catch up to the developed world, and as we hope for &#8220;economic recovery.&#8221;</p>
<p>This leads to several questions in my mind.</p>
<ol>
<li>If it’s true that the easiest to extract and process oil has been found and used, what’s this indicate about the risks we’ll incur as it requires increasing effort to get oil in the future? More deepwater drilling? Environmental degradation/damage to get oil like tar sands extracted?</li>
<li>How much oil really is left – how long will we continue to have this cheap resource?</li>
<li>Further, if we are facing increasing risks and costs for every unit of oil we acquire, when will that begin to have severe impacts on our economy (as the per unit cost of the stuff we love – iPods, cars, flying to Europe – increases, the profit margins of our globalized corporations will decrease)?</li>
<li>And when will we decide that we need to develop a way of living that is independent of this resource? To recover from our &#8220;addiction to oil.&#8221;</li>
</ol>
<p><strong>How Much Oil Is Left?</strong></p>
<p>I’ve developed and published an isee NetSim model that you may use to explore questions regarding how long the resource will last and the implications of the economy on that length. <a href="http://forio.com/simulate/simulation/pontifexconsult/how-much-oil-is-left/" target="simulation">You may explore it here</a>.</p>
<p style="text-align: center;"><a href="http://forio.com/simulate/simulation/pontifexconsult/how-much-oil-is-left/" target="simulation"><img class="size-full wp-image-2939 aligncenter" title="&quot;How Much Oil is Left?&quot; online simulation" src="http://blog.iseesystems.com/wp-content/uploads/2010/06/Pushing-the-Limits-Sim.jpg" alt="&quot;How Much Oil is Left?&quot; online simulation" width="540" height="351" /></a></p>
<p>Ultimately, we need to stop the <em>Find the Knucklehead Game</em> and instead recognize that it is we – in the collective sense – that are responsible. Not just for the recent disaster, but the long-term trend and its consequences (including the unintended consequences of climate change). The system is behaving as it is designed. It is up to us to design a different system!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=PcYBgb3M3cY:Yn5O9v2O-BQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=PcYBgb3M3cY:Yn5O9v2O-BQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=PcYBgb3M3cY:Yn5O9v2O-BQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=PcYBgb3M3cY:Yn5O9v2O-BQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=PcYBgb3M3cY:Yn5O9v2O-BQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=PcYBgb3M3cY:Yn5O9v2O-BQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/PcYBgb3M3cY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/systems-thinking/gulf-oil-leak/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/systems-thinking/gulf-oil-leak/</feedburner:origLink></item>
		<item>
		<title>“Tracing Connections” book honors Barry Richmond</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/mFnJc-7FM3A/</link>
		<comments>http://blog.iseesystems.com/news-announcements/tracing-connections-book-tributes-barry-richmond/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 14:00:59 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[News & Announcements]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Systems Thinking]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2830</guid>
		<description><![CDATA[Barry Richmond was the founder of isee systems and pioneer in the field of systems thinking.  When his life was cut short by a sudden fatal heart attack, Barry was in the prime of his career and the systems thinking community experienced a collective sense of loss and grief.
Barry was fully engaged in bringing systems thinking to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-2868" style="margin-right: 10px;" title="Barry Richmond" src="http://blog.iseesystems.com/wp-content/uploads/2010/06/barryBlog.jpg" alt="Barry Richmond" width="114" height="116" />Barry Richmond was the founder of isee systems and pioneer in the field of systems thinking.  When his life was cut short by a sudden fatal heart attack, Barry was in the prime of his career and the systems thinking community experienced a collective sense of loss and grief.</p>
<p>Barry was fully engaged in bringing systems thinking to everyone.  He saw how this powerful way of thinking could help people to better understand society’s most pressing issues and make the world a better place.  Barry saw K-12 education as one of the keys to creating a better world.  He spoke often about educating young people to become ”systems citizens” and preparing students for the complex problems they would have to face.  Much of his time was devoted to training teachers to incorporate systems thinking into curricula and pedagogy.</p>
<p>A couple of years ago, Barry&#8217;s daughter, Joy Richmond, began spearheading an effort to create a book in honor of her father.  Joy invited a group of us together to talk about some ideas for the book and come up with a plan to make it happen. The first idea we discussed was writing the book that Barry himself had intended to write.  Barry left plenty of notes and even had a working title for a book about systems thinking called <em>Traces</em>.   We all agreed that it would be much too daunting to try to write a book <em>for</em> Barry, so we decided to have a book written in tribute <em>to</em> Barry by friends and colleagues who share his passion for systems thinking.</p>
<p>Steve Peterson, Corey Peck and Khalid Saeed were all part of that original discussion and eager to contribute by writing a chapter.  Each had a story to tell about using Systems Thinking in their work and why it is so important in an increasingly interdependent world.  What better way to honor Barry than writing a book that helped get the word out about systems thinking!</p>
<p><strong>Shaping the Book</strong></p>
<p>Lees Stuntz, Executive Director of the Creative Learning Exchange, was also in on the discussion and excited about asking educators influenced by Barry to contribute their stories. Before we invited other authors however, we wanted to provide some guidelines that would tie the book together and give it a more meaningful context.  I think it was Steve who came up with the idea to use the critical thinking skills first outlined in an article Barry wrote for the <em>System Dynamics Review</em> titled &#8220;Systems Thinking: Critical Thinking Skills for the 1990s and Beyond&#8221;.   We agreed the systems thinking skills would provide a good foundation for the book and each author could then choose a few of the thinking skills to emphasize when telling their story.</p>
<p><a href="http://www.iseesystems.com/store/TracingConnections/default.aspx" target="_blank"><img class="size-full wp-image-2841 alignright" title="Tracing Connections" src="http://blog.iseesystems.com/wp-content/uploads/2010/05/tracingconnections_ftcover_medium.jpg" alt="Tracing Connections" width="160" height="202" /></a>Countless hours of writing, editing, and designing later, <em>Tracing Connections: Voices of Systems Thinkers</em> was born.  Published in partnership with the Creative Learning Exchange, proceeds from the book will fund scholarships that offer learning opportunities for educators to use systems thinking and system dynamics in K-12 education.  The response so far has been excellent and we are pleased to be funding scholarships to help educators attend the <a href="http://www.clexchange.org/conference/cle_2010conference_registrationinfo.html" target="_blank">ST/DM Conference</a> later this month.</p>
<p><strong>A Chapter for Everyone</strong></p>
<p>What is especially nice about the book, is that you don&#8217;t need to read each chapter in sequence.  Since the authors&#8217; experiences range from education and research to business and public policy, there&#8217;s sure to be a chapter for everyone.  Click on the link below to view the chapter by Frank Draper titled &#8220;Teaching by Wondering Around: Learning About the World Naturally&#8221;.  Frank tells a wonderful story about how Systems Thinking has transformed the way he teaches science to high school students.  After reading it, you&#8217;re going to wish you could enroll in one of Frank&#8217;s field science classes at Catalina Foothills school district in Tuscon, Arizona.</p>
<p><a href="http://blog.iseesystems.com/wp-content/uploads/2010/06/TracingConnections_ch03_FrankDraperTeachingbyWonderingAround.pdf" target="_blank"><img class="alignnone" style="margin-left: 10px; margin-right: 10px;" title="PDF" src="http://www.iseesystems.com/images/icons/pdf.gif" alt="" width="12" height="11" />Teaching by Wondering Around</a> by Frank Draper</p>
<p><img class="alignleft" style="margin-left: 10px; margin-right: 10px;" title="STELLA model file" src="http://www.iseesystems.com/images/icons/STELLA_icon.gif" alt="" width="14" height="18" /></p>
<p><a href="http://blog.iseesystems.com/wp-content/uploads/2010/06/AnimalTemperature.zip">Animal Temperature Model</a></p>
<p><img style="margin-left: 10px; margin-right: 10px;" title="PDF" src="http://www.iseesystems.com/images/icons/pdf.gif" alt="" width="12" height="11" /><a href="http://www.iseesystems.com/store/TracingConnections/Tracing_Connections_TOC.pdf" target="_blank">Table of Contents</a> with full list of chapter titles and authors</p>
<p>For more information or to order a copy of <em>Tracing Connections</em>, visit <a href="http://www.iseesystems.com/tc" target="_blank">http://www.iseesystems.com/tc</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=mFnJc-7FM3A:2WfRXwIIxCY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=mFnJc-7FM3A:2WfRXwIIxCY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=mFnJc-7FM3A:2WfRXwIIxCY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=mFnJc-7FM3A:2WfRXwIIxCY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=mFnJc-7FM3A:2WfRXwIIxCY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=mFnJc-7FM3A:2WfRXwIIxCY:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/mFnJc-7FM3A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/tracing-connections-book-tributes-barry-richmond/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/tracing-connections-book-tributes-barry-richmond/</feedburner:origLink></item>
		<item>
		<title>Steady-State Initialization of Conveyors</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/CAy3LhmnLpE/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/steady-state-init-of-conveyors/#comments</comments>
		<pubDate>Tue, 25 May 2010 20:55:22 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[conveyor]]></category>
		<category><![CDATA[leakage]]></category>
		<category><![CDATA[steady-state]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2827</guid>
		<description><![CDATA[Conveyors are useful model elements for representing pipelines or processes that take a certain amount of time to complete.  However, adding a leakage flow to a conveyor can make it difficult to initialize a model in steady-state.  The following discussion will explain how to initialize conveyors with leakage in steady-state.  Please refer to the model [...]]]></description>
			<content:encoded><![CDATA[<p>Conveyors are useful model elements for representing pipelines or processes that take a certain amount of time to complete.  However, adding a leakage flow to a conveyor can make it difficult to initialize a model in steady-state.  The following discussion will explain how to initialize conveyors with leakage in steady-state.  Please refer to the model structure below while reading this discussion.</p>
<p><img style="border-width: 0px; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/05/image.png" border="0" alt="image" width="347" height="153" /></p>
<p>These additional variables will be also used:</p>
<p style="padding-left: 30px;"><em>transit_time</em> = TRANSTIME(<em>conveyor</em>) <br />
<em>conveyor_length</em> = <em>transit_time</em>/DT <br />
<em>leakage_fraction</em> = the user-specified leakage fraction</p>
<p><strong>Linear Leakage</strong></p>
<p>The default leakage is linear in behavior.  The total amount that leaks across the length of the conveyor is directly proportional to the inflowing amount.  The leakage fraction is the constant of proportionality.  Thus, the <em>fraction</em> of inflowing material that makes it to the conveyor&#8217;s outflow is exactly</p>
<p style="padding-left: 30px;">1 – <em>leakage_fraction</em></p>
<p>Given the sample model structure above, to achieve equilibrium, <em>conveyor_outflow</em> must equal <em>outflow</em>.  For this to happen, we need to set the <em>inflow</em> as follows:</p>
<p style="padding-left: 30px;"><em>inflow</em> = <em>outflow</em>/(1 – <em>leakage_fraction</em>)</p>
<p>The conveyor’s steady-state value is then:</p>
<p style="padding-left: 30px;"><em>conveyor</em> = <em>transit_time</em>*<em>inflow</em> – (<em>conveyor_length</em> – 1)*<em>leakage</em>*DT/2</p>
<p>where the initial value of <em>leakage</em> is:</p>
<p style="padding-left: 30px;"><em>leakage</em> = <em>leakage_fraction</em>*<em>inflow</em></p>
<p>This must be calculated outside the program and entered as a constant into the conveyor as conveyors cannot be given equations (they can, however, be set to a the value of a single converter, but you must be careful how you calculate this to avoid circularity).</p>
<p><strong>Exponential Leakage</strong></p>
<p>Optionally, leakage can be made exponential.  The amount that leaks each DT is proportional to the amount remaining in the conveyor.  In this case, the leakage fraction is the fraction that leaks each unit of time so, for long conveyors, a lot of material can leak away.  Given the transit time, the <em>fraction</em> of inflowing material that makes it to the conveyor&#8217;s outflow is approximately</p>
<p style="padding-left: 30px;">1 &#8211; (1 &#8211; <em>leakage_fraction</em>)^<em>transit_time</em></p>
<p>Given the sample model structure above, to achieve equilibrium, <em>conveyor_outflow</em> must equal <em>outflow</em>.  For this to happen, we need to set the <em>inflow</em> as follows:</p>
<p style="padding-left: 30px;"><em>per_dt_no_leak</em> = 1 – <em>leakage_fraction</em>*DT <br />
<em>inflow</em> = <em>outflow</em>/(<em>per_dt_no_leak</em>^<em>conveyor_length</em>)</p>
<p>For steady-state, the conveyor itself must then be set as follows:</p>
<p style="padding-left: 30px;"><em>conveyor</em> = (<em>inflow</em>*DT)*(1 – <em>per_dt_no_leak</em>^<em>conveyor_length</em>)/(1 – <em>per_dt_no_leak</em>)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CAy3LhmnLpE:G39BMupMq1A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CAy3LhmnLpE:G39BMupMq1A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=CAy3LhmnLpE:G39BMupMq1A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CAy3LhmnLpE:G39BMupMq1A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CAy3LhmnLpE:G39BMupMq1A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=CAy3LhmnLpE:G39BMupMq1A:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/CAy3LhmnLpE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/steady-state-init-of-conveyors/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/steady-state-init-of-conveyors/</feedburner:origLink></item>
		<item>
		<title>What’s New in isee NetSim 1.1?</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/wbafTZIs9mI/</link>
		<comments>http://blog.iseesystems.com/isee-netsim/isee-netsim-1-1/#comments</comments>
		<pubDate>Mon, 17 May 2010 14:52:59 +0000</pubDate>
		<dc:creator>Jeremy Merritt</dc:creator>
				<category><![CDATA[isee NetSim]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[Forio]]></category>
		<category><![CDATA[GID]]></category>
		<category><![CDATA[graphical function]]></category>
		<category><![CDATA[graphical input device]]></category>
		<category><![CDATA[netsim]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2803</guid>
		<description><![CDATA[Last week, we released version 1.1 of the isee NetSim software.  isee NetSim enables iThink and STELLA users to publish their models online so anyone can run them in a web browser.  Version 1.1 introduces several new features.  In this post I will share a couple of those that I am most excited about.
Forio Simulate—Like [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.iseesystems.com/softwares/NetSim11Features.aspx" target="_blank"><img style="margin: 0px 0px 0px 10px; display: inline; border: 0pt none;" title="isee NetSim 1.1" src="http://blog.iseesystems.com/wp-content/uploads/2010/05/netsim_app_icon1.png" border="0" alt="netsim_app_icon" width="131" height="135" align="right" /></a>Last week, we released version 1.1 of the isee NetSim software.  isee NetSim enables <em>iThink</em> and STELLA users to publish their models online so anyone can run them in a web browser.  Version 1.1 introduces <a title="Go to the isee NetSim 1.1 product page" href="http://www.iseesystems.com/softwares/NetSim11Features.aspx" target="_blank">several new features</a>.  In this post I will share a couple of those that I am most excited about.</p>
<p><strong>Forio Simulate—Like YouTube for Simulations</strong></p>
<p>Since the debut of the isee NetSim software we have collaborated with <a href="forio.com" target="_blank">Forio Business Simulations</a> to provide free hosting for models published online.  Last year, I saw a demo of Forio’s new simulation service, <a href="http://forio.com/simulate/" target="_blank">Forio Simulate</a>, in the early development stage.  It was awesome.  I couldn’t believe it—they added all of the Web 2.0 features I’d been dying for, and a slick, fun to use interface.  I knew we had to make isee NetSim work with it.</p>
<p>The new service is social by nature—it features keyword tagging, ratings, comments and built-in model sharing.  It’s like YouTube for simulations.  You can browse simulations and games that others have created, find similar ones by keyword tags, and embed simulations on blogs or web pages.  So you don’t have to be actively publishing your own simulations, or even be a modeler to get a lot of value from the site.  In fact, it’s a great way to introduce people to modeling and simulation.  Just post a link!</p>
<p>And if you <em>are</em> a modeler, you can get even more out of the service.  Most of the simulations published to Forio Simulate allow you to download or copy the underlying model that powers it.  Here at isee, we’ve uploaded the original <em>iThink</em> and STELLA models used to create all of our sample isee NetSim simulations.  That way <em>anyone</em> can run the simulation online in a browser and download the source model to dig into if they want more.  Take a look at isee systems’ models published on Simulate by clicking on the screen shot below.</p>
<div id="attachment_2818" class="wp-caption alignnone" style="width: 565px"><a href="http://forio.com/simulate/netsim/"><img class="size-full wp-image-2818" title="Sim Homepage" src="http://blog.iseesystems.com/wp-content/uploads/2010/05/Sim-Homepage.png" alt="" width="555" height="468" /></a><p class="wp-caption-text">The simulation overview page allows anyone to download the source model, rate, comment, add tags and embed the simulation on other web pages.</p></div>
<p>Anyone can use free hosting on Forio Simulate if the model contains 400 or fewer equations and is shared with other users of the service.  If you want to protect the model, resell a simulation, use a custom URL, etc., you can sign up for a premium hosting plan.  It’s easy to select a hosting plan when you upload your model with isee NetSim.</p>
<p><strong>Graphical Input Device</strong></p>
<div class="wp-caption alignright" style="width: 131px"><img style="margin: 0px 0px 10px 10px; display: inline; border: 0pt none;" title="Graphical Input Device" src="http://blog.iseesystems.com/wp-content/uploads/2010/05/GID.png" border="0" alt="Graphical Input Device, or, GID" width="121" height="128" align="right" /><p class="wp-caption-text">Use the GID to change the price assumption</p></div>
<p>One of the most requested features for isee NetSim has been the graphical input device, or “GID” as we like to call it.  GIDs offer a simple way to allow people running your simulation to change the model assumptions.  Often it’s easier to sketch a curve of the behavior of a variable than to input numbers directly.</p>
<p>For example, the model below is a generic renewable-resource model that enables you to experiment with yield and price of a renewable-resource via GIDs.  The model is from our “<a href="http://www.iseesystems.com/store/training/Thinkinginsystems/default.aspx" target="_blank">Thinking in Systems</a>” online course.  I published the model to Forio Simulate and then embedded it here.  Click the “Review model” link to take a brief tour of the model.</p>
<p>You can change the price elasticity and “yield per unit capital” curve by first clicking on one of the GIDs.  A window will pop open that displays the details of the curve.  Click and drag within the grid to draw a new curve.  Press “Ok” to apply the changes.  Take a few moments to play around with the model below.</p>
<p>[<em>Editor's note:  If you cannot see the embedded model below because you are reading this post in a feed reader or email, please <a href="http://blog.iseesystems.com/isee-netsim/isee-netsim-1-1/">visit the post page here</a></em>]</p>
<p>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="542" height="470" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://forio.com/simulate/resources/swf/sim-frame.swf?userPath=jeremyx&amp;simPath=renewable-resource&amp;simID=jeremyx/renewable_resource&amp;netSimColor=0xC1E0FF&amp;serviceRoot=http://forio.com/service2/&amp;initialPage=Page 1&amp;displayForioBadge=false&amp;displayiseeBadge=false&amp;displayShareThisNetSim=false&amp;swfURL=null&amp;embed=true" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="542" height="470" src="http://forio.com/simulate/resources/swf/sim-frame.swf?userPath=jeremyx&amp;simPath=renewable-resource&amp;simID=jeremyx/renewable_resource&amp;netSimColor=0xC1E0FF&amp;serviceRoot=http://forio.com/service2/&amp;initialPage=Page 1&amp;displayForioBadge=false&amp;displayiseeBadge=false&amp;displayShareThisNetSim=false&amp;swfURL=null&amp;embed=true" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</p>
<p>What I find interesting after playing with this model is what happens when you start to push the yield up.  At some point the efficiency improves to the point where the renewable-resource gets completely wiped out.  Sometimes the inefficiencies of harvesting a resource can be a good thing—it gives the resource time to “catch up”.  This may be a useful point to consider when thinking about sustainable systems.  What happens when you make the resource inexpensive?   <br class="spacer_" /><strong> <br />
 A GID for the web</strong></p>
<p>You may have noticed that the GID within isee NetSim does not allow a user to type numbers to define data points or change the x and y ranges.  We decided this simpler version of the GID was a good fit for models published to the web and would cover most use cases.  The GID allows users to easily change the assumptions by sketching a behavior pattern and not really concern themselves with the data.</p>
<p>If you’ve been dying to publish models with GIDs online, now is your chance.  While you&#8217;re at it, check out Forio Simulate and start contributing to the growing simulation community.  You can <a href="http://www.iseesystems.com/community/downloads/Netsim/NetsimTrial.aspx" target="_blank">download a trial of isee NetSim 1.1 here</a>.  If you already own isee NetSim, visit your “<a href="http://www.iseesystems.com/community/DownloadMySoftware.aspx" target="_blank">My Software</a>” page on the isee systems website to download the upgrade.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wbafTZIs9mI:WObnHvvflF4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wbafTZIs9mI:WObnHvvflF4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=wbafTZIs9mI:WObnHvvflF4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wbafTZIs9mI:WObnHvvflF4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wbafTZIs9mI:WObnHvvflF4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=wbafTZIs9mI:WObnHvvflF4:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/wbafTZIs9mI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/isee-netsim/isee-netsim-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/isee-netsim/isee-netsim-1-1/</feedburner:origLink></item>
		<item>
		<title>We have met an ally and he is Storytelling</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/7whQ0boblAM/</link>
		<comments>http://blog.iseesystems.com/systems-thinking/we-have-met-an-ally-and-he-is-storytelling/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 20:56:47 +0000</pubDate>
		<dc:creator>Chris Soderquist</dc:creator>
				<category><![CDATA[Systems Thinking]]></category>
		<category><![CDATA[COIN]]></category>
		<category><![CDATA[counter-insurgency]]></category>
		<category><![CDATA[New York Times]]></category>
		<category><![CDATA[Powerpoint]]></category>
		<category><![CDATA[storytelling]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2760</guid>
		<description><![CDATA[Editor&#8217;s note: This is a guest post by isee&#8217;s consulting &#38; training partner Chris Soderquist
Background
 The April 26, 2010 article in the New York Times titled “We have met the enemy and he is PowerPoint” has created quite a stir. It is particularly telling that three days after its publication, it is the most emailed [...]]]></description>
			<content:encoded><![CDATA[<p><em>Editor&#8217;s note: This is a guest post by isee&#8217;s consulting &amp; <a href="http://www.iseesystems.com/store/Training/OnlineCourses.aspx">training</a> partner <a href="http://www.pontifexconsulting.com/" target="_blank">Chris Soderquist</a></em></p>
<p><strong>Background</strong></p>
<p><img style="margin: 0px 0px 0px 10px; display: inline; border: 0px;" title="iStock_000010849371XSmall" src="http://blog.iseesystems.com/wp-content/uploads/2010/04/iStock_000010849371XSmall.jpg" border="0" alt="iStock_000010849371XSmall" width="240" height="170" align="right" /> The April 26, 2010 article in the New York Times titled “<a href="http://www.nytimes.com/2010/04/27/world/27powerpoint.html" target="_blank">We have met the enemy and he is PowerPoint</a>” has created quite a stir. It is particularly telling that three days after its publication, it is the most emailed article on their website! The most interesting aspect of the article to me, as a system dynamics practitioner, is the publication of a <em>system dynamics map </em>on the US Counter-insurgency strategy as <em>the example</em> (i.e. visual sound bite) demonstrating <em>why PowerPoint is so problematic</em>. This is actually a poor example of the author’s point, since it is not PowerPoint, and because the map was shown out of context.</p>
<p>Although the diagram doesn’t portray how or why PowerPoint is misused, it does demonstrate some reasons why system dynamics maps and models are not more broadly used to communicate systemic issues. In this post, I will describe what issues a PowerPoint paradigm creates and how system dynamics can address those issues; more importantly, I will show why the STELLA and <em>iThink</em> software have features such as storytelling and web publishing in order to help people develop deeper, more systemic understanding of the complex problems humanity must address.</p>
<p><strong>The Problem with PowerPoint</strong></p>
<p>I don’t have anything against using PowerPoint. Those of you who have taken one of my webinars for isee systems know that I rely heavily on the software in my instruction and facilitation. I think there are inherent software limitations that combine with a cultural paradigm, that lead to its misuse. Currently, I see it promotes the following approaches to problem solving:</p>
<ol>
<li>Narrow focus in space and time – due to limited screen real estate </li>
<li>Passive absorption of information of data – lazy learning, not experiential </li>
<li>Simplistic bullet point thinking – linear thinking, focusing on factors in a non-operational way </li>
</ol>
<p><img style="margin: 0px 0px 0px 10px; display: inline; border: 0px;" title="iStock_000005896614XSmall" src="http://blog.iseesystems.com/wp-content/uploads/2010/04/iStock_000005896614XSmall.jpg" border="0" alt="iStock_000005896614XSmall" width="240" height="159" align="right" /> This all creates confusion between reducing complication and simplifying complexity. The world is a dynamically complex place, and thank goodness for that! Picture the blandness of a world that is simple, where everyone thought and acted the same, where you always knew exactly what would happen because it was so simple. Boring! On the other hand, dynamic complexity makes it difficult to resolve what currently appear to be intractable problems, such as environmental degradation, poverty, global economic turmoil. Living in a dynamically complex world necessitates finding ways to simplify complexity to its essence, making manageable and useful mental models.</p>
<p>That’s why people are drawn to lists (e.g., bullet point and linear thinking), believing it simplifies complexity; just give me a list of what’s wrong or what to do! What lists do well is remove complication, but they also remove the dynamic essence of reality, often making mental models that are less than useful.</p>
<p><strong>System dynamics</strong></p>
<p>System dynamics is an approach to building understanding that expands boundaries, looks at the world as comprised of feedback loops, uses a visual language that promotes operational thinking, and creates active learning. It’s a terrific approach to counter the many problems inherent in applying PowerPoint paradigm!</p>
<p>All of the above helps develop useful mental models that are both simplified and still capture the essence of reality. However, taking a map out of context – even one much simpler than shown in the article – and including it in PowerPoint will not create understanding, only confusion! When I’m in front of a group and have enough time, I will always draw it up on a flipchart or board, to bring the group along with its unfolding. The rapid feedback creates an engaged group capable of learning. But in the absence of time, or if you need to communicate to people “on their own time” you will find features in STELLA and <em>iThink</em> invaluable!</p>
<p>I’ve published a map to the web with the isee NetSim software to demonstrate how you can use system dynamics to create online experiential learning labs. Take a tour of the map below to see how the stock/flow language and Storytelling can overcome the passive absorption of bulletized information that PowerPoint facilitates.</p>
<p><strong>Click on the image below to make sense of the map</strong><strong> </strong></p>
<p><a href="http://forio.com/simulate/simulation/pontifexconsult/response-to-ny-times" target="_blank"><img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="Launch the story of COIN dynamics" src="http://blog.iseesystems.com/wp-content/uploads/2010/04/COINSmall1.png" border="0" alt="Launch the story of COIN dynamics" width="552" height="425" /></a></p>
<p>Another interesting perspective from Linda Booth Sweeney on the New York Times article <a href="http://lindaboothsweeney.net/blog/?p=172." target="_blank">can be found on her blog</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7whQ0boblAM:ZP7iRSUHMos:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7whQ0boblAM:ZP7iRSUHMos:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=7whQ0boblAM:ZP7iRSUHMos:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7whQ0boblAM:ZP7iRSUHMos:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7whQ0boblAM:ZP7iRSUHMos:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=7whQ0boblAM:ZP7iRSUHMos:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/7whQ0boblAM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/systems-thinking/we-have-met-an-ally-and-he-is-storytelling/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/systems-thinking/we-have-met-an-ally-and-he-is-storytelling/</feedburner:origLink></item>
		<item>
		<title>Converting a Sector-based Model to Modules</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/KcBYqugLZ00/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/converting-sectors-to-modules/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 08:17:36 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[modules]]></category>
		<category><![CDATA[sectors]]></category>
		<category><![CDATA[Version 9.1.2]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2736</guid>
		<description><![CDATA[I generally do not use modules to build very small models (only a couple of stocks and flows), which may then lead me to use sectors as the model grows because they are very convenient.  By the time I have three sectors, though, it starts to become clear that I should have used modules.  I [...]]]></description>
			<content:encoded><![CDATA[<p>I generally do not use modules to build very small models (only a couple of stocks and flows), which may then lead me to use sectors as the model grows because they are very convenient.  By the time I have three sectors, though, it starts to become clear that I should have used modules.  I will then need to convert my sector-based model into a module-based model.  Historically, I also have a number of sector-based models that are crying to be module-based.</p>
<p>Converting from sectors to modules is not very difficult:</p>
<ol>
<li>Make sure there are no connections or flows between sectors.  Replace any of these with ghosts in the target sector.</li>
<li>In a new model, create one module for every sector.</li>
<li>Copy and paste the structure from each sector into its corresponding module.</li>
<li>Connect the modules:  At this point, the model structure has been rearranged into modules, but none of the modules are connected.  The ghosts that were in the sectors became real entities when they were pasted into the modules.  Go back to identify all of these connections and reconnect them in the module-based model.</li>
</ol>
<p><strong>Stepping Through a Sample Model</strong></p>
<p>Let’s walk through an example.  A small sector-based model is shown below (and is available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/03/Population1.itm">here</a>).</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Sectors" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image.png" border="0" alt="image" width="403" height="393" /></p>
<p>This model violates what I would call good sector etiquette:  there are connectors that run between the sectors.  This is often useful in a small model such as this because it makes the feedback loops visible.  However, in a larger model, this can lead to problems such as crossed connections and difficulty in maintaining the model because sectors cannot be easily moved.</p>
<p><strong> </strong><span id="more-2736"></span><strong>Eliminating Cross-Sector Connections</strong></p>
<p>To convert this sector-based model to modules, it is first necessary to remove these cross-sector connections.  This is done with the ghost tool.  The stock <em>Population</em> needs to be ghosted and placed in the <em>Resources Sector</em> and the stock <em>Natural Resources</em> needs to be ghosted and placed in the <em>Population Sector</em>.  The end result is shown below.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Sectors with Ghosts" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image1.png" border="0" alt="image" width="388" height="437" /></p>
<p><strong>Creating the Modules</strong></p>
<p>We are now ready to create, in a new model, one module for each sector, using the Module tool.  The result is shown below.  Although you could manually draw the connections between these modules, we will let the software create the connections for us.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Modules" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image2.png" border="0" alt="image" width="73" height="145" /></p>
<p>Each module needs to be associated with its own model file.  This is done by double-clicking on each module and choosing “Create Model&#8230;”.  Double-click <em>Population</em>, choose “Create Model…”, and name the model file “Population”.  Repeat for <em>Natural Resources</em>, but name the model file “Natural Resources”.</p>
<p><strong>Pasting Structure into the Modules</strong></p>
<p>It is now a simple matter to paste the structure from each sector into each module.  Using the selection tool in the sector frame, select all of the structure in the <em>Population Sector</em> and copy it by choosing Edit-&gt;Copy.  Open the <em>Population</em> module in the new model and paste in the structure by choosing Edit-&gt;Paste.  The module contents will appear as shown below.  Note that <em>Natural Resources</em> is no longer a ghost; there is no connection to the other module.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Population module" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image3.png" border="0" alt="image" width="337" height="196" /></p>
<p>Repeat this process with the <em>Resources Sector</em> and the <em>Natural Resources</em> module.  The module contents will appear as shown below.  Note that <em>Population</em> is no longer a ghost.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Natural Resources module" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image4.png" border="0" alt="image" width="305" height="191" /></p>
<p><strong>Connecting the Modules</strong></p>
<p>All that remains is to connect the modules.  Inside the <em>Population</em> module, the stock <em>Natural Resources</em> needs to be replaced with a ghost of the real stock.  Inside the <em>Natural Resources</em> stock, the <em>Population</em> stock must be replaced with a ghost.</p>
<p>There are two ways to do this:  manually or semi-automatically with the Ghost tool.  I tend to use the Ghost tool most of the time.  [The documentation chapter “Working with Module Inputs and Outputs” (available by clicking <a href="http://www.iseesystems.com/Helpv9/Content/Modules/Intro_to_Module_Inputs_and_Outputs.htm">here</a>) explains how to forge these connections manually.]</p>
<p>To connect the modules, first go into the <em>Natural Resources</em> module and select the <em>Natural Resources</em> stock with the Ghost tool.  Go up one level and then down into the <em>Population</em> module.  The cursor should still be a stock.  Click next to the existing <em>Natural Resources</em> stock to deposit the ghost.  Run a connector from the ghost to <em>resources\person</em> (as the stock does) and then delete the stock.  Drag the ghost over to approximately where the stock was.  Open <em>resources\person</em> and press “OK”.  An error will appear and “Natural_Resources” will be selected.  This happens because <em>Natural Resources</em> is no longer connected to <em>resources\person</em>.  Click on the ghost’s name (<em>Natural Resources.Natural Resources</em>) in the “Required Inputs” list and press “OK”.  The <em>Population</em> module is now properly connected to the <em>Natural Resources</em> module.</p>
<p>Repeat this process to connect a ghost of the real <em>Population</em> stock to the <em>Natural Resources</em> module.  After finishing, the <em>Population</em> module contents appears as shown below.  Note that <em>Population</em> has a double border to signify it is providing its value to another module.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Population module connected" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image5.png" border="0" alt="image" width="337" height="209" /></p>
<p>The contents of the <em>Natural Resources</em> module appears as shown below.  Note the double border around the <em>Natural Resources</em> stock, signifying that it is providing its value to another module.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Natural Resources module connected" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image6.png" border="0" alt="image" width="333" height="191" /></p>
<p>Finally, returning to the top-level, we see that the software automatically created the required connections between the modules.  Below, the connections have been embellished with their polarity to make the balancing loop obvious.  [The final model is available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/03/Population3.zip">here</a>.]</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Modules connected" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image7.png" border="0" alt="image" width="91" height="145" /></p>
<p><strong>A Cautionary Tale</strong></p>
<p>This mechanical process for converting a sector-based model to a module-based model is very appealing due to its simplicity.  It works very well with models that have a small number of sectors (up to about five), but will fall apart beyond that.</p>
<p>Last summer, I helped Khalid Saeed (<a href="http://www.wpi.edu/academics/Depts/SSPS/People/kqs.html" target="_blank">Worcestor Polytechnic Institute</a>) convert a sector-based model of Jay Forrester’s Urban Dynamics model to modules.  A direct translation using the above process led to the following top-level diagram:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Urban Dynamics - all on one level" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image8.png" border="0" alt="image" width="260" height="239" />It should be clear that everything is connected to almost everything else.  There is no way to rearrange this diagram to clear up this mess.  For a short time, I flirted with the idea of module ghosts as a solution, but it does not take too long to see that ghosts cannot solve this problem either (indeed, they make it worse).</p>
<p>Recently, I decided to follow my own advice on module hierarchy (see <a href="http://blog.iseesystems.com/stories-from-the-field/building-health-care-model-hierarchically/">this post</a>).  I also remembered the famous article “The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information” by G.A. Miller (1956).  It explains that we cannot keep more than five to nine things simultaneously in our heads, depending on the person.  So I may be able to absorb the meaning of a diagram with seven modules, but someone else may only be able to understand one with five modules.  For this reason, we should strive to keep the number of modules in a diagram below seven (which also may help explain why the above method works well for a small number of sectors).</p>
<p>Rearranging the Urban Dynamics model into three levels, I was able to simplify the top-level of the diagram to the following, which shows all of the important high-level feedback loops:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="Urban Dynamics - top-level of three levels" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image9.png" border="0" alt="image" width="259" height="275" /></p>
<p>There are also lower-level feedback loops within each of these modules.  The one within w<em>orkforce</em> is just as complicated:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="workforce module (2nd level of Urban Dynamics)" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image10.png" border="0" alt="image" width="363" height="249" /></p>
<p>The model logic rests within these second-level modules.  For example, the module <em>underemployed mobility</em> contains the following logic:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="underemployed mobility module (bottom-level of Urban Dynamics)" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/image11.png" border="0" alt="image" width="481" height="342" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KcBYqugLZ00:hBAN8lNZKCg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KcBYqugLZ00:hBAN8lNZKCg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=KcBYqugLZ00:hBAN8lNZKCg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KcBYqugLZ00:hBAN8lNZKCg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KcBYqugLZ00:hBAN8lNZKCg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=KcBYqugLZ00:hBAN8lNZKCg:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/KcBYqugLZ00" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/converting-sectors-to-modules/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/converting-sectors-to-modules/</feedburner:origLink></item>
		<item>
		<title>What are “Mental Models”?</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/h33xW5vhdFE/</link>
		<comments>http://blog.iseesystems.com/systems-thinking/what-are-mental-models/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 14:00:16 +0000</pubDate>
		<dc:creator>Jeremy Merritt</dc:creator>
				<category><![CDATA[Systems Thinking]]></category>
		<category><![CDATA[crisis]]></category>
		<category><![CDATA[market dynamics]]></category>
		<category><![CDATA[mental model]]></category>
		<category><![CDATA[price]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2690</guid>
		<description><![CDATA[Editor&#8217;s note: This is part one of a two part series on Systems Thinking and mental models
In writing and teaching people about Systems Thinking, we often refer to “mental models”.  For some people, this comes as a bit of a surprise, because the context usually involves building models with the iThink or STELLA software.  They [...]]]></description>
			<content:encoded><![CDATA[<p><em>Editor&#8217;s note: This is part one of a two part series on Systems Thinking and mental models</em></p>
<p>In writing and teaching people about Systems Thinking, we often refer to “mental models”.  For some people, this comes as a bit of a surprise, because the context usually involves building models with the <em>iThink</em> or STELLA software.  They don’t expect us to start talking metaphysically about thinking.  “Is this about philosophy or modeling software?” they may wonder.  The software is actually a tool to help construct, simulate and communicate mental models.</p>
<p>Let’s define the term <em>model</em>: A model is an abstraction or simplification of a system.  Models can assume many different forms – from a model volcano in a high school science fair to a sophisticated astrophysical model simulated using a supercomputer.  Models are simplified representations of a part of reality that we want to learn more about.  <a href="http://en.wikiquote.org/wiki/George_E._P._Box" target="_blank">George Box stated</a>: &#8220;Essentially, all models are wrong, but some are useful”.  They are <em>wrong</em> because they are simplifications and they can be <em>useful</em> because we can learn from them.</p>
<p>So, what is a “mental model&#8221;?  A mental model is a model that is constructed and simulated within a conscious mind.  To be “conscious” is to be <em>aware</em> of the world around you and yourself in relation to the world.  Let’s take a moment to think about how this process works operationally.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="Thinking about trees" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/iStock_000010896467XSmall.jpg" alt="Thinking about trees" width="427" height="284" border="0" /></p>
<p>Imagine that you are standing outside, looking at a tree.  What happens?  The lenses in your eyes focus light photons onto the retinas.  The photosensitive cells in your retinas respond by sending neural impulses to your brain.  Your brain processes these signals and forms an image of the tree inside your mind.</p>
<p>So at this point, we’ve only addressed the mechanisms by which you perceive the tree.  We have not addressed <em>understanding</em> what a tree is or considered changes over time.   We are dealing with visual information only.  There is nothing within this information that tells you what a tree actually <em>is</em>.</p>
<p>What makes the image of a tree in your minds click as an <em>actual</em> tree that exists right there in front of you?  This is where mental models kick in and you start to <em>think</em> about the tree.  The tree is actually a <em>concept</em> of something that exists in physical reality.  The “tree concept” is a model.  <em>Understanding</em> the concept of a tree requires more information than is available through sensory experience alone.  It’s built on past experiences and knowledge.</p>
<p>A tree is a plant.  It is a living thing that grows and changes appearance over time, often with the seasons.  Trees have root systems.  Trees use leaves for photosynthesis.  Wood comes from trees.  I can state these facts confidently because I have memories and knowledge of trees contained within my mental models.  Mental models contain knowledge and help us create new knowledge.</p>
<p>&nbsp;</p>
<p><span id="more-2690"></span></p>
<p>Take a look at these images for a few moments and then think about what is happening inside your mind as you look at them.</p>
<table style="width: 624px;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="184"><img style="display: inline; border-width: 0px;" title="Boy catching a ball" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/iStock_000006460951XSmall.jpg" alt="Boy catching a ball" width="162" height="242" border="0" /></td>
<td width="227"><img style="display: inline; border-width: 0px;" title="Blocks" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/iStock_000010372205XSmall.jpg" alt="Blocks" width="200" height="133" border="0" /></td>
<td valign="top" width="211"><img style="display: inline; border-width: 0px;" title="Toddler reaching for a hot stove" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/iStock_000005079030XSmall.jpg" alt="Toddler reaching for a hot stove" width="189" height="242" border="0" /></td>
</tr>
</tbody>
</table>
<p>My guess is that with each image you thought about what happens next.  If so, you were actually simulating a mental model forward in time.  The images don’t show you what happened next, but you can probably make a pretty good guess.  This guess is the result of simulating a mental model of what is depicted.  And, you can simulate <em>different</em> outcomes.  In the image on the right, I like to simulate a parent rushing into the scene and scooping up the child before he gets burned.</p>
<p>When we think about the boy catching the ball, the blocks knocking one another over, worrying about the toddler getting burned, we are applying knowledge that we hold in our minds to help simulate a mental model of what is depicted in the image.  This is all going on subconsciously, so we’re really not aware of it as it is happening.</p>
<p><strong>Thinking About Systems</strong></p>
<p>The human mind is very good at simulating mental models of our immediate physical reality.  Things get harder when we start thinking about abstract systems.</p>
<p>A market is a good example of an abstract system.  In a market system, price acts as a signal of aggregate demand for a commodity.  You can’t “see” a market like you can “see” a tree in front of you.  A market does not exists in a particular physical location.  A market is an abstract concept that exists in the collective minds of all who participate in it.  Even though a market does not exist physically, markets have an enormous impact on our lives nonetheless.</p>
<p>When the global economic crisis hit in late 2008, retailers began to struggle financially because consumer purchases declined rapidly.  People were worried about the economy and started saving money instead of spending it.  This started happening just before the holiday shopping season – a make-or-break period for many retailers.  So, in an effort to boost demand, retailers began dropping prices.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="consumer perspective" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/consumerperspective.png" alt="consumer perspective" width="359" height="196" border="0" /></p>
<p>This led to <a href="http://online.wsj.com/article/SB123981349936221635.html" target="_blank">price deflation</a> because consumers saw prices dropping rapidly and began delaying purchases as a result.  The outcome of simulating their mental model of the market informed their decision making: “I should wait to buy this because the price keeps dropping”.</p>
<p>This mental model paints a pretty picture for consumers over the short-term:  low prices in a down economy.  As the deflationary dynamics play out over the long term, the picture becomes bleak.  As prices spin downward, profits decline and businesses are forced to layoff workers or close up shop entirely.  As unemployment increases, consumers perception of the stability of the economy decreases and they spend even less.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="price" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/price4.png" alt="price" width="371" height="281" border="0" /></p>
<p>Economists and policy makers use sophisticated computer models to help them understand markets.  On the other hand, consumers use simple mental models when making purchasing decisions.  The more sophisticated models inform policy makers of the long term consequences of consumers cutting spending, so they react by trying to jump-start spending with stimulus programs.  In the US we’ve seen a few of these programs during 2009: the “Cash for Clunkers” rebate program, the First-Time Home Buyer Tax Credit, and the Social Security payroll tax cut.</p>
<p>Often, it is hard for us to define the optimal boundaries for a mental model.  We tend to have a narrow focus and act on short-term dynamics within our mental models.  For example, in the model above, our understanding changes when we expand the boundaries to include profits and layoffs.</p>
<p>However, we are not generally very good at mentally simulating complex systems with interdependencies, lots of variables, and delays.  This is where software steps in.  Using Systems Thinking software, we can transform our mental models into operational models that we can simulate more reliably using a computer.  This not only helps us create new knowledge and understanding, but helps us construct better mental models in the future.</p>
<p>We’ll explore the role of software in constructing, simulating and communicating mental models <a href="http://blog.iseesystems.com/systems-thinking/what-are-mental-models-part-2/">in part two of this series</a>.</p>
<p>&nbsp;</p>
<p><em>For more on using modeling and simulation to understand the economic crisis, see the <a href="http://www.iseesystems.com/store/UnderstandingEconomicCrisis/default.aspx">“Understanding the Economic Crisis” video presentation</a>.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=h33xW5vhdFE:cGG8t8ZF47U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=h33xW5vhdFE:cGG8t8ZF47U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=h33xW5vhdFE:cGG8t8ZF47U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=h33xW5vhdFE:cGG8t8ZF47U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=h33xW5vhdFE:cGG8t8ZF47U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=h33xW5vhdFE:cGG8t8ZF47U:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/h33xW5vhdFE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/systems-thinking/what-are-mental-models/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/systems-thinking/what-are-mental-models/</feedburner:origLink></item>
		<item>
		<title>Modeling the Economic Crisis</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/fICcFq5YRJU/</link>
		<comments>http://blog.iseesystems.com/systems-thinking/modeling-the-economic-crisis/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 19:10:43 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[Systems Thinking]]></category>
		<category><![CDATA[crisis]]></category>
		<category><![CDATA[economics]]></category>
		<category><![CDATA[housing]]></category>
		<category><![CDATA[paradox of thrift]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2632</guid>
		<description><![CDATA[I’m often asked by customers that are new to Systems Thinking, “How can this approach add value to conceptualizing and understanding common, everyday issues?”  The issues range from business design to environmental concerns to macroeconomic dynamics.  In response to this question, I can tell you from my personal experience, nothing beats seeing a skilled practitioner use [...]]]></description>
			<content:encoded><![CDATA[<p>I’m often asked by customers that are new to Systems Thinking, “How can this approach add value to conceptualizing and understanding common, everyday issues?”  The issues range from business design to environmental concerns to macroeconomic dynamics.  In response to this question, I can tell you from my personal experience, nothing beats seeing a skilled practitioner use our software tools and the Systems Thinking methodology to make sense out of a complex problem.</p>
<p>With this in mind, we collaborated with our consulting and training partner, <a title="Lexidyne LLC" href="http://www.lexidyne.com" target="_blank">Lexidyne LLC</a>, to create a new series of video-based presentations focused on common but often misunderstood problems that can be conceptualized, expanded, and then explored using Systems Thinking.  We recently released<em> </em>the first video in this series — <a href="http://www.iseesystems.com/store/UnderstandingEconomicCrisis/default.aspx" target="_blank"><em>Understanding the Economic Crisis</em></a> presented by Dr. Mark Paich.</p>
<p>Judging from its title, you might think <em>Understanding the Economic Crisis</em> presents a huge complex model of the macro economy.  To the contrary, dynamic modeling expert, Mark Paich, begins with a very simple model of something we <em>all</em> can relate to — the individual consumer.</p>
<div id="attachment_2639" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-2639 " title="Individual Consumer Balance Sheet" src="http://blog.iseesystems.com/wp-content/uploads/2010/03/BalanceSheet1.png" alt="" width="500" height="269" /><p class="wp-caption-text">Stock and flow map of an individual consumer&#39;s balance sheet</p></div>
<p>Mark expands upon the model and shows how a sudden drop in housing prices affects individual consumption.   As you might expect, when <em>Total Net Worth</em> falls, the individual responds by spending less.  When housing prices fall, home equity loans no longer provide the purchasing power for big ticket items like cars, vacation homes and big screen TVs.</p>
<p>The real surprise however, comes when Mark further expands the individual consumer model to include the economy as a whole.  When <em>everyone’s</em> net worth decreases at the same time a phenomena known as the “Paradox of Thrift” occurs. The paradox states that if everyone tries to save money during times of recession, total savings for the overall economy may fall.  The dynamics generated by adding elements of the macro economy to the model are indeed surprising.</p>
<p>Mark’s easily understood model leads to some real insights concerning the policy implications for an economic recovery.   It also provides a great example of how Systems Thinking can be used to deepen your understanding of a complex issue in order to make better decisions.  If you haven’t seen the video, I highly recommend it.  The following trailer highlights some of the key points in Mark’s presentation and will give you a taste of the full presentation.</p>
<p><span style="font-size: small;"><em>(If you cannot see the video below in your RSS reader, please <a href="http://blog.iseesystems.com/systems-thinking/modeling-the-economic-crisis/">visit the post page</a>)</em></span></p>
<p>
<object id="player1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="player1" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="flashvars" value="config=http://blog.iseesystems.com/wp-content/uploads/2010/03/config.xml" /><param name="src" value="http://blog.iseesystems.com/wp-content/plugins/player/player-licensed.swf" /><embed id="player1" type="application/x-shockwave-flash" width="600" height="360" src="http://blog.iseesystems.com/wp-content/plugins/player/player-licensed.swf" flashvars="config=http://blog.iseesystems.com/wp-content/uploads/2010/03/config.xml" allowscriptaccess="always" allowfullscreen="true" name="player1"></embed></object>
</p>
<p>For more information or to purchase <em>Understanding the Economic crisis</em>, click <a title="Understanding the Economic Crisis" href="http://www.iseesystems.com/store/UnderstandingEconomicCrisis/default.aspx" target="_blank">here</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fICcFq5YRJU:kZwy6ZcyW44:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fICcFq5YRJU:kZwy6ZcyW44:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=fICcFq5YRJU:kZwy6ZcyW44:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fICcFq5YRJU:kZwy6ZcyW44:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fICcFq5YRJU:kZwy6ZcyW44:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=fICcFq5YRJU:kZwy6ZcyW44:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/fICcFq5YRJU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/systems-thinking/modeling-the-economic-crisis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/systems-thinking/modeling-the-economic-crisis/</feedburner:origLink></item>
		<item>
		<title>Modeling Bass Diffusion with Rivalry</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/1O9tkdjOgNw/</link>
		<comments>http://blog.iseesystems.com/stella-ithink/bass-diffusion-with-rivalry/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 14:00:10 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[STELLA & iThink]]></category>
		<category><![CDATA[archetypes]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[Bass diffusion]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[market dynamics]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2608</guid>
		<description><![CDATA[This is the last of a three-part series on the Limits to Growth Archetype.  The first part can be accessed here and the second part here.
Last time, we explored the effects of Type 1 rivalry (rivalry between different companies in a developing market) on the Bass diffusion model by replicating the model structure.  This part [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the last of a three-part series on the Limits to Growth Archetype.  The first part can be accessed <a href="http://blog.iseesystems.com/stella-ithink/limits-to-growth/">here</a> and the second part <a href="http://blog.iseesystems.com/stella-ithink/bass-diffusion-model/">here</a>.</em></p>
<p>Last time, we explored the effects of Type 1 rivalry (rivalry between different companies in a developing market) on the Bass diffusion model by replicating the model structure.  This part will generalize this structure and add Type 2 rivalry (customers switching between brands).</p>
<p><strong>Bass Diffusion with Type 1 Rivalry</strong></p>
<p>To model the general case of an emerging market with multiple competitors, we can return to the original single company case and use arrays to add additional companies.  In this case, everything except <em>Potential Customers</em> needs to be arrayed, as shown below (and available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/02/developing-with-type-1-rivalry.itm">here</a>).</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb.png" border="0" alt="image" width="350" height="281" /></p>
<p>For this example, three companies will be competing for the pool of <em>Potential Customers</em>.  Each array has one-dimension, named <em>Company</em>, and that dimension has three elements, named <em>A</em>, <em>B</em>, and <em>C</em>, one for each company.  Although each different parameter, <em>wom multiplier</em>, <em>fraction gained per $K</em>, and <em>marketing spend in $K</em>, can be separately specified for each company, all three companies use the same values initially.  All three companies, however, do not enter the market at the same time.  Company <em>A</em> enters the market at the start of the simulation, company <em>B</em> enters six months later, and company <em>C</em> enters six months after that.</p>
<p>Recall that the marketing spend is the trigger for a company to start gaining customers.  Thus, the staggered market entrance can be modeled with the following equation for <em>marketing spend in $K</em>:</p>
<p style="padding-left: 30px;">STEP(10, STARTTIME + (ARRAYIDX() &#8211; 1)*6)</p>
<p>The <em>STEP</em> function is used to start the marketing spend for each company at the desired time.  The <em>ARRAYIDX</em> function returns the integer index of the array element, so it will be 1 for company <em>A</em>, 2 for company <em>B</em>, and 3 for company <em>C</em>.  Thus, the offsets from the start of the simulation for the launch of each company’s marketing campaign are 0, 6, and 12, respectively.</p>
<p>This leads to the following behavior:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb1.png" border="0" alt="image" width="473" height="263" /></p>
<p>Note that under these circumstances, the first company to enter the market retains a leadership position.  However, companies <em>B</em> and <em>C</em> could anticipate this and market more strongly.  What if company <em>B</em> spent 50% more and company <em>C</em> spent 100% more than company <em>A</em> on marketing that is similarly effective?  This could be modeling by once again changing the equation for <em>marketing spend in $K</em>, this time to:</p>
<p style="padding-left: 30px;">STEP(10 + (ARRAYIDX() &#8211; 1)*5, STARTTIME + (ARRAYIDX() &#8211; 1)*6)</p>
<p><span id="more-2608"></span>The effect in this case is quite different.  All three companies end up with approximately equal market shares.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb2.png" border="0" alt="image" width="473" height="263" /></p>
<p><strong>Bass Diffusion with Type 1 and Type 2 Rivalry</strong></p>
<p>Once a market is established, companies will also make an effort to win competitor’s customers away.  A previous <a href="http://blog.iseesystems.com/modeling-tips/array-methods-4/">post</a> showed how to model switching between brands using arrays.  Adding that structure to this model gives a model (available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/02/developing-with-types-1-2-rivalry.itm">here</a>) that implements both type 1 and type 2 rivalry.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb3.png" border="0" alt="image" width="472" height="306" /></p>
<p>The specific mechanism that convinces customers to switch brands is not explicitly modeled here so that the structure matches that in the earlier post.  Instead, this model uses constant switching rates; the earliest entrant, company <em>A</em> is given the most favorable values.  However, to make the model more dynamic and also useful, there should be factors that influence the relative attractiveness of the two brands, for example, marketing spend, product quality, product features, and customer service.</p>
<p>Giving an advantage to the early entrant to the market has the expected effect of boosting their customer base at the expense of the others.  This another example of <a href="http://blog.iseesystems.com/stella-ithink/success-to-the-successful/">Success to the Successful</a>.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb4.png" border="0" alt="image" width="473" height="263" /></p>
<p>Note the scale of this graph had to be changed relative to the earlier graphs to show all of company <em>A’</em>s customers.  The effect of the customer switching is so strong that even increasing marketing for company’s <em>B</em> and <em>C</em> does not change the end result.  Of course, the switching factors in this model are constant and increased marketing should indeed change them.</p>
<p>This does, however, show that it is important to intervene in the correct place to reach your desired outcome.  Once the market is mature, the dynamics are dominated by the switching effects, not the process of gaining customers.  Thus, efforts to change market share by changing the rate of gaining customers are ineffective.  Energy should instead be focused on reducing the number of customers who switch to other brands and increasing the number of customers gained from other brands.</p>
<p>This model does not model the decline of the market, through customer loss, since we are mostly concerned with growth and maturation.  If desired, the loss would be modeled with an outflow from <em>Customers</em> as shown in the earlier brand switching post.</p>
<p>Finally, this model assumes that <em>Customers</em> belong to one company alone, i.e., no one uses the product from more than one company at one time.  Sharing customers is known as type 3 rivalry and is beyond the scope of this post.</p>
<p><strong>A Note About Revenues</strong></p>
<p>Gaining customers is, of course, not the entire story.  The purpose of gaining customers is to create revenue for your business.  There are two opportunities to generate revenue in this model:</p>
<ol>
<li>From your existing customer base.  This <em>stock</em>-driven revenue stream is typical for manufacturers of non-durable goods such as bleach and razors, or for subscription-based or service businesses, such as magazines, cable TV, or beauty salons.  If your customer base is large, your revenues will be high.  The Bass diffusion model shows a growing customer base and therefore a growing revenue stream (see curve 1 below).</li>
<li>When a person is converted from a <em>Potential Customer</em> to a <em>Customer</em> or a customer switches from one brand to another.  This <em>flow</em>-driven revenue stream is the only source of revenue for manufacturers of durable goods, such as cars, computers, and refrigerators.  However, it often also applies to software companies.  Since the flow rate determines the revenue stream, if the rate at which you gain customers is large, your revenue will be high.  Note, however, that the Bass diffusion model shows us this rate falls sharply as the market matures, as the number of <em>Customers</em> saturates (see curve 2 below).  To keep revenues high in a mature market for this kind of business, it is necessary to entice customers away from competitors, build in product obsolescence (so your customers have to buy again), or enter new markets.</li>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb5.png" border="0" alt="image" width="455" height="252" /></p>
</ol>
<p><strong>A Final Aside on the Bass Diffusion Model</strong></p>
<p>In his excellent book <span style="text-decoration: underline;">Strategic Modelling and Business Dynamics</span>, John Morecroft explains (on page 173) that the effect of marketing in the Bass diffusion model has a stronger purpose than just to start the ball rolling.  Without the marketing effect, market growth through word-of-mouth alone is much slower than any business would desire, or typically experience.  The following graph compares the growth with and without the marketing effect (<em>Customers</em> is initialized to one in both cases).</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb6.png" border="0" alt="image" width="455" height="252" /></p>
<p>Without the marketing expenditure, the conversion of <em>Potential Customers</em> to <em>Customers</em> does not peak until the month 91, whereas, with marketing expenditure, it peaks in month 50, in almost half the time.  This is also reflected in the time it takes the market to mature:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/02/image_thumb7.png" border="0" alt="image" width="455" height="252" /></p>
<div id="_mcePaste" style="position: absolute; width: 1px; height: 1px; overflow: hidden; top: 1286px; left: -10000px;">available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/02/developing-with-types-1-2-rivalry.itm">here</a>)</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=1O9tkdjOgNw:smLDG2sT3Fs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=1O9tkdjOgNw:smLDG2sT3Fs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=1O9tkdjOgNw:smLDG2sT3Fs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=1O9tkdjOgNw:smLDG2sT3Fs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=1O9tkdjOgNw:smLDG2sT3Fs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=1O9tkdjOgNw:smLDG2sT3Fs:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/1O9tkdjOgNw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stella-ithink/bass-diffusion-with-rivalry/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stella-ithink/bass-diffusion-with-rivalry/</feedburner:origLink></item>
		<item>
		<title>Modeling Real World Challenges Inspires Students</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/_QVhDRpcX3k/</link>
		<comments>http://blog.iseesystems.com/education/new-site-features-models-of-real-world-challenges/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 18:00:50 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[21st century skills]]></category>
		<category><![CDATA[diana fisher]]></category>
		<category><![CDATA[national standards]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2508</guid>
		<description><![CDATA[Last summer I had the opportunity to see students from Diana Fisher&#8217;s dynamic modeling class at Wilson High School in Portland, Oregon present their modeling projects to participants of the International System Dynamics Society Conference in Albuquerque. The parallel session was filled with educators and professionals from different fields, many of whom are renowned system dynamicists.
I think it is safe to [...]]]></description>
			<content:encoded><![CDATA[<p>Last summer I had the opportunity to see students from Diana Fisher&#8217;s dynamic modeling class at Wilson High School in Portland, Oregon present their modeling projects to participants of the International System Dynamics Society Conference in Albuquerque. The parallel session was filled with educators and professionals from different fields, many of whom are renowned system dynamicists.</p>
<p>I think it is safe to say that we <em>all</em> were very impressed by the quality of the students&#8217; work and how well they understood the dynamics associated with the issues they were presenting.  Perhaps more striking however, was seeing how empowering modeling real-world issues is for young people and the enthusiasm they share for their work.</p>
<p><a href="http://www.ccmodelingsystems.com/index.html" target="_blank"><img class="alignright size-medium wp-image-2509" style="margin-top: 5px; margin-bottom: 5px;" title="CC Modeling Systems" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/ccmodelingsys-logo-280x119.jpg" alt="CC Modeling Systems" width="224" height="95" /></a>Now <em>everyone</em> can see the effect that modeling real-world issues has on students at the <a href="http://www.ccmodelingsystems.com/student-projects-highlights.html" target="_blank">CC Modeling Systems </a>web site. Dedicated to helping educators bring dynamic modeling into the classroom, the web site features videos of students presenting their work as compelling evidence to the value of incorporating System Thinking and system dynamics into curriculum.</p>
<p>You&#8217;ll be amazed to see what 14-18 year olds are capable of and the excitement they exuberate when addressing challenges such as:</p>
<ul>
<li><em><a href="http://www.ccmodelingsystems.com/student-projects-highlights.html" target="_blank">How much do carbon emissions need to be reduced in order to stop global warming?</a></em></li>
<li><em><a href="http://www.ccmodelingsystems.com/student-projects-highlights.html" target="_blank">Can automakers cope with the increasing demand for hybrid gasoline-electric vehicles?</a> </em></li>
<li><em><a href="http://www.ccmodelingsystems.com/student-projects-highlights.html" target="_blank">What is the impact of introducing an invasive species into an ecosystem? </a></em></li>
<li><em><a href="http://www.ccmodelingsystems.com/student-projects-videos.html" target="_blank">Will China have sufficient water resources to sustain population and agricultural growth?</a></em></li>
<li><em><a href="http://www.ccmodelingsystems.com/student-projects-videos.html" target="_blank">How can we improve the blood donation process in the United States?</a></em></li>
</ul>
<blockquote><p>Students are eager to understand the world better and are more than capable of building and understanding relatively sophisticated models in their attempts to understand the dynamics of real-world systems.</p>
<p>—Diana Fisher</p>
</blockquote>
<p>Educators and administrators considering dynamic modeling curricula typically face challenges. No matter how compelling the evidence that Systems Thinking and the system dynamics methodology engages students and takes them to a higher level of reasoning, it is still difficult to justify without tying it to National Standards.</p>
<p>The CC Modeling Systems web site devotes an entire section to detailing very specific 21st Century Skills and National Standards addressed by curriculum that incorporates building system dynamics models.   Much of the homework has been done aligning this type of work to standards in the following subject areas:</p>
<ul>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-21st.html" target="_blank">21st Century Skills</a></li>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-econ.html" target="_blank">Economics</a></li>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-health.html" target="_blank">Health</a></li>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-math.html" target="_blank">Math</a></li>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-science.html" target="_blank">Science</a></li>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-socstudies.html" target="_blank">Social Studies</a></li>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-sustain.html" target="_blank">Sustainability</a></li>
<li><a href="http://www.ccmodelingsystems.com/res-stds-skills-tech.html" target="_blank">Technology</a></li>
</ul>
<p>Many thanks to Diana Fisher for sharing her students and her experiences teaching dynamic modeling with all of us!</p>
<p><em>To learn more about the modeling course that Diana teaches, I recommend the following links: <br />
</em><a href="http://www.iseesystems.com/community/WebSeminars/ModelingDynamicSystems.aspx" target="_blank"><em>Recorded webinar presentation by Diana Fisher</em></a><br />
<a href="http://www.iseesystems.com/store/ModelingBook/default.aspx" target="_blank"><em>Modeling Dyamic Systems: Lessons for a First Course</em></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_QVhDRpcX3k:rqvotiwQgrY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_QVhDRpcX3k:rqvotiwQgrY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=_QVhDRpcX3k:rqvotiwQgrY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_QVhDRpcX3k:rqvotiwQgrY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_QVhDRpcX3k:rqvotiwQgrY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=_QVhDRpcX3k:rqvotiwQgrY:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/_QVhDRpcX3k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/education/new-site-features-models-of-real-world-challenges/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/education/new-site-features-models-of-real-world-challenges/</feedburner:origLink></item>
		<item>
		<title>Developing a Market Using the Bass Diffusion Model</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/_qgUkg17clg/</link>
		<comments>http://blog.iseesystems.com/stella-ithink/bass-diffusion-model/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:08:21 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[STELLA & iThink]]></category>
		<category><![CDATA[archetypes]]></category>
		<category><![CDATA[Bass diffusion]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[market dynamics]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2495</guid>
		<description><![CDATA[This is part two of a three part series on Limits to Growth.  Part one can be accessed here and part three can be accessed here.

In part one of this series, I explained the Limits to Growth archetype and gave examples in epidemiology and ecology. This part introduces the Bass diffusion model, an effective way [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is part two of a three part series on Limits to Growth.  Part one can be accessed <a href="http://blog.iseesystems.com/stella-ithink/limits-to-growth/">here</a> and part three can be accessed <a href="http://blog.iseesystems.com/stella-ithink/bass-diffusion-with-rivalry/">here</a>.<br />
</em></p>
<p>In part one of this series, I explained the Limits to Growth archetype and gave examples in epidemiology and ecology. This part introduces the Bass diffusion model, an effective way to implement the capture of customers in a developing market. This is also used to implement what Kim Warren calls Type 1 rivalry in his book <span style="text-decoration: underline;">Strategy Management Dynamics</span>, that is, rivalry between multiple companies in an emerging market.</p>
<p><strong>The Bass Diffusion Model</strong></p>
<p>The Bass diffusion model is very similar to the <a href="http://blog.iseesystems.com/stella-ithink/limits-to-growth/#more-2385">SIR model</a> shown in part one. Since we do not usually track customers who have “recovered” from using our product, the model only has two stocks, corresponding loosely to the <em>Susceptible</em> and <em>Infected</em> stocks. New customers are acquired through contact with existing customers, just as an infection spreads, but in this context this is called <em>word of mouth</em> (<em>wom</em>). This is, however, not sufficient to spread the news of a good product, so the Bass diffusion model also includes a constant rate of customer acquisition through advertising. This is shown below (and can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/01/developing.itm">here</a>).</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/image_thumb.png" border="0" alt="image" width="289" height="235" /></p>
<p>The feedback loops <em>B1</em> and <em>R</em> are the same as the balancing and reinforcing loops between <em>Susceptible</em> and <em>Infected</em> in the SIR model. Instead of an infection rate, there is a <em>wom multiplier</em> which is the product of the Bass diffusion model’s contact rate and the adoption rate. If you are examining policies related to these variables, it would be important to separate them out in the model.</p>
<p>The additional feedback loop, <em>B2</em>, starts the ball rolling and helps a steady stream of customers come in the door. If you examine the SIR model closely, you will see that the initial value of <em>Infected</em> is one. If no one is infected, the disease cannot spread. Likewise, if no one is a customer, there is no one to tell others how great the product is so they want to become customers also. By advertising, awareness of the product is created in the market and some people will become customers without having encountered other customers who are happy with the product.</p>
<p>The behavior of this model is shown below. Note it is not different in character from the SIR model or the simple population model.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/image_thumb1.png" border="0" alt="image" width="455" height="252" /><span id="more-2495"></span></p>
<p><strong>Implicit Type 1 Rivalry</strong></p>
<p>In the face of competition for an emerging market, multiple companies will be fighting for these same potential customers. Ostensibly, they all follow the Bass diffusion model. However, if the exact dynamics of the competition is not important to the purpose of the model, it is possible to simply model the reverse pressure the competition is placing on your company’s growth.</p>
<p><br class="spacer_" /></p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/image_thumb2.png" border="0" alt="image" width="397" height="289" /></p>
<p>In this version of the model (which can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/01/developing-with-competition.itm">here</a>), both the <em>wom multiplier</em> and the marketing effectiveness (<em>fraction gained per $K</em>) are restricted by competitive pressure. The variable <em>competitive pressure</em> is an S-shaped graphical function meant to mimic the behavior of competitors in a developing market. In the beginning, there is no competition. As the market grows, more and more competitors enter the market until it becomes saturated. It is a simple time-series function, as shown below, but could instead be tied to the success of your company.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="clip_image002" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/clip_image002_thumb.jpg" border="0" alt="clip_image002" width="311" height="264" /></p>
<p>The variable <em>competition</em> is just 1 – <em>competitive_pressure</em>, i.e., it is a multiplier that reduces the effectiveness of wom and marketing spending as competitive pressure grows. Finally, a switch called <em>competition switch</em> has been added. When this is set to zero (the default), the model behaves as it did previously, i.e., without competition. When it is set to one, competition is active and the behavior changes to that shown below.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/image_thumb3.png" border="0" alt="image" width="456" height="253" /></p>
<p><strong>Explicit Type 1 Rivalry</strong></p>
<p>Finally, another competitor can be explicitly modeled by replicating the structure (or by using arrays). This model is shown below (and can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2010/01/developing-with-rivalry.itm">here</a>).</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/image_thumb4.png" border="0" alt="image" width="257" height="436" /></p>
<p>In this structure, each competitor can be given their own explicit parameters, which can also vary as the simulation progresses based on market share or product attractiveness. When the rival spends half as much on marketing as your company does, your company wins more market share:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/image_thumb5.png" border="0" alt="image" width="455" height="252" /></p>
<p>In this simulation, the rival enters the market at the same time as your company. This is usually not the case in the real world. If all parameters are the same for both companies, but the rival company enters the market one year later, the end result is identical to that shown above. The transient response, however, is necessarily different:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/image_thumb6.png" border="0" alt="image" width="455" height="252" /></p>
<p>This model does not include the process of developing a market for a product nor does it model persons leaving the market. I.e., it is assumed that the total market size is predefined and never changes. For a completely new product, the potential market will likely grow, so we may want to include this effect. However, when modeling a developing market, it is unlikely we are interested in the shrinking of the market that occurs after maturation.</p>
<p>The model also does not model losing customers to competitors (Type 2 rivalry) or customers who use products from multiple competitors (Type 3 rivalry). An example of modeling Type 2 rivalry is shown in a previous <a href="http://blog.iseesystems.com/modeling-tips/array-methods-3/">post</a>.</p>
<p>My next post in this series will expand the above model to include Type 2 rivalry and to use arrays.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_qgUkg17clg:T1Q0xpH99Pk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_qgUkg17clg:T1Q0xpH99Pk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=_qgUkg17clg:T1Q0xpH99Pk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_qgUkg17clg:T1Q0xpH99Pk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=_qgUkg17clg:T1Q0xpH99Pk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=_qgUkg17clg:T1Q0xpH99Pk:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/_qgUkg17clg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stella-ithink/bass-diffusion-model/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stella-ithink/bass-diffusion-model/</feedburner:origLink></item>
		<item>
		<title>Humanities Major Attempts Dynamic Modeling and Survives!</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/KYrJUprKj4U/</link>
		<comments>http://blog.iseesystems.com/training/humanities-major-attempts-systems-thinking-and-survives/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 21:00:19 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[Training]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2441</guid>
		<description><![CDATA[This post is written by Rolf Olsen, a participant in our Introduction to Dynamic Modeling with iThink and STELLA workshop held last month in Colorado Springs.  We thought Rolf&#8217;s perspective would offer insights for those of you who are new to Systems Thinking or curious about applying dynamic modeling to real-world issues.

I was very excited about a last-minute chance to attend [...]]]></description>
			<content:encoded><![CDATA[<p><em>This post is written by Rolf Olsen, a participant in our </em><a href="http://www.iseesystems.com/store/Training/IntroDynamicModelingIthink.aspx" target="_blank"><em>Introduction to Dynamic Modeling with iThink and STELLA</em></a><em> workshop held last month in Colorado Springs.  We thought Rolf&#8217;s perspective would offer insights for those of you who are new to Systems Thinking or curious about applying dynamic modeling to real-world issues.</em></p>
<div id="attachment_2452" class="wp-caption alignleft" style="width: 117px"><img class="size-medium wp-image-2452 " title="Rolf Olsen" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/Rolf-248x300.jpg" alt="" width="107" height="130" /><p class="wp-caption-text">Rolf Olsen, Workshop Participant</p></div>
<p>I was very excited about a last-minute chance to attend the introductory <em>iThink</em>/STELLA workshop, but to be honest, on the flight to Colorado Springs, I started to become apprehensive.  Who was I trying to kid?  Sure, I’d heard the terms “stock” and “flow” and I understood their roles as the nouns and verbs of the software.  I’d even read a few chapters in Barry Richmond’s <em>Introduction to Systems Thinking</em>.  But the first time I started up the software and stared at that blank workspace, I had no clue where to begin!  Adding to my anguish, I was quite certain there would be others there who were much smarter than me and really <em>knew</em> what they were doing.</p>
<p>In college I spent most of my time and energy studying English and French, language, literature, cinema, art history, and so forth. I managed to avoid all higher math like the plague (although I did reasonably well in basic statistics).  My engineer father often reminded me that my degree in Humanities prepared me for almost nothing.  After college, I stumbled into a career in marketing – quite fertile territory for exploring system dynamics and modeling, as it turns out.  I spent a few formative years in an ad agency and at a regional banking system, before finding my stride marketing and managing nonprofit arts and culture organizations. Today I work in marketing and communication in a large academic medical center.</p>
<p>For years I’ve used spreadsheets to model various ‘what if’ scenarios.  In the arts, I used spreadsheets to create budgets and set ticket prices, always seeking ways to better predict revenue from ticket sales at different prices, for different types of performances (e.g., modern dance, string quartet, jazz ensemble), or on different days of the week.</p>
<p>Preparing for the <em>iThink</em>/STELLA workshop, I decided I’d like to try to model demand in a market area for laser vision correction surgery, popularly known as LASIK or PRK.  That seemed simple enough.  I might be able to bluff my way through this workshop after all!</p>
<p><span id="more-2441"></span></p>
<p>In the end, all my concerns and fears of inadequacy were for naught.  Corey Peck is a remarkable teacher.  Within the first hour of the first day, he’d already explained that almost everybody who starts <em>iThink</em> for the first time takes a deep gulp at the sight of that blank workspace, wondering how to begin.  That was comforting, to say the least.</p>
<p>Others in this workshop included a nurse from Nigeria, two men from a large consulting firm that counts the military among its principal clients, three people with separate interests in systems used to deliver electrical energy, two from the IS planning department of a large national insurance company, a woman from an Oregon health care system, and two women from Hong Kong who teach English at a university there.  And there was me, the health care marketing geek.</p>
<p>Despite the diversity of our backgrounds and fields of endeavor, somehow, over two and a half days of workshop, Corey always managed to guide and instruct us, as a group and individually, in a way that was neither too complex and esoteric nor too simple.  He obviously comprehends dynamic systems so well, and knows the software so thoroughly, that no matter what type of model one of us presented, Corey could quickly offer clear and helpful guidance.  I never felt lost, and I always found myself learning something as I eavesdropped on Corey’s conversations with others in the class.</p>
<p>Our other instructor, Mark Paich, was a protégé and colleague of some of the pioneers of Systems Thinking, including Barry Richmond and Peter Senge.  Mark’s tales from years of consulting work with clients, such as General Motors, were fascinating and, for me, they helped place the concepts we were exploring within a much larger context.  Although the scope and complexity of some of the projects Mark described were daunting, these stories helped me appreciate more clearly what is possible when you begin to view almost any situation you encounter as a dynamic system.  And the stories were fascinating and fun, providing an excellent “brain break” from the rigors of our lessons with Corey!</p>
<p>By the end of the first day, we’d all constructed our first working models, and begun to sketch out the models we hoped to build.  As I mentioned, I wanted to try to create a simple model to explore dynamic demand, based on several variable factors, for LASIK vision correction surgery.  I’d start with the population of our market area and then determine the number of people who wear glasses or contacts.</p>
<ul>
<li>Of those people, how many are aware that our hospital offers LASIK surgery? </li>
<li>How many of the “aware” group might be willing to attend a free information session and preliminary evaluation? </li>
<li>Of all qualified candidates, how many would be willing and able to actually go through with the surgery? </li>
<li>Then, after successful LASIK surgery, how many people would tell their friends, neighbors or colleagues how happy they were, thus spreading awareness and influencing a new group of candidates to have LASIK surgery?</li>
<li>And what might be the impact on surgery volume of marketing efforts at various levels of expenditure?  How about a discount or referral incentive?</li>
</ul>
<p style="text-align: center;"><img class="size-full wp-image-2474 aligncenter" title="LASIK_Model" src="http://blog.iseesystems.com/wp-content/uploads/2010/01/LASIK_Model.png" alt="" width="580" height="218" /><br class="spacer_" /></p>
<p>I started out pretty simply because, as Corey reminded us often, “There’s plenty of time to make it more complex later.”  That proved to be great advice.  And in the end, I went home with a rudimentary model that seemed to work.  Well, mostly.  It needs more work and I need more practice.  And when I mentioned to Corey that I hoped to figure out how to factor in the “word of mouth” effect into my model, he promised to send me information about the “Bass Diffusion Model” that addresses that very topic.  And sure enough, an email arrived a few days after I’d returned home.</p>
<p>In all, my experience at the introductory <em>iThink</em>/STELLA workshop was excellent, even transformative.  I now often find myself thinking in terms of stocks, flows, converters and connectors. I don’t literally model every situation I encounter, of course, but I see applications all around me. I know I have an enormous amount yet to learn, the introductory course covered just the basics for me. But now I have more confidence and I feel inspired to move forward, because I’ve had a tantalizing glimpse of what’s possible with a proper grasp of key concepts, the right software tool – and remarkable teachers.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KYrJUprKj4U:FTLtwoS5f9M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KYrJUprKj4U:FTLtwoS5f9M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=KYrJUprKj4U:FTLtwoS5f9M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KYrJUprKj4U:FTLtwoS5f9M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=KYrJUprKj4U:FTLtwoS5f9M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=KYrJUprKj4U:FTLtwoS5f9M:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/KYrJUprKj4U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/training/humanities-major-attempts-systems-thinking-and-survives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/training/humanities-major-attempts-systems-thinking-and-survives/</feedburner:origLink></item>
		<item>
		<title>Top Blog Posts of 2009</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/n4c5_VVJvtA/</link>
		<comments>http://blog.iseesystems.com/news-announcements/top-blog-posts-of-2009/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 16:00:30 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[News & Announcements]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2416</guid>
		<description><![CDATA[In 2009, the isee systems blog, “Making Connections” was created as a forum for sharing ideas and experiences with the Systems Thinking community. Blog topics cover subjects ranging from a systems perspective of current news events to modeling tips for advanced STELLA and iThink users.
As the first anniversary of the isee Blog approaches, we thought [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-452 alignright" style="margin-left: 10px; margin-right: 10px;" title="Making Connections isee Blog" src="http://blog.iseesystems.com/wp-content/uploads/2009/02/isee_blog_icon_128.png" alt="isee_blog_icon_128" width="128" height="128" />In 2009, the isee systems blog, “Making Connections” was created as a forum for sharing ideas and experiences with the Systems Thinking community. Blog topics cover subjects ranging from a systems perspective of current news events to modeling tips for advanced STELLA and <em>iThink</em> users.</p>
<p>As the first anniversary of the isee Blog approaches, we thought it would be interesting for folks to see the list of our most popular blog posts.</p>
<p><br class="spacer_" /></p>
<p><strong>Top Ten Posts of 2009</strong></p>
<ol>
<li><a href="http://blog.iseesystems.com/stella-ithink/modeling-h1n1-flu-outbreak/">Modeling H1N1 Flu Outbreak</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/array-methods-3/">Modeling Customers Switching Between Brands</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/array-methods-2/">Modeling a Watershed with Arrays</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/">Matrix Arithmetic</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/spatial-modeling-map/">Spatial Modeling with isee Spatial Map</a></li>
<li><a href="http://blog.iseesystems.com/training/thinking-in-systems-inspires-online-course/">“Thinking in Systems” book inspires online course</a></li>
<li><a href="http://blog.iseesystems.com/education/physics-flexbook/">Physics Textbook 2.0</a></li>
<li><a href="http://blog.iseesystems.com/stella-ithink/insight-based-model-investigates-the-housing-crisis/">Insight-based Model Investigates the Housing Crisis</a></li>
<li><a href="http://blog.iseesystems.com/stories-from-the-field/building-health-care-model-hierarchically/">Building a Health Care Model Hierarchically</a></li>
<li><a href="http://blog.iseesystems.com/news-announcements/c02-in-the-atmosphere-behaves-like-a-bathtub/">C02 in the Atmosphere Behaves Like a Bathtub</a></li>
</ol>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=n4c5_VVJvtA:SSSEnb3K810:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=n4c5_VVJvtA:SSSEnb3K810:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=n4c5_VVJvtA:SSSEnb3K810:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=n4c5_VVJvtA:SSSEnb3K810:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=n4c5_VVJvtA:SSSEnb3K810:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=n4c5_VVJvtA:SSSEnb3K810:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/n4c5_VVJvtA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/top-blog-posts-of-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/top-blog-posts-of-2009/</feedburner:origLink></item>
		<item>
		<title>Limits to Growth</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/wPhGEcxXE5I/</link>
		<comments>http://blog.iseesystems.com/stella-ithink/limits-to-growth/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 15:00:55 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[STELLA & iThink]]></category>
		<category><![CDATA[archetypes]]></category>
		<category><![CDATA[Causal Loop]]></category>
		<category><![CDATA[CLD]]></category>
		<category><![CDATA[h1n1]]></category>
		<category><![CDATA[population dynamics]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2385</guid>
		<description><![CDATA[This is the first of a three-part series on the Limits to Growth Archetype.  The second part can be accessed here and the third part  here.
The Limits to Growth Systems Archetype, also known as Limits to Success, combines growth with an exogenous or endogenous limit.  This Systems Archetype was formally identified in Appendix 2 [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the first of a three-part series on the Limits to Growth Archetype.  The second part can be accessed </em><a href="../stella-ithink/limits-to-growth/"><em><a href="../stella-ithink/bass-diffusion-model/">here</a></em></a><em><a href="../stella-ithink/limits-to-growth/"></a> and the third part </em><a href="../stella-ithink/limits-to-growth/"><em> </em></a><em></em><em><a href="http://blog.iseesystems.com/stella-ithink/bass-diffusion-with-rivalry/">here</a></em><em><a href="../stella-ithink/bass-diffusion-model/"></a>.</em></p>
<p>The Limits to Growth Systems Archetype, also known as Limits to Success, combines growth with an exogenous or endogenous limit.  This Systems Archetype was formally identified in Appendix 2 of <span style="text-decoration: underline;">The Fifth Discipline</span> by Peter Senge (1990), but made its first prominent appearance in <span style="text-decoration: underline;">World Dynamics</span> by Jay Forrester (1971) and then <span style="text-decoration: underline;">The Limits to Growth</span> by Meadows, Meadows, Randers, and Behrens (1972).  The Causal Loop Diagram (CLD) is shown below.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb8.png" border="0" alt="image" width="401" height="171" /></p>
<p>Real growth processes have inherent limits to growth.  Identifying these limits can help avoid problems in the future, whether the problem is overpopulation, increasing demand for a product that cannot be met, or growing a business in a mature market.  When growth is desired, but limited, it is always better to find ways to increase the limit before pushing for more growth.  Excessive growth in the face of a limit often leads to collapse.  Driving the system to the point of collapse can erode the ability to continue after the collapse, for example, by reducing the production capability of a piece of farmland or destroying the reputation of a company.</p>
<p>Classic examples of limits to growth include:</p>
<ul>
<li>The collapse of the deer population on the Kaibab plateau and on St. Matthew Island due to overpopulation and the attendant overgrazing of their habitat </li>
<li>The overshoot and collapse of the human population on Easter Island </li>
<li>Overgrazing in the Sahel region of Africa by cattle herders </li>
<li>Overfishing of the oceans by fishermen </li>
<li>The collapse of People Express due to sharp customer growth combined with slow personnel growth </li>
<li>The sharp exodus of America Online subscribers after an intense marketing campaign increased the number of subscribers far beyond their capacity </li>
<li>The contraction of the world economy in 2008 due to limiting oil supplies </li>
<li>The productivity of staff deteriorating as a company grows, due to increased interactions and reporting overhead </li>
<li>Business growth limited by the size of the potential market </li>
<li>Yeast cells in the fermentation process, who suffer from both the loss of exogenously supplied sugar and the increase of endogenously produced pollution </li>
</ul>
<p><span id="more-2385"></span></p>
<p><strong>Exploring Limits to Growth with the SIR Model</strong></p>
<p>The SIR (Susceptible-Infected-Recovered) model, also known as the Kermack-McKendrick model, is used to predict the spread of an infectious disease.  The disease is ultimately limited by the number of potential hosts.</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb1.png" border="0" alt="image" width="435" height="163" /></p>
<p>In this model (available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/12/SIR.stm">here</a>), the <em>Susceptible</em> population becomes infected based on their rate of contact with an <em>Infected</em> population and the probability of being infected (<em>infection rate</em> combines these parameters).  After some amount of time (1/<em>recovery rate</em>), the disease runs its course and people either recover or die, moving into the <em>Recovered</em> population.</p>
<p>The infection feeds on susceptible people.  As the number of susceptible people falls, the number who can become infected also falls.  Since infected people eventually recover, the number of infected people will ultimately fall.  This behavior is reflected in the graph below.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto; border: 0pt;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb2.png" border="0" alt="image" width="458" height="254" /></p>
<p>The sharp increase in <em>Infected</em>, followed by a dramatic drop is known as <em>overshoot and collapse</em>.  It is a characteristic behavior of the Limits to Growth Archetype.  The stock of <em>Recovered</em> people is also limited – by the total population.  It exhibits a different characteristic behavior of Limits to Growth:  <em>S-shaped growth</em>, so called because the graph of this growth pattern looks like the letter <em>S</em>.  This is also known as <em>logistic growth</em>.  In the beginning, growth is very rapid, but as the limit is approached, growth slows and then stops.  In feedback terms (refer back to the CLD), the rapid growth on the left side of the <em>S</em> occurs because the reinforcing loop dominates while the right side slowdown occurs because the balancing loop dominates.</p>
<p>There are two separate limits to growth:  one on the sustainable level of the <em>condition of interest</em> and one on its rate of growth.  The former is defined by a system’s <em>carrying capacity</em> (named <em>limiting condition</em> in the CLD).  As Khalid Saeed, Professor of Social Science and Policy Studies at <a href="http://www.wpi.edu/academics/Depts/SSPS/People/kqs.html" target="_blank">Worcestor Polytechnic Institute</a>, recently reminded me, the carrying capacity of a system is always a <em>flow</em>.  Any system that requires something, either energy or mass, to persist cannot exist beyond the level at which that something can be provided.  The second limit, that on the rate of growth, is defined by the system <em>slack</em>, which is always a <em>stock</em>.</p>
<p>In the SIR model, the infectious disease feeds off of the susceptible people.  The stock of <em>Susceptible</em> people is therefore the slack in the system.  The growth of the disease is limited by the contents of this stock.  However, the carrying capacity of the system is zero, as there is no inflow to <em>Susceptible</em> to provide an endless supply of victims for the disease.  The net result is that eventually, and after a sharp rate of growth, the number of infected people will also drop to zero.</p>
<p>In either a closed or a quarantined community, this may be true.  However, ease of travel creates an inflow to <em>Susceptible</em>, i.e., a carrying capacity, and thus the disease can persist.  The graph below shows what happens when an inflow is added <em>Susceptible</em> and set to 10 people per day (10% of the initial population).</p>
<p><img style="display: block; margin-left: auto; margin-right: auto; border: 0pt;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb3.png" border="0" alt="image" width="459" height="254" /></p>
<p>Rather than going to zero, both <em>Susceptible</em> and <em>Infected</em> wind up at non-zero steady-state values that reflect the new carrying capacity (10).  Note in particular that this value is <em>not</em> 10 for either stock; it is about 50.  Note also that the <em>Infected</em> peak has risen from roughly 17 to 90 due to the inflow of susceptible people.</p>
<p>For more information about the spread of infectious disease, read our blog post on <a href="http://blog.iseesystems.com/stella-ithink/modeling-h1n1-flu-outbreak/">Modeling H1N1 Flu Outbreak</a>.</p>
<p><strong>Exploring Limits to Growth in Population Dynamics</strong></p>
<p>Another example occurs in population dynamics.  The simple example shown below demonstrates the impact of a limit (click <a href="http://blog.iseesystems.com/wp-content/uploads/2009/12/population-simple.stm">here</a> to download this model).</p>
<p><img style="display: block; margin-left: auto; margin-right: auto; border: 0pt;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb4.png" border="0" alt="image" width="375" height="203" /></p>
<p>The food available is a simple linear relationship that reduces available food as population increases.  The death rate increases as the available food per member of the population falls.  The behavior of this model is shown below.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto; border: 0pt;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb5.png" border="0" alt="image" width="456" height="253" /></p>
<p>While this shows the desired behavior, an exogenous limit (food available) enforced as the population grows, this model has no slack and no explicit carrying capacity.  The lack of an explicit stock to model the slack in the system will result in an incorrect <em>transient response</em> (i.e., the system&#8217;s response to a change in its variables) when something happens that might require that slack, for example, a drought or a surge in the population due to immigration.</p>
<p>A more accurate and useful, though more complex, model appears below (and is available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/12/population-replenish.stm">here</a>).</p>
<p><img style="display: block; margin-left: auto; margin-right: auto; border: 0pt;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb6.png" border="0" alt="image" width="459" height="316" /></p>
<p>Both the carrying capacity (<em>replenishment</em>) and the slack (<em>Food Available</em>) are explicitly modeled.  The behavior is quite different:</p>
<p><img style="border: 0pt none; display: block; margin-left: auto; margin-right: auto;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/12/image_thumb7.png" border="0" alt="image" width="459" height="254" /></p>
<p><br class="spacer_" /></p>
<p>There is now a proper transient response to an increase in the birth rate.  The slack, <em>Food Available</em>, fuels growth in the <em>Population</em> until the slack is exhausted (relative to the carrying capacity), at which point the population collapses to its approximate equilibrium value – the value supported by the carrying capacity.</p>
<p>Next time, I will explore limits to growth in the context of business development models.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wPhGEcxXE5I:WAdoudAFhtQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wPhGEcxXE5I:WAdoudAFhtQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=wPhGEcxXE5I:WAdoudAFhtQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wPhGEcxXE5I:WAdoudAFhtQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=wPhGEcxXE5I:WAdoudAFhtQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=wPhGEcxXE5I:WAdoudAFhtQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/wPhGEcxXE5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stella-ithink/limits-to-growth/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stella-ithink/limits-to-growth/</feedburner:origLink></item>
		<item>
		<title>Incorporating STELLA into STEM Education</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/CWGEX75SWWg/</link>
		<comments>http://blog.iseesystems.com/education/incorporating-stella-into-stem-education/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:00:47 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Algebra]]></category>
		<category><![CDATA[h1n1]]></category>
		<category><![CDATA[inquiry-based]]></category>
		<category><![CDATA[lessons]]></category>
		<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[MODSIM]]></category>
		<category><![CDATA[pandemic]]></category>
		<category><![CDATA[Physics]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[STEM]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2298</guid>
		<description><![CDATA[Jeremy and I recently attended the MODSIM 2009 Conference in Virginia Beach where we facilitated a pre-conference workshop with the help of Mark Clemente, a local high school science teacher.
We’ve been working with Mark over the past year to incorporate dynamic modeling and computer-based simulation into the STEM curriculum at Ocean Lakes High School in [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-2302" title="MODSIM 2009" src="http://blog.iseesystems.com/wp-content/uploads/2009/11/MODSIM-2009-280x103.jpg" alt="MODSIM 2009" width="280" height="103" />Jeremy and I recently attended the MODSIM 2009 Conference in Virginia Beach where we facilitated a pre-conference workshop with the help of Mark Clemente, a local high school science teacher.</p>
<p>We’ve been working with Mark over the past year to incorporate dynamic modeling and computer-based simulation into the STEM curriculum at Ocean Lakes High School in Virginia Beach.  Ocean Lakes is serving as a demonstration school for a broader initiative in Virginia to use Modeling and Simulation (MODSIM) as an engine for 21st Century workforce development.</p>
<p>One of our goals for the pre-conference workshop was to provide participants with STELLA models and lessons that they could use immediately in their classrooms.  To attain this we put together a packet of sample lessons that would cover the spectrum of STEM education courses—Science, Technology, Engineering and Mathematics.</p>
<p><strong><strong>Science: Exploring an H1N1 flu outbreak model</strong></strong></p>
<p>Educators at all levels have found that physical activities or games can often be a good way to introduce students to STELLA models. Activities can be a lot of fun and provide a physical model for kids to make the connection with the more abstract computer-based simulation.</p>
<p>In our workshop, we decided to introduce a STELLA model of the H1N1 flu outbreak by first engaging the class in a <a title="Cups Exercise" href="http://www.iseesystems.com/community/WebSeminars/Infectious_Disease_Activity.pdf" target="_blank">simple exercise</a> that demonstrates the spread of infectious disease using cups of water.  Each student was given a cup of water and a pipette.  One cup of water however, was contaminated with sodium hydroxide.   We then began the process of walking around and dropping a pipette filled with liquid from our own cup into the cups of fellow students.  At the end of several rounds, Mark (our teacher) put a drop of phenolphthalein solution into everyone&#8217;s cup.  If the liquid turned pink, we were infected.</p>
<p>With a new understanding of how quickly infection can spread, the class was ready to be introduced to a STELLA model of the H1N1 flu outbreak.  The core structure of the model is based on the same model that epidemiologists use to track a population through the various stages of infection including Susceptible, Exposed, Infected and Recovered (SEIR).</p>
<p>The simulation provided several controls for students to experiment with different policy options for controlling the spread of the virus.   Along with the model, we provided a sample lesson with a set of questions to help guide students through their exploration.  To download the H1N1 model and sample lesson, <a href="http://blog.iseesystems.com/wp-content/uploads/2009/11/H1N1_Lesson.zip">click here</a>.</p>
<p><strong>Technology: Inquiry-based learning with STELLA simulations</strong></p>
<p>It was fascinating to watch how each student in our workshop experimented differently with the model and began asking their own set of questions.  STELLA simulations and computer technology provide the perfect platform for students to learn using an inquiry-based approach.  Rather than being told how something works, students can discover for themselves by exploring &#8220;what-if&#8221; scenarios and finding out what happens. For teachers, this can mean shifting from a traditional teacher role to that of a facilitator or coach, guiding students in their inquiry without knowing in advance the path they&#8217;ll choose.</p>
<p><strong>Engineering/Physics: The Pendulum Story</strong></p>
<p><img class="alignright size-full wp-image-2364" title="pendulum" src="http://blog.iseesystems.com/wp-content/uploads/2009/11/pendulum.jpg" alt="pendulum" width="212" height="156" />Another STELLA model that we introduced to workshop participants was one that Mark and I modified for the <a href="http://blog.iseesystems.com/education/physics-flexbook/">Physics Flexbook</a> project earlier this year.  The original version was developed by Diana Fisher in her book <em><a title="Lessons in Mathematics" href="http://www.iseesystems.com/store/college_university/MathBook.aspx" target="_blank">Lessons in Mathematics: A Dynamic Approach</a></em>. The model provides a practice field for learning how the variables of simple harmonic motion are related.  Controls in the simulation allow you to explore what effect, if any, string length, initial displacement, and pendulum ball mass have on the amplitude, period, and frequency of the pendulum’s motion.  To download the pendulum model and sample lesson, <a href="http://blog.iseesystems.com/wp-content/uploads/2009/11/Pendulum_Lesson.zip">click here</a>.</p>
<p><strong>Mathematics: Algebra Word Problems</strong></p>
<p>You may remember from your own experience in math class that word problems typically give students a lot of trouble!  It is especially difficult to understand what is important in the problem and how to translate words into mathematical equations.  STELLA can help by allowing students to create a visual representation of the problem and making it easier to understand the symbolic representation.</p>
<p>For the workshop, we used the following word problem as an example of a typical Algebra I assignment:</p>
<blockquote><p>Imagine your class is going to try to raise $400 by making school T-shirts. There is a $150 set-up charge for the T-shirt design that you have designed. Once the design is set, it costs $4 for each T-shirt. You feel it is possible to charge $10 for each T-shirt. How many T-shirts do you have to sell before you break even, i.e., make enough money to cover your costs?</p>
</blockquote>
<p>Together we created a STELLA model that provided a visual representation of the word problem and gave everyone some hands-on experience building models from scratch.  It also inspired some participants to think about ways they could expand or change the model to answer additional questions that weren&#8217;t part of their immediate assignment. <br class="spacer_" /></p>
<p><img class="aligncenter size-full wp-image-2372" title="Tshirt" src="http://blog.iseesystems.com/wp-content/uploads/2009/11/Tshirt.jpg" alt="Tshirt" width="513" height="272" /></p>
<p>To download the T-shirt model and lesson, <a href="http://blog.iseesystems.com/wp-content/uploads/2009/11/Word_Problem_Lesson.zip">click here</a>.</p>
<p>We&#8217;d love to expand our library of <a href="http://www.iseesystems.com/community/downloads/tutorials/stella_sample_lessons.aspx" target="_blank">STELLA lessons</a> and models so that we can share them with teachers.  If you&#8217;ve got any ideas of things you&#8217;d like to try in your classroom, please feel free to contact us &#8211; we&#8217;re here to help!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CWGEX75SWWg:dJbhRM7q_GA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CWGEX75SWWg:dJbhRM7q_GA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=CWGEX75SWWg:dJbhRM7q_GA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CWGEX75SWWg:dJbhRM7q_GA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=CWGEX75SWWg:dJbhRM7q_GA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=CWGEX75SWWg:dJbhRM7q_GA:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/CWGEX75SWWg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/education/incorporating-stella-into-stem-education/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/education/incorporating-stella-into-stem-education/</feedburner:origLink></item>
		<item>
		<title>Modeling H1N1 Flu Outbreak</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/Ig1xAbq5KVY/</link>
		<comments>http://blog.iseesystems.com/stella-ithink/modeling-h1n1-flu-outbreak/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 21:37:05 +0000</pubDate>
		<dc:creator>Jeremy Merritt</dc:creator>
				<category><![CDATA[STELLA & iThink]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[epidemic]]></category>
		<category><![CDATA[flu]]></category>
		<category><![CDATA[h1n1]]></category>
		<category><![CDATA[infection]]></category>
		<category><![CDATA[netsim]]></category>
		<category><![CDATA[seir]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2328</guid>
		<description><![CDATA[ It seems like everyone has been talking about H1N1 (swine flu) the last couple of months.  If you have children in school, then you are probably very aware of how fast the virus is spreading.  Schools are the perfect environment for a virus to spread.  To help understand why, we created a STELLA model [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 0px 0px 10px; display: inline; border: 0px;" title="H1N1 Virus" src="http://blog.iseesystems.com/wp-content/uploads/2009/11/purpleh1n1.jpg" border="0" alt="H1N1 Virus" width="206" height="242" align="right" /> It seems like <em>everyone</em> has been talking about H1N1 (swine flu) the last couple of months.  If you have children in school, then you are probably very aware of how fast the virus is spreading.  Schools are the perfect environment for a virus to spread.  To help understand why, we created a STELLA model of a high school that introduces the H1N1 virus.  You can experiment with vaccination and “stay at home” policies to limit the spread of the flu.</p>
<p>The STELLA model is based on the <a href="http://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology" target="_blank">SEIR compartmental model</a> that epidemiologists use to model the progress of an epidemic.  SEIR models divide the population into compartments: Susceptible, Exposed, Infected and Recovered.  These ‘compartments’ translate nicely into stocks within the STELLA model where we can observe the dynamics of the spreading virus.</p>
<p>While developing the model we decided to explore some strategies that schools are pursuing to limit the virus’ spread.  We wanted to know if the “stay at home” (when you are sick) policy would be effective in the case where vaccines are not available quickly enough, (which as of November 2009 is the case).</p>
<p>Take a look:</p>
<p>
<object width='600' height='542'><param name='movie' value='http://forio.com/simulate/resources/swf/sim-frame.swf?userPath=jeremyx&#038;simPath=h1n1-embedded-version&#038;simID=jeremyx/h1n1_embedded_version&#038;netSimColor=0xC1E0FF&#038;serviceRoot=http://forio.com/service2/&#038;initialPage=Page 1&#038;displayForioBadge=false&#038;displayiseeBadge=false&#038;displayShareThisNetSim=false&#038;swfURL=null&#038;embed=true'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param><embed src='http://forio.com/simulate/resources/swf/sim-frame.swf?userPath=jeremyx&#038;simPath=h1n1-embedded-version&#038;simID=jeremyx/h1n1_embedded_version&#038;netSimColor=0xC1E0FF&#038;serviceRoot=http://forio.com/service2/&#038;initialPage=Page 1&#038;displayForioBadge=false&#038;displayiseeBadge=false&#038;displayShareThisNetSim=false&#038;swfURL=null&#038;embed=true' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='600' height='542'></embed></object></object>
</p>
<p>Click the ‘Simulate’ link on the home screen above and try some different scenarios.  Be sure to click the ‘How does this simulation work?’ link for a guided tour of the model behind the simulation.</p>
<p>As you experiment with the simulation, consider the following:</p>
<ul>
<li>How does varying &#8220;% vaccinated&#8221; effect the number of sick students?</li>
<li>How many days do infected students need to stay home to have a significant impact on the spread of the virus within the school? </li>
<li>What impact does the &#8220;% effectiveness of vaccine&#8221; have on the flu outbreak? </li>
<li>What combination of decisions results in the lowest number of sick students?  Are these decisions realistic in a real-world setting? </li>
</ul>
<p><em>Note: Each time you dial in parameters and press run, a new plot will be added to the graph so you can compare the effectiveness of the different decisions.  Clicking on the blue reset button will clear the graph and reset all Knobs to their default value.</em></p>
<p>If you think this simple model is useful, feel free to share it or embed it on your own website; just click the sharing icon in the lower right corner.  If you want to dig deeper into the STELLA model you can download the model by <a href="http://blog.iseesystems.com/wp-content/uploads/2009/11/H1N1_Embedded.zip">clicking here</a>.  You can open the model with <a href="http://www.iseesystems.com/softwares/Education/StellaSoftware.aspx" target="_blank">STELLA 9.1</a>, or the free <a href="http://www.iseesystems.com/softwares/player/iseeplayer.aspx" target="_blank">isee Player</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Ig1xAbq5KVY:OvVlJpfl20c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Ig1xAbq5KVY:OvVlJpfl20c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=Ig1xAbq5KVY:OvVlJpfl20c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Ig1xAbq5KVY:OvVlJpfl20c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=Ig1xAbq5KVY:OvVlJpfl20c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=Ig1xAbq5KVY:OvVlJpfl20c:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/Ig1xAbq5KVY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stella-ithink/modeling-h1n1-flu-outbreak/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stella-ithink/modeling-h1n1-flu-outbreak/</feedburner:origLink></item>
		<item>
		<title>Modeling Customers Switching Between Brands – The General Case</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/OuqCaDcOxrQ/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/array-methods-4/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 13:00:04 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[2D array]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[market dynamics]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2248</guid>
		<description><![CDATA[This is the last installment of a four-part series.  The first three parts can be accessed by clicking on the links below.
Methods for Using Arrays Effectively
Modeling a Watershed with Arrays
Modeling Customers Switching Between Brands 
Generalizing the Model
When I showed Steve Peterson (at Lexidyne) my brand switching model, he told me there is a more general [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the last installment of a four-part series.  The first three parts can be accessed by clicking on the links below.<br />
<a href="http://blog.iseesystems.com/modeling-tips/array-methods-1/">Methods for Using Arrays Effectively</a></em><em><br />
<a href="http://blog.iseesystems.com/modeling-tips/array-methods-2/">Modeling a Watershed with Arrays</a><a href="http://blog.iseesystems.com/modeling-tips/array-methods-3/"><br />
Modeling Customers Switching Between Brands </a></em></p>
<p><strong>Generalizing the Model</strong></p>
<p>When I showed Steve Peterson (at <a href="http://www.lexidyne.com/">Lexidyne</a>) my brand switching model, he told me there is a more general version that separates the customer loss fraction from the fraction won by another competitor.  This has been presented in <a title="Pharmaceutical Product Strategy" href="http://www.lexidyne.com/Publications/publications.htm"><span style="text-decoration: underline;">Pharmaceutical Product Strategy</span></a> by Mark Paich, Corey Peck, and Jason Valant.</p>
<p>In my original formulation, the <em>switching probability</em> matrix was the product of these two variables.  However, in many practical cases, the data available comes from two different places and reflects these two separate components.  The revised model structure is shown below.</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/10/image_thumb.png" alt="image" width="306" height="237" border="0" /></p>
<p>Instead of one composite <em>switching probability</em>, this model uses a <em>switching out probability</em> that is distinct from the <em>switching in probability</em>.  The <em>switching out probability</em> is a one-dimensional array that, for each product, contains the fraction of customers lost to rivals every time unit (in our case, month).  A sample for the five brands <em>A</em>, <em>B</em>, <em>C</em>, <em>D</em>, and <em>E</em> appears below.</p>
<table style="width: 190px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr align="center">
<td valign="top" width="83">Brand</td>
<td valign="top" width="105">Fraction Lost</td>
</tr>
<tr align="center">
<td valign="top" width="83">A</td>
<td valign="top" width="105">0.091</td>
</tr>
<tr align="center">
<td valign="top" width="83">B</td>
<td valign="top" width="105">0.170</td>
</tr>
<tr align="center">
<td valign="top" width="83">C</td>
<td valign="top" width="105">0.046</td>
</tr>
<tr align="center">
<td valign="top" width="83">D</td>
<td valign="top" width="105">0.026</td>
</tr>
<tr align="center">
<td valign="top" width="83">E</td>
<td valign="top" width="106">0.071</td>
</tr>
</tbody>
</table>
<p style="padding-left: 60px;"><span style="font-size: x-small;"><strong>switching out probability</strong></span></p>
<p>We can see from this table that Brand <em>B</em> is losing 17% of its customers to rivals each and every month!  Whoever is managing that product had better do something quickly.</p>
<p>The other side of the story has to do with which brand the customers are switching to.  The <em>switching in probability</em> matrix contains, for each brand, the fraction of lost customers that migrate to a rival brand.  Thus, each row of this matrix <em>must</em> add up to one (100% of lost customers).  A sample appears below.</p>
<table style="width: 400px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr align="center">
<td valign="top" width="66">From\To</td>
<td valign="top" width="66">A</td>
<td valign="top" width="66">B</td>
<td valign="top" width="66">C</td>
<td valign="top" width="66">D</td>
<td valign="top" width="66">E</td>
</tr>
<tr align="center">
<td valign="top" width="66">A</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.11</td>
<td valign="top" width="66">0.33</td>
<td valign="top" width="66">0.55</td>
<td valign="top" width="66">0.01</td>
</tr>
<tr align="center">
<td valign="top" width="66">B</td>
<td valign="top" width="66">0.18</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.29</td>
<td valign="top" width="66">0.41</td>
<td valign="top" width="66">0.12</td>
</tr>
<tr align="center">
<td valign="top" width="66">C</td>
<td valign="top" width="66">0.22</td>
<td valign="top" width="66">0.02</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.44</td>
<td valign="top" width="66">0.32</td>
</tr>
<tr align="center">
<td valign="top" width="66">D</td>
<td valign="top" width="66">0.04</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.77</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.19</td>
</tr>
<tr align="center">
<td valign="top" width="66">E</td>
<td valign="top" width="66">0.02</td>
<td valign="top" width="66">0.07</td>
<td valign="top" width="66">0.28</td>
<td valign="top" width="66">0.63</td>
<td valign="top" width="66">0.00</td>
</tr>
</tbody>
</table>
<p style="padding-left: 150px;"><span style="font-size: x-small;"><strong>switching in probability</strong></span></p>
<p>Note the diagonal will always be zero.</p>
<p>We can determine a lot of things from this table.  For example, brand <em>B</em> offers no competition to brand <em>D</em>, brand <em>D</em> is the biggest rival of all the other brands, and brand <em>C</em> is brand <em>D’</em>s biggest rival.</p>
<p><span id="more-2248"></span>Given these probabilities, we can find the number of customers <em>switching out</em> with the equation:</p>
<p style="padding-left: 30px;">switching_out_probability[Products]*Customers[Products]</p>
<p>We can then use the exact same formulation as previously for <em>switching to</em>:</p>
<p style="padding-left: 30px;">switching_out[Products]*switching_in_probability[Products, Products]</p>
<p>and <em>switching in</em>:</p>
<p style="padding-left: 30px;">ARRAYSUM(switching_to[*, Products])</p>
<p>Note that all customers that switch between two brands also pass through a stock called <em>Customers Switching</em>.  This was Steve Peterson&#8217;s idea:  If the equations in the model are correct and all rows of <em>switching in probability</em> add up to one, as they ought to, this stock will always be zero.  If it is ever non-zero, you immediately know there is something wrong with the numbers in <em>switching in probability</em>.  [Note:  Due to truncation errors during the simulation, the stock will not identically equal zero, so it has been globally scaled from –1 to +1 using the Range Specs.]</p>
<p><strong>Expanding the Model</strong></p>
<p>The structure given above models rivalry for existing customers quite well.  However, it does not include flows for new customers entering the market or existing customers leaving the market.  The full structure for acquiring and retaining customers looks like this (and is available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/10/switching2.itm">here</a>):</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/10/image_thumb1.png" alt="image" width="378" height="272" border="0" /></p>
<p>New customers are gained by each brand based on their respective market shares.  Each brand also has a fraction of customers who are lost completely to this market, who perhaps move on to other technology or just stop using that type of product.</p>
<p>The simulation results are shown below for the case where all products start with 100 customers, no new customers are added, and the <em>loss rate</em> is zero.</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/10/image_thumb4.png" alt="image" width="496" height="286" border="0" /></p>
<p><strong>Switching Based on Market Shares</strong></p>
<p>There is one further variant to customer brand switching that may be useful in some circumstances (it is available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/10/switching3.itm">here</a>):</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/10/image_thumb3.png" alt="image" width="338" height="217" border="0" /></p>
<p>In this version, rather than using a <em>switching in probability</em>, the number of customers gained each unit time is determined by a dynamic overall market share, the one-dimensional array <em>switching in market share</em>.  Whereas the previous model (above) includes a mechanism whereby brand <em>X</em> explicitly gains customers from brand <em>Y</em>, this model bases switching on market share dynamics; if a customer decides to stop using brand <em>X</em>, they might then go searching for a replacement and would be more likely pick the market leader.  Note the <em>switching in market share</em> can be the same as the brand’s overall <em>market share</em> or, as shown, it can reflect the different market shares between new customers (<em>market share</em>) and switching customers (<em>switching in market share</em>).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=OuqCaDcOxrQ:rhP4-opHMIU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=OuqCaDcOxrQ:rhP4-opHMIU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=OuqCaDcOxrQ:rhP4-opHMIU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=OuqCaDcOxrQ:rhP4-opHMIU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=OuqCaDcOxrQ:rhP4-opHMIU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=OuqCaDcOxrQ:rhP4-opHMIU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/OuqCaDcOxrQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/array-methods-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/array-methods-4/</feedburner:origLink></item>
		<item>
		<title>Running Mean and Standard Deviation</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/8pT-uK-v0sk/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/running-mean-and-stddev/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 15:25:57 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[builtins]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[modules]]></category>
		<category><![CDATA[Version 9.1.2]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2139</guid>
		<description><![CDATA[This is an update to post published on August 31, 2009.  The attached model was updated to find negative means and an alternate method was included at the end.
I am frequently asked which built-in function gives either the running mean or running standard deviation of a model variable.  Unfortunately, there is no such built-in at [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is an update to post published on August 31, 2009.  The attached model was updated to find negative means and an alternate method was included at the end.</em></p>
<p>I am frequently asked which built-in function gives either the running mean or running standard deviation of a model variable.  Unfortunately, there is no such built-in at this time (no, that is not what MEAN() does).</p>
<p>Luckily, however, we can replicate the behavior we desire from built-in functions by creating a reusable module.  I can create a module that calculates a running average and a running standard deviation from any model variable.</p>
<p>When building a reusable module component, it is important to carefully define what the input to the module will be (i.e., what are the parameters to the built-in function) and what the output of the module will be (i.e., what is the result or return value of the built-in function).  In this particular case, the input will be the variable whose running average or running standard deviation we wish to find.  There are two outputs:  the running average and the running standard deviation.  Note we do not have to use both outputs all the time.</p>
<p>Thus, our new module can be used as shown below:</p>
<p><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/image_thumb.png" border="0" alt="image" width="372" height="189" /></p>
<p>Note the name of the module was chosen to give a meaningful context to the running mean and standard deviation variables, which have fixed names defined inside the reusable module.  As in this example, it is always a good idea to give the module outputs general names that make sense when qualified by a context (the module name).</p>
<p>The reusable module itself was built and tested in <em>iThink</em>, and can also be used in STELLA.  The input parameter was given an equation to allow the model to be completely tested and debugged before being reused.  The model appears below and can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/mean-and-stddev.itm"></a><a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/mean-and-stddev.itm">here</a>.</p>
<p><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/image_thumb1.png" border="0" alt="image" width="392" height="206" /></p>
<p>Note the input to the module is named <em>value</em>.  After importing the module, this will need to be assigned to the variable in question, <em>Cash</em> in the above example.  This can be done from outside the module by right-clicking on <em>Cash</em> and choosing “Module-&gt;Assign to”, or right-clicking on <em>value</em> and choosing “Module-&gt;Assign Input to”.  The outputs can be assigned in a similar way, or the Ghost tool can be used.</p>
<p>This method, while relatively easy to understand, does accurately compute the standard deviation when the mean of the <em>running sum of squares</em> is close in magnitude to the <em>running mean</em> squared.  An alternate method that does not suffer this problem was developed by Welford in 1962 and is implemented in the model that can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/mean-and-stddev2.itm">here</a>.</p>
<p>Finally, I am including a simple reusable module that finds the maximum value of a model variable across the entire run of a simulation.  It can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/maximum-value.itm">here</a>.  It uses a stock to hold the maximum value seen so far, and takes advantage of the fact that uniflows cannot be negative.  It is used the same way as the running mean and standard deviation module, but only has one output called <em>maximum</em>.</p>
<p>For more information about modules, consult the <em>iThink</em> and STELLA help files.  These on-line resources are also available:</p>
<p><a href="http://blog.iseesystems.com/training/features-introduced-in-stella-and-ithink-version-91/">Using Modules Webinar</a></p>
<p><a href="http://blog.iseesystems.com/modeling-tips/module-faqs/">Module FAQs</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=8pT-uK-v0sk:w3vGZBNJl-Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=8pT-uK-v0sk:w3vGZBNJl-Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=8pT-uK-v0sk:w3vGZBNJl-Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=8pT-uK-v0sk:w3vGZBNJl-Q:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=8pT-uK-v0sk:w3vGZBNJl-Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=8pT-uK-v0sk:w3vGZBNJl-Q:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/8pT-uK-v0sk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/running-mean-and-stddev/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/running-mean-and-stddev/</feedburner:origLink></item>
		<item>
		<title>C02 in the Atmosphere Behaves Like a Bathtub</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/2U_62-yGjKI/</link>
		<comments>http://blog.iseesystems.com/news-announcements/c02-in-the-atmosphere-behaves-like-a-bathtub/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 18:21:26 +0000</pubDate>
		<dc:creator>Jeremy Merritt</dc:creator>
				<category><![CDATA[News & Announcements]]></category>
		<category><![CDATA[c02]]></category>
		<category><![CDATA[Climate Change]]></category>
		<category><![CDATA[netsim]]></category>
		<category><![CDATA[policy]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2239</guid>
		<description><![CDATA[Last Friday we hosted the first of a four-part web seminar series titled Modeling for Environmental Sustainability.  This first session was about how you can use simple bathtub dynamics to understand climate change.
 In the session, Chris Soderquist demonstrates how you can use embeddable simulations to help raise awareness and understanding about climate change.  Using [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday we hosted the first of a four-part web seminar series titled <em><a href="http://www.iseesystems.com/store/Training/ModelingSustainability/default.aspx" target="_blank">Modeling for Environmental Sustainability</a></em>.  This first session was about how you can use simple bathtub dynamics to understand climate change.</p>
<p><a href="http://www.iseesystems.com/community/WebSeminars/ModelingSustainability.aspx#sims"><img style="border: 0pt none; display: inline; margin-left: 0px; margin-right: 0px;" title="co2_bathtub" src="http://blog.iseesystems.com/wp-content/uploads/2009/10/co2_bathtub_thumb.png" border="0" alt="co2_bathtub" width="240" height="154" align="right" /></a> In the session, Chris Soderquist demonstrates how you can use embeddable simulations to help raise awareness and understanding about climate change.  Using simple bathtub dynamics, the &#8220;C02 Dynamic Indicator&#8221; simulation lets anyone experiment with the current set of policy proposals for capping and reducing emissions.</p>
<p>The live session was recorded and is now <a href="http://www.iseesystems.com/community/WebSeminars/ModelingSustainability.aspx" target="_blank">posted on our website</a>, along with two embedded simulations that you can run online.  All of the session materials are open source and we encourage you to link, embed and share them with others.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=2U_62-yGjKI:KCvvYLQWpGM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=2U_62-yGjKI:KCvvYLQWpGM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=2U_62-yGjKI:KCvvYLQWpGM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=2U_62-yGjKI:KCvvYLQWpGM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=2U_62-yGjKI:KCvvYLQWpGM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=2U_62-yGjKI:KCvvYLQWpGM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/2U_62-yGjKI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/c02-in-the-atmosphere-behaves-like-a-bathtub/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/c02-in-the-atmosphere-behaves-like-a-bathtub/</feedburner:origLink></item>
		<item>
		<title>Modeling Customers Switching Between Brands</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/vrF-1n__PjU/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/array-methods-3/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 09:15:57 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[2D array]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[market dynamics]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2204</guid>
		<description><![CDATA[This is the third installment of a four-part series.  The other three parts can be accessed by clicking on the links below.
Methods for Using Arrays Effectively
Modeling a Watershed with Arrays
Modeling Customers Switching Between Brands &#8211; The General Case 
&#160;
In the second post of this series, I showed how to selectively pull information from an array [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the third installment of a four-part series.  The other three parts can be accessed by clicking on the links below.<br />
<a href="../modeling-tips/array-methods-1/">Methods for Using Arrays Effectively</a></em><em><br />
<a href="../modeling-tips/array-methods-2/">Modeling a Watershed with Arrays</a><br />
<a href="../modeling-tips/array-methods-4/">Modeling Customers Switching Between Brands &#8211; The General Case </a></em></p>
<p>&nbsp;</p>
<p>In the second post of this series, I showed how to selectively pull information from an array in order to route water through a watershed.  In this post, I will use the exact same technique to move customers between different product brands.</p>
<p><strong>Switching Customers between Different Products</strong></p>
<p>Business models often need to model gaining customers from, and losing customers to, competing products in a relatively mature market (what Kim Warren, in his excellent book <span style="text-decoration: underline;">Strategy Management Dynamics</span>, calls “Type 2 Rivalry”).  These are often driven with statistical models developed through market research.  For this application, we need a matrix describing the probability of switching from product <em>A</em> to product <em>B</em> each time unit.  A sample appears in the table below.</p>
<table style="width: 400px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr align="center">
<td valign="top" width="66">From\To</td>
<td valign="top" width="66">A</td>
<td valign="top" width="66">B</td>
<td valign="top" width="66">C</td>
<td valign="top" width="66">D</td>
<td valign="top" width="66">E</td>
</tr>
<tr align="center">
<td valign="top" width="66">A</td>
<td valign="top" width="66">0.000</td>
<td valign="top" width="66">0.010</td>
<td valign="top" width="66">0.030</td>
<td valign="top" width="66">0.050</td>
<td valign="top" width="66">0.001</td>
</tr>
<tr align="center">
<td valign="top" width="66">B</td>
<td valign="top" width="66">0.030</td>
<td valign="top" width="66">0.000</td>
<td valign="top" width="66">0.050</td>
<td valign="top" width="66">0.070</td>
<td valign="top" width="66">0.020</td>
</tr>
<tr align="center">
<td valign="top" width="66">C</td>
<td valign="top" width="66">0.010</td>
<td valign="top" width="66">0.001</td>
<td valign="top" width="66">0.000</td>
<td valign="top" width="66">0.020</td>
<td valign="top" width="66">0.015</td>
</tr>
<tr align="center">
<td valign="top" width="66">D</td>
<td valign="top" width="66">0.001</td>
<td valign="top" width="66">0.000</td>
<td valign="top" width="66">0.020</td>
<td valign="top" width="66">0.000</td>
<td valign="top" width="66">0.005</td>
</tr>
<tr align="center">
<td valign="top" width="66">E</td>
<td valign="top" width="66">0.001</td>
<td valign="top" width="66">0.005</td>
<td valign="top" width="66">0.020</td>
<td valign="top" width="66">0.045</td>
<td valign="top" width="66">0.000</td>
</tr>
</tbody>
</table>
<p style="padding-left: 100px;"><strong style="font-size: x-small;">switching probability (units: dimensionless)<br />
</strong></p>
<p>To read this table, locate the product the customer is presently using in the left column (say, <em>B</em>).  Read across that row (the second row, in this case) until you find the product the customer is switching to (say, <em>C</em>).  The number in that cell (in this case, 0.05 or 5%) is the probability the customer will switch from the first product to the second (from <em>B</em> to <em>C</em>) in this time unit.  If the model is running in months, as ours is, this table indicates that 5% of customers using product <em>B</em> switch to product <em>C</em> <em>every</em> month.</p>
<p>Of course, the values in the table do not need to be constant.  Often each cell will contain a regression equation based on various product characteristics – including market share, marketing effort, product features, and product quality – that evolve over the course of the simulation.</p>
<p>Note the diagonal is zero.  This means customers do not switch from one product to the same product.</p>
<p>Note also that the sum in any row cannot exceed 1.0, which represents 100% of the customers using that product.  It is quite normal for it to be below 1.0 because we do not include people who are not switching.  Some modelers find it easier to always have each row add up to 1.0.  If you desire to do this, fill the diagonal with the difference between 1.0 and the sum of the other columns.  For example, to do this for product <em>A</em>, replace the top left cell with 1.0 &#8211; (0.01 + 0.03 + 0.05 + 0.001) = 0.909 [for you Beatles fans].</p>
<p>&nbsp;</p>
<p><span id="more-2204"></span><strong>Exploring the Model</strong></p>
<p>The model is slightly different from the watershed model in my previous post.  This model is driven by the probability of switching.  Thus, it is driven by the stock of customers for each product, while the watershed model was driven by the outflow from each reach.  This is shown below (and is available by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/09/switching.itm">here</a>).</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/09/image_thumb6.png" alt="image" width="326" height="212" border="0" /></p>
<p>The two-dimensional array <em>switching</em> (called a “switching matrix”) is derived by multiplying customers by the switching probability:</p>
<p style="padding-left: 30px;">Customers[Products]*switching_probability[Products, Products]</p>
<p>This equation does not perform a traditional matrix multiplication, but multiplies each element of <em>Customers</em> (a one-dimensional column) by every element in the corresponding row of <em>switching probability</em> (two-dimensional).  [For more information about matrix arithmetic in <em>iThink</em> and STELLA, click <a href="../modeling-tips/matrix-arithmetic/">here</a>.]  As an example, given the <em>switching probability</em> above, if 100 customers use each of products <em>A</em>, <em>B</em>, <em>C</em>, <em>D</em>, and <em>E</em>, the values of <em>switching</em> with its row and column totals would be:</p>
<table style="width: 470px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr align="center">
<td valign="top" width="66">From\To</td>
<td valign="top" width="66">A</td>
<td valign="top" width="66">B</td>
<td valign="top" width="66">C</td>
<td valign="top" width="66">D</td>
<td valign="top" width="66">E</td>
<td style="background-color: #f0f0f0;" valign="top" width="66">Total Out</td>
</tr>
<tr align="center">
<td valign="top" width="66">A</td>
<td valign="top" width="66">0.0</td>
<td valign="top" width="66">1.0</td>
<td valign="top" width="66">3.0</td>
<td valign="top" width="66">5.0</td>
<td valign="top" width="66">0.1</td>
<td style="background-color: #f0f0f0;" valign="top" width="66">9.1</td>
</tr>
<tr align="center">
<td valign="top" width="66">B</td>
<td valign="top" width="66">3.0</td>
<td valign="top" width="66">0.0</td>
<td valign="top" width="66">5.0</td>
<td valign="top" width="66">7.0</td>
<td valign="top" width="66">2.0</td>
<td style="background-color: #f0f0f0;" valign="top" width="66">17.0</td>
</tr>
<tr align="center">
<td valign="top" width="66">C</td>
<td valign="top" width="66">1.0</td>
<td valign="top" width="66">0.1</td>
<td valign="top" width="66">0.0</td>
<td valign="top" width="66">2.0</td>
<td valign="top" width="66">1.5</td>
<td style="background-color: #f0f0f0;" valign="top" width="66">4.6</td>
</tr>
<tr align="center">
<td valign="top" width="66">D</td>
<td valign="top" width="66">0.1</td>
<td valign="top" width="66">0.0</td>
<td valign="top" width="66">2.0</td>
<td valign="top" width="66">0.0</td>
<td valign="top" width="66">0.5</td>
<td style="background-color: #f0f0f0;" valign="top" width="66">2.6</td>
</tr>
<tr align="center">
<td valign="top" width="66">E</td>
<td valign="top" width="66">0.1</td>
<td valign="top" width="66">0.5</td>
<td valign="top" width="66">2.0</td>
<td valign="top" width="66">4.5</td>
<td valign="top" width="66">0.0</td>
<td style="background-color: #f0f0f0;" valign="top" width="66">7.1</td>
</tr>
<tr style="background-color: #f0f0f0;" align="center">
<td valign="top" width="66">Total In</td>
<td valign="top" width="66">4.2</td>
<td valign="top" width="66">1.6</td>
<td valign="top" width="66">12.0</td>
<td valign="top" width="66">18.5</td>
<td valign="top" width="66">4.1</td>
<td style="background-color: silver;" valign="top" width="66">40.4</td>
</tr>
</tbody>
</table>
<p style="padding-left: 180px;"><strong style="font-size: x-small;">switching (units: customers)<br />
</strong></p>
<p>These numbers are derived by multiplying the entire row for each product by 100, the number of customers using that product (again, this example uses 100 customers for each product).  The number of customers switching from a given brand each month is the sum of that product&#8217;s row.  The number of customers switching to a given brand each month is the sum of that product&#8217;s column.</p>
<p>Thus, 9.1 existing customers switch from (stop using) product <em>A</em> this month while 4.2 customers switch to (start using) product <em>A</em> this month.  Product <em>A</em> will therefore have a net loss of 9.1 &#8211; 4.2 = 4.9 customers for the month.</p>
<p>The switching matrix directly drives both the loss of customers and the gain of customers.  The former, <em>losing_customers</em>, sums rows:</p>
<p style="padding-left: 30px;">ARRAYSUM(switching[Products, *])</p>
<p>while the latter, <em>gaining_customers</em>, sums columns:</p>
<p style="padding-left: 30px;">ARRAYSUM(switching[*, Products]).</p>
<p><strong>Running the Model</strong></p>
<p>The simulation results are shown below for the case where all products start with 100 customers and no new customers are added.</p>
<p><img style="border: 0px currentColor; display: inline;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/09/image_thumb5.png" alt="image" width="496" height="286" border="0" /></p>
<p>Note the product with the largest net gain = Total In &#8211; Total Out, product <em>D</em>, gains the most market share over the course of the simulation, while that with the smallest net gain, product <em>B</em>, loses the most.</p>
<p>Next time, I will show a more general switching matrix formulation.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=vrF-1n__PjU:ZXLTXBKgH0I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=vrF-1n__PjU:ZXLTXBKgH0I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=vrF-1n__PjU:ZXLTXBKgH0I:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=vrF-1n__PjU:ZXLTXBKgH0I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=vrF-1n__PjU:ZXLTXBKgH0I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=vrF-1n__PjU:ZXLTXBKgH0I:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/vrF-1n__PjU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/array-methods-3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/array-methods-3/</feedburner:origLink></item>
		<item>
		<title>Modeling a Watershed with Arrays</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/fbNOJmBCrFk/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/array-methods-2/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 14:29:22 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[2D array]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[iThink/STELLA]]></category>
		<category><![CDATA[spatial]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2184</guid>
		<description><![CDATA[This is the second installment of a four-part series.  The other three parts can be accessed by clicking on the links below.
Methods for Using Arrays Effectively
Modeling Customers Switching Between Brands
Modeling Customers Switching Between Brands – The General Case 
&#160;
This is the second installment of a multipart series.  The first part can be found by clicking [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the second installment of a four-part series.  The other three parts can be accessed by clicking on the links below.<br />
<a href="http://blog.iseesystems.com/modeling-tips/array-methods-1/">Methods for Using Arrays Effectively</a></em><em><br />
<a href="http://blog.iseesystems.com/modeling-tips/array-methods-3/">Modeling Customers Switching Between Brands</a><br />
<a href="http://blog.iseesystems.com/modeling-tips/array-methods-4/">Modeling Customers Switching Between Brands – The General Case </a></em></p>
<p>&nbsp;</p>
<p><em>This is the second installment of a multipart series.  The first part can be found by clicking <a href="http://blog.iseesystems.com/modeling-tips/array-methods-1/">here</a>. </em><em>Part 3 is available <a href="http://blog.iseesystems.com/modeling-tips/array-methods-3/">here</a>.</em></p>
<p>In the first post of this series, I showed how to conditionally pull information from an array.  In this post, I will extend this concept to show how to route information through an arrayed model.  This is especially useful in spatial modeling applications.</p>
<p><strong>Routing Water Through a Watershed</strong></p>
<p>A common ecology application is the modeling of a watershed.  Part of such a model will necessarily involve a network of stream or river segments – called <em>reaches</em> – which feed each other.  It is desirable to implement this in a way that makes it easy to modify the reach network.  Using an explicit stock-flow network makes this very difficult.  However, it is relatively straightforward to use arrays of stocks and flows to build an easily configurable network.</p>
<p>Imagine a small watershed broken down into reaches as shown below:</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="clip_image001[6]" src="http://blog.iseesystems.com/wp-content/uploads/2009/09/clip_image0016_thumb.gif" alt="clip_image001[6]" width="236" height="176" border="0" /></p>
<p>For our purposes, a new reach will need to be created at every junction point.  Therefore, in this example and from a topological point-of-view, it is not strictly necessary to treat reach 4 separately from reach 2 nor reach 5 separately from reach 3, but reaches 2 and 3 must be separate from reach 1.  There are, of course, other reasons to separate reach 4 from 2 and reach 5 from 3, for example, slope, channel width, length, etc.</p>
<p>Every reach flows into exactly one other reach at its head, but many reaches can flow into the head of the same reach.  This requires a many-to-one representation of the reach network.  This is accomplished quite easily with a routing map which, for each reach, contains the number of the reach that this reach flows into.  We also need someway to signify the outlet.  Since reach numbers start at one, we can use zero to signify the outlet.  Using these rules, the above network is completely represented in the following routing map:</p>
<table style="width: 180px; margin-left: 30px;" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="89"><span style="text-decoration: underline;">Reach</span></td>
<td valign="top" width="89"><span style="text-decoration: underline;">Flows into</span></td>
</tr>
<tr>
<td valign="top" width="89">1</td>
<td valign="top" width="89">0</td>
</tr>
<tr>
<td valign="top" width="89">2</td>
<td valign="top" width="89">1</td>
</tr>
<tr>
<td valign="top" width="89">3</td>
<td valign="top" width="89">1</td>
</tr>
<tr>
<td valign="top" width="89">4</td>
<td valign="top" width="89">2</td>
</tr>
<tr>
<td valign="top" width="89">5</td>
<td valign="top" width="89">3</td>
</tr>
</tbody>
</table>
<p>The nice thing about this representation is that it fits nicely into a one-dimensional array where the array index is the reach number and the reach it flows into is the value stored in that array element.</p>
<p>The model itself uses one stock to represent each reach.  <em> </em>That stock has one inflow for water entering the reach and one outflow for water leaving the reach: <em>(Download the zipped STELLA model <a href="http://blog.iseesystems.com/wp-content/uploads/2009/09/routing.zip">here</a>) </em></p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/09/image_thumb.png" alt="image" width="387" height="195" border="0" /></p>
<p><span id="more-2184"></span><strong>The Routing Magic</strong></p>
<p>The outflow of one reach is directed to the next through the two-dimensional array <em>route water</em>.  This array is arranged with one outflow per row and one inflow per column.  Thus, the outflows are placed one per row in the proper column for the reach it is headed for.  This means there can only be one non-zero value in each row.  For example, at one point in the simulation, the array <em>route water</em> contains these values:</p>
<div>
<table style="width: 400px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr align="center">
<td valign="top" width="66">From\To</td>
<td valign="top" width="66">1</td>
<td valign="top" width="66">2</td>
<td valign="top" width="66">3</td>
<td valign="top" width="66">4</td>
<td valign="top" width="66">5</td>
</tr>
<tr align="center">
<td valign="top" width="66">1</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
</tr>
<tr align="center">
<td valign="top" width="66">2</td>
<td valign="top" width="66">1.04</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
</tr>
<tr align="center">
<td valign="top" width="66">3</td>
<td valign="top" width="66">0.87</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
</tr>
<tr align="center">
<td valign="top" width="66">4</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.33</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
</tr>
<tr align="center">
<td valign="top" width="66">5</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.24</td>
<td valign="top" width="66">0.00</td>
<td valign="top" width="66">0.00</td>
</tr>
</tbody>
</table>
</div>
<p>As expected, there is at most one non-zero value for each row.  There is no non-zero value in the first row because that corresponds to the outlet, so no water is routed to another reach.  The value in the second row is the outflow from reach 2, the value in the third is the outflow from reach 3, and so on.  The columns sum to the amount of water being fed to the given reach.  So reach 1 will receive 1.04 + 0.87 = 1.91, reach 2 will receive 0.33, and reach 3 will receive 0.24.  Reaches 4 and 5 receive no inflow because they are at the top of the watershed (there are no reaches feeding into them).</p>
<p>The equation that does this magic is:</p>
<p style="padding-left: 30px;">IF (routing_map[Reaches] = ARRAYIDX(2))<br />
THEN outflow[Reaches]<br />
ELSE 0</p>
<p>This says that when the column number (ARRAYIDX(2)) equals the reach number of the downstream reach (routing_map[Reaches]), fill the cell with that reach’s outflow.  Note that we at most define one downstream reach for each reach, so this will only be non-zero in only one column.  In this way, we avoid violating conservation of water.</p>
<p>The inflow then needs to sum the columns to get the total flow directed into that reach:</p>
<p style="padding-left: 30px;">ARRAYSUM(route_water[*,Reaches])</p>
<p>The outflow at the stream outlet is captured in the converter <em>final outflow</em>, which has the equation:</p>
<p style="padding-left: 30px;">ARRAYVALUE(outflow[*], ARRAYMINIDX(routing_map[*]))</p>
<p>This picks up the outflow value of the reach that has the smallest entry in the routing map.  Since we defined the outlet to have the smallest value, zero, as long as we do not accidentally give two entries a zero value in the routing map, ARRAYMINIDX will find the array index (i.e., reach number) of the outlet.</p>
<p>With constant precipitation, the behavior of the model at the end of a storm event appears below:</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/09/image_thumb1.png" alt="image" width="496" height="286" border="0" /></p>
<p><strong>Extending the Model<br />
</strong></p>
<p>This particular example has two simplifications that are easy to extend.  The average time it takes water to flow through a reach (<em>avg reach length in minutes</em>) is constant, but can be made an array with different values for each reach.  These values can also be calculated as the simulation progresses based on existing conditions in the reach.  There is also a constant precipitation to all reaches all the time to keep water flowing into the system.  This can be replaced by an array and a more intricate model of how precipitation flows into the stream over the landscape, or by a simple time series using a graphical function.</p>
<p>One final note about the model:  I chose a stock with an average residence time to represent each reach.  Under some circumstances, this may generate results that are confusing.  For example, because it is an <em>average</em> residence time that follows an exponential distribution, some water that appears at the top of a reach will immediately exit from the bottom of the reach and other water that enters the reach will exit long after the average time has expired.  In individual circumstances, for example a single short storm event, this representation may not match the real world very well.  However, on average, over a long enough period of time, it matches the real behavior quite closely.</p>
<p>One alternative that enforces an exact delay for water moving across each reach is a conveyor.  However, a conveyor is discrete in its behavior, so the model will not behave as true water flow does, i.e., continuously.  Three stocks, i.e., a third-order material delay, could also be used for each reach to reduce the amount of entering water that exits immediately.  Although this does cause the model to retain more water at the start of an event, it also leads to water being lost more quickly at the end.</p>
<p>Next time, I will use this same structure to model customers switching between different brands.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fbNOJmBCrFk:DN--6pkYvWc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fbNOJmBCrFk:DN--6pkYvWc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=fbNOJmBCrFk:DN--6pkYvWc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fbNOJmBCrFk:DN--6pkYvWc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=fbNOJmBCrFk:DN--6pkYvWc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=fbNOJmBCrFk:DN--6pkYvWc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/fbNOJmBCrFk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/array-methods-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/array-methods-2/</feedburner:origLink></item>
		<item>
		<title>Methods for Using Arrays Effectively, Part 1</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/X6IZ613So-E/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/array-methods-1/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 19:33:55 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[2D array]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[iThink/STELLA]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2150</guid>
		<description><![CDATA[This is the first installment of a four-part series. The remaining three parts can be accessed by clicking on the links below.
Modeling a Watershed with Arrays
Modeling Customers Switching Between Brands
Modeling Customers Switching Between Brands &#8211; The General Case 
&#160;
Using arrays can be quite intimidating for most people. Many times, it is difficult to discover the [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the first installment of a four-part series. The remaining three parts can be accessed by clicking on the links below.<br />
<a href="../modeling-tips/array-methods-2/">Modeling a Watershed with Arrays</a><br />
<a href="../modeling-tips/array-methods-3/">Modeling Customers Switching Between Brands</a><br />
<a href="../modeling-tips/array-methods-4/">Modeling Customers Switching Between Brands &#8211; The General Case </a></em></p>
<p>&nbsp;</p>
<p>Using arrays can be quite intimidating for most people. Many times, it is difficult to discover the correct way to formulate a problem in terms of arrays, especially when trying to do so in terms of single equations that can be applied to all elements of the array.</p>
<p>Consider the case where you might wish to count the number of occurrences of a value in an array. This can arise in many applications that need to track attributes, but is prevalent in spatially-explicit business applications. In such an application, you may associate a product code with a location and then want a count of the products of a given type. The following examples demonstrate a common way to extract conditional information from an array.</p>
<p><strong>Finding the Number of Stations with a Given Status</strong></p>
<p>Imagine you have a two-dimensional grid of fire stations in a city, called <em>Stations</em>, that stores one of four statuses:</p>
<p style="padding-left: 30px;">0: no station in this sector<br />
1: ready<br />
2: away on a call<br />
3: refitting</p>
<p>You consider the number of fire stations ready at any given moment to be an important metric. To calculate this, connect <em>Stations</em> to another two-dimensional array of the same size called <em>ready stations</em>. This will have a one in an array element if the station for that quadrant is ready and a zero otherwise. Its equation is:</p>
<p style="padding-left: 30px;">IF Stations[Y, X] = 1 THEN 1 ELSE 0 { station ready? }</p>
<p>Note this equations uses <em>dimension names</em> (<em>i.e., Stations</em>[<em>Y</em>, <em>X</em>]) rather than <em>element names</em> (e.g., <em>Stations</em>[1, 2]). This allows you to create just one equation for the entire array (with &#8220;Apply to All&#8221; turned on), rather than a separate equation for each individual array element (with &#8220;Apply to All&#8221; turned off). When &#8220;Apply to All&#8221; is turned on, the equation for each element of the array is automatically generated by substituting that element&#8217;s dimensions for the dimension name in the given equation. All of the examples in this post use dimension names.</p>
<p>The total number of ready stations is now just the sum of all of the elements in the array <em>ready stations</em>. This is easily calculated by connecting <em>ready stations</em> to a scalar converter named <em>total ready stations</em> that has the equation</p>
<p style="padding-left: 30px;">ARRAYSUM(ready_stations[*, *])</p>
<p>The model is shown below and can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/stations.itm">here</a>.</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/image_thumb2.png" alt="image" width="313" height="127" border="0" /></p>
<p>This general method can be used anytime we need to count the number of elements in an array based on some condition. First, create an array that has its elements set to one if the array-based condition is met and zero otherwise (IF condition THEN 1 ELSE 0). Then create a converter to sum the elements of this new array (using ARRAYSUM). Remember to turn &#8220;Apply to All&#8221; on and use <em>dimension names</em> in the condition rather than <em>element names</em>.</p>
<p><span id="more-2150"></span></p>
<p><strong>Finding the Number of Stations with Each Status</strong></p>
<p>We can extend this method to map data from an array indexed by one attribute (or dimension), say location, to another array indexed by a different attribute, say status. Imagine now that instead of just counting how many stations are ready, you want to know how many stations have each status.</p>
<p>One way to do this is to extend the structure above to separately count the number of stations in each status, as shown below.</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/image_thumb4.png" alt="image" width="321" height="226" border="0" /></p>
<p>In this case, <em>away stations</em> and <em>refitting stations</em> have the following formulas, respectively:</p>
<p style="padding-left: 30px;">IF Stations[Y, X] = 2 THEN 1 ELSE 0 { station away? }<br />
IF Stations[Y, X] = 3 THEN 1 ELSE 0 { station refitting? }</p>
<p><strong>Walking Through a Specific Example</strong></p>
<p>Let&#8217;s look at what happens in this model if array of fire stations is only one-dimensional, <em>Stations</em>[<em>Location</em>], and each location is named. This eliminates the &#8220;no station in this sector&#8221; status. Consider a five-location fire department with the following statuses in each location, held in the array <em>Stations</em>:</p>
<div>
<table style="width: 200px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="100"><strong>Location</strong></td>
<td valign="top" width="100"><strong>Status</strong></td>
</tr>
<tr>
<td valign="top" width="100">North</td>
<td valign="top" width="100">1 (ready)</td>
</tr>
<tr>
<td valign="top" width="100">South</td>
<td valign="top" width="100">3 (refitting)</td>
</tr>
<tr>
<td valign="top" width="100">Central</td>
<td valign="top" width="100">1 (ready)</td>
</tr>
<tr>
<td valign="top" width="100">East</td>
<td valign="top" width="100">2 (away)</td>
</tr>
<tr>
<td valign="top" width="100">West</td>
<td valign="top" width="100">1 (ready)</td>
</tr>
</tbody>
</table>
</div>
<p>The structure above would generate the following values in the three separate arrays <em>ready stations</em>, <em>away stations</em>, and <em>refitting stations</em>. Their respective sums, in the three corresponding &#8220;<em>total </em>status<em> stations&#8221;</em> converters, are shown at the bottom.</p>
<table style="width: 339px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="bottom" width="108"><strong>Location</strong></td>
<td align="center" valign="top" width="77"><strong><em>ready<br />
stations</em></strong></td>
<td align="center" valign="top" width="77"><strong><em>away<br />
stations</em></strong></td>
<td align="center" valign="top" width="75"><em><strong>refitting<br />
stations</strong></em></td>
</tr>
<tr>
<td align="left" valign="top" width="108">North</td>
<td align="center" valign="top" width="77">1</td>
<td align="center" valign="top" width="77">0</td>
<td align="center" valign="top" width="75">0</td>
</tr>
<tr>
<td align="left" valign="top" width="108">South</td>
<td align="center" valign="top" width="77">0</td>
<td align="center" valign="top" width="77">0</td>
<td align="center" valign="top" width="75">1</td>
</tr>
<tr>
<td align="left" valign="top" width="108">Central</td>
<td align="center" valign="top" width="77">1</td>
<td align="center" valign="top" width="77">0</td>
<td align="center" valign="top" width="75">0</td>
</tr>
<tr>
<td align="left" valign="top" width="108">East</td>
<td align="center" valign="top" width="77">0</td>
<td align="center" valign="top" width="77">1</td>
<td align="center" valign="top" width="75">0</td>
</tr>
<tr>
<td align="left" valign="top" width="108">West</td>
<td align="center" valign="top" width="77">1</td>
<td align="center" valign="top" width="77">0</td>
<td align="center" valign="top" width="75">0</td>
</tr>
<tr>
<td align="left" valign="top" width="108"><strong><em>total </em>status <em>stations</em></strong></td>
<td align="center" valign="top" width="77"><strong>3</strong></td>
<td align="center" valign="top" width="77"><strong>1</strong></td>
<td align="center" valign="top" width="75"><strong>1</strong></td>
</tr>
</tbody>
</table>
<p>While this method works, it does not have a very flexible structure. It requires structural changes whenever a new status is added (or removed) and also needs to be customized for every individual application. There are also applications (for example, tracking products) where it is necessary to move between arrays that are indexed by location, as <em>Stations</em> is, and arrays that are indexed by the data within the location, in this case by status.</p>
<p><strong>A More General Solution</strong></p>
<p>If we define another array dimension called <em>Status</em>, with element names <em>Ready</em>, <em>Away</em>, and <em>Refitting</em> that correspond to the numeric statuses 1, 2, and 3, we can represent this same solution in one two-dimensional array <em>station map</em>[<em>Location</em>, <em>Status</em>]:</p>
<div>
<table style="width: 299px; margin-left: 30px;" border="1" frame="box" rules="rows" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td align="left" valign="top" width="71"><strong>Location</strong></td>
<td align="center" valign="top" width="71"><strong>Ready</strong></td>
<td align="center" valign="top" width="71"><strong>Away</strong></td>
<td align="center" valign="top" width="84"><strong>Refitting</strong></td>
</tr>
<tr>
<td align="left" valign="top" width="71">North</td>
<td align="center" valign="top" width="71">1</td>
<td align="center" valign="top" width="71">0</td>
<td align="center" valign="top" width="84">0</td>
</tr>
<tr>
<td align="left" valign="top" width="71">South</td>
<td align="center" valign="top" width="71">0</td>
<td align="center" valign="top" width="71">0</td>
<td align="center" valign="top" width="84">1</td>
</tr>
<tr>
<td align="left" valign="top" width="71">Central</td>
<td align="center" valign="top" width="71">1</td>
<td align="center" valign="top" width="71">0</td>
<td align="center" valign="top" width="84">0</td>
</tr>
<tr>
<td align="left" valign="top" width="71">East</td>
<td align="center" valign="top" width="71">0</td>
<td align="center" valign="top" width="71">1</td>
<td align="center" valign="top" width="84">0</td>
</tr>
<tr>
<td align="left" valign="top" width="71">West</td>
<td align="center" valign="top" width="71">1</td>
<td align="center" valign="top" width="71">0</td>
<td align="center" valign="top" width="84">0</td>
</tr>
</tbody>
</table>
</div>
<p>The array <em>station map</em> allows us to map stations directly to their statuses. Each row of the map represents one station. By definition, there can only be one &#8220;1&#8243; in each row because a station can only have one status. The sum of each row is the number of statuses that are assigned to that station, which must always be one. Each column of the map represents one status. Multiple &#8220;1&#8243;s can appear in the columns because many stations can have the same status. The sum of each column is the number of stations assigned to that status, the value we are trying to determine.</p>
<p>Note the similarity between this two-dimensional array and the preceding table that shows the contents of the individual one-dimensional arrays <em>ready stations, away stations</em>, and <em>refitting stations</em>. Each column of <em>station map</em> corresponds to one of these one-dimensional arrays.</p>
<p>The model for this more general solution is shown below and can be downloaded by clicking <a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/stations2.itm">here</a>.</p>
<p><img style="border: 0px currentColor; margin-right: auto; margin-left: auto; display: block;" title="image" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/image_thumb3.png" alt="image" width="306" height="130" border="0" /></p>
<p>The equation for <em>station map</em>[<em>Location</em>, <em>Status</em>], which will map <em>Stations</em> as illustrated above, is</p>
<p style="padding-left: 30px;">IF Stations[Location] = ARRAYIDX(2) THEN 1 ELSE 0</p>
<p>Note the use of ARRAYIDX() to parameterize the status we are interested in for this array element. The parameter to ARRAYIDX, 2, gives the index of the second dimension for this array element, i.e., the index that corresponds to <em>Status</em>. Since Apply to All is on, this will become the desired status for each array element.</p>
<p>The number of stations with each status is calculated in the one-dimensional converter <em>station totals</em>[<em>Status</em>] using the equation</p>
<p style="padding-left: 30px;">ARRAYSUM(station_map[*, Status])</p>
<p>This equation sums the columns of <em>station map</em>. For the above example, <em>station totals</em> will be filled with the values 3 (<em>Ready</em>), 1 (<em>Away</em>), and 1 (<em>Refitting</em>). Note we have used an intermediate two-dimensional array, <em>station map</em>, to properly map our data from a one-dimensional array indexed by the attribute <em>Location</em> to another one-dimensional array indexed by the attribute <em>Status</em>.</p>
<p>Next time, I will expand this concept to create general routing structures.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X6IZ613So-E:iudilykSmQQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X6IZ613So-E:iudilykSmQQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=X6IZ613So-E:iudilykSmQQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X6IZ613So-E:iudilykSmQQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=X6IZ613So-E:iudilykSmQQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=X6IZ613So-E:iudilykSmQQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/X6IZ613So-E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/array-methods-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/array-methods-1/</feedburner:origLink></item>
		<item>
		<title>Download the isee NetSim Template Model</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/7VQBl2NtMck/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/download-the-netsim-model-template/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 17:12:11 +0000</pubDate>
		<dc:creator>Jeremy Merritt</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[netsim]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2094</guid>
		<description><![CDATA[A few months ago, we designed an interface template for our isee NetSim sample models.  The template is an iThink/STELLA model in which the interface layer is designed to look like a website:

Navigation buttons are styled to look like hyperlinks instead of push buttons. 
Push buttons are used to perform actions, such as running the [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago, we designed an interface template for our isee NetSim sample models.  The template is an <em>iThink</em>/STELLA model in which the interface layer is designed to look like a website:</p>
<ul>
<li>Navigation buttons are styled to look like hyperlinks instead of push buttons. </li>
<li>Push buttons are used to perform actions, such as running the simulation.</li>
<li>Tabs along the top of each page let the viewer know which section they are in, as well as providing a way to quickly jump to any section. </li>
</ul>
<div class="wp-caption aligncenter" style="width: 472px"><a href="http://forio.com/service/netsims/netsim/success/index.html" target="_blank"><img class="  " style="border: 0pt none; display: block;" title="An example of the interface template applied to a model published online" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/CropperCapture34_thumb.png" border="0" alt="CropperCapture[34]" width="462" height="309" /></a><p class="wp-caption-text">An example of the interface template applied to a model published online</p></div>
<p><br class="spacer_" /></p>
<p>You can download the template model and use it as a starting point for creating interfaces to models you want to publish online.</p>
<p><a href="http://bit.ly/10eqVo">Download the template for STELLA</a></p>
<p><a href="http://bit.ly/WtfKM">Download the template for iThink</a></p>
<p><strong>How to use the template</strong></p>
<p>The template model consists of four interface pages: <em>Home</em>, <em>Background</em>, <em>Explore Model</em> and <em>Simulate</em>.  Navigation buttons to and from each page are already setup within the interface.  You can customize each section by replacing the placeholder text.  The pages are a starting point that establishes a website-like look and feel.</p>
<p>The easiest way to apply the template model&#8217;s interface to your own model is to simply copy and paste the pages.</p>
<ol>
<li>Open your own model and switch to the Interface layer.  Choose &#8216;Interface Prefs&#8217; from the Interface menu and make sure the &#8216;Show Pages’ option is selected.  Set Page Size to 800&#215;600.  This will allow you to see the page boundaries as you apply the template.</li>
<li>Open the template model and from the Interface layer choose the Edit menu –&gt; Select All, then Edit menu –&gt; Copy to copy all of the pages to the clipboard. </li>
<li>Go back to the interface layer of your model and choose Edit menu –&gt; Paste.</li>
</ol>
<p>When you have pasted the pages into your model, they will probably not be lined up correctly within the page boundaries.  The dashed lines show the boundaries of each page.  Using these dashed lines as a guide, use the arrow keys on your keyboard to make the pasted pages line up properly.</p>
<p>Now you can customize the title and text in each page.  Add a picture to the home page and build a control panel.  If you want, you can use the hyperlink button on the ‘Background’ page to link to online information, (PDFs, other models, Wikipedia, etc.).  Consider building a storytelling sequence on the ‘Explore Model’ page to unfurl the model a chunk at a time.  These are just a few customizations you can make.  Take a look at some of our <a href="http://www.iseesystems.com/community/downloads/NetsimModels.aspx">sample models published online</a> with isee NetSim for ideas.</p>
<p>If you publish some models online that use the template, we’d love to see them!  Leave a link in the comments so we can check them out!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7VQBl2NtMck:IfIFq_LeyDE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7VQBl2NtMck:IfIFq_LeyDE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=7VQBl2NtMck:IfIFq_LeyDE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7VQBl2NtMck:IfIFq_LeyDE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7VQBl2NtMck:IfIFq_LeyDE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=7VQBl2NtMck:IfIFq_LeyDE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/7VQBl2NtMck" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/download-the-netsim-model-template/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/download-the-netsim-model-template/</feedburner:origLink></item>
		<item>
		<title>Rethinking ‘Cash for Clunkers’</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/ECkZBJdJFN0/</link>
		<comments>http://blog.iseesystems.com/stories-from-the-field/rethinking-cash-for-clunkers/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 18:40:24 +0000</pubDate>
		<dc:creator>Jeremy Merritt</dc:creator>
				<category><![CDATA[Stories from the Field]]></category>
		<category><![CDATA["cash for clunkers"]]></category>
		<category><![CDATA[feebates]]></category>
		<category><![CDATA[netsim]]></category>
		<category><![CDATA[policy]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2023</guid>
		<description><![CDATA[There is no doubt that the Car Allowance Rebate System, or “Cash for Clunkers” program has proved to be popular with American car buyers.  So popular in fact, that it ran out of cash within the first six days of processing claims.  This news got me thinking about the program in a more systemic way.
Whether [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-2034" title="C.A.R.S" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/cars_logo1.png" alt="C.A.R.S" width="209" height="66" />There is no doubt that the <a href="http://www.cars.gov" target="_blank">Car Allowance Rebate System</a>, or “Cash for Clunkers” program has proved to be popular with American car buyers.  So popular in fact, that it ran out of cash within the first <em>six</em> days of processing claims.  This news got me thinking about the program in a more systemic way.</p>
<p>Whether you think of the program as a stimulus for the economy or the environment, it cannot continue to operate without funds.  Congress had to quickly approve another $2 billion for the program when the initial $1 billion appropriation was exhausted in less than a week.  The rebate fund lacks an inflow of cash to offset the outflow of payments.</p>
<p>I wrote about a STELLA model of a <a href="http://blog.iseesystems.com/education/feebates/" target="_blank">self-financing program to promote cleaner vehicle sales</a> in May.  The “Feebates” model uses fees charged on sales of vehicles that have high pollution rates to finance rebates for cleaner vehicles.  I asked the Feebates model author, Andrew Ford what he thought about “Cash for Clunkers”.  He sent me an article he co-authored with Todd BenDor titled “<a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/BenDor_Ford_Final.pdf" target="_blank">Simulating a combination of feebates and scrappage incentives to reduce automobile emissions</a>”.  Basically, the article describes a feebates model with a “cash for clunkers” type of rebate added to promote scrapping older vehicles.  The article was published in the journal <em>Energy, 31(2006)</em>, 1197-1214.</p>
<p><a href="http://forio.com/service/netsims/netsim/clunkers/index.html" target="_blank"><img class="alignright" style="border: 0pt none; display: inline; margin-left: 10px; margin-right: 0px;" title="Cash for clunkers" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/3808715790_393164d861.jpg" border="0" alt="3808715790_393164d861" width="240" height="180" align="right" /></a>Mr. BenDor was kind enough to send me the STELLA model so we could publish it to the web with isee Netsim.  We thought this would be a great way to start some discussion around the Clunkers program, public policy and using simulations to facilitate decision making.</p>
<p><strong><a href="http://forio.com/service/netsims/netsim/clunkers/index.html" target="_blank">Click here to run the simulation online.</a></strong></p>
<ul>
<li>Can you design a policy that stimulates the economy <em>and</em> reduces emissions? </li>
<li>This simulation uses fees to fund the program instead of deficit spending.  What other sources of revenue could we consider? </li>
<li>Many states levy a “sin tax” on tobacco and alcohol.  How would the public react to fees on high-pollution vehicles? </li>
</ul>
<p>Post your answers in the comment section below.</p>
<p><em><span style="font-size: xx-small;">Image credit: </span></em><a title="http://www.flickr.com/photos/threadedthoughts/3808715790/" href="http://www.flickr.com/photos/threadedthoughts/3808715790/"><em><span style="font-size: xx-small;">http://www.flickr.com/photos/threadedthoughts/3808715790/</span></em></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ECkZBJdJFN0:WGwTCryf9no:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ECkZBJdJFN0:WGwTCryf9no:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=ECkZBJdJFN0:WGwTCryf9no:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ECkZBJdJFN0:WGwTCryf9no:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=ECkZBJdJFN0:WGwTCryf9no:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=ECkZBJdJFN0:WGwTCryf9no:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/ECkZBJdJFN0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stories-from-the-field/rethinking-cash-for-clunkers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stories-from-the-field/rethinking-cash-for-clunkers/</feedburner:origLink></item>
		<item>
		<title>2009 Barry Richmond Scholarship Award</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/jxI2RaftvMw/</link>
		<comments>http://blog.iseesystems.com/news-announcements/2009-barry-richmond-scholarship-award/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 13:59:05 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[News & Announcements]]></category>
		<category><![CDATA[Barry Richmond]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[scholarship]]></category>
		<category><![CDATA[System Dynamics Society]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=2004</guid>
		<description><![CDATA[The Barry Richmond Scholarship Award was established in 2007 by isee systems to honor and continue the legacy of our founder, Barry Richmond.  Barry was devoted to helping others become better “Systems Citizens”.  It was his mission to make Systems Thinking and System Dynamics accessible to people of all ages and in all fields.
The award [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_2007" class="wp-caption alignright" style="width: 199px"><img class="size-full wp-image-2007   " title="Marcus Robinson and James Ranney accept scholarship" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/br_scholarship.jpg" alt="Marcus Robinson and James Ranney accept 2009 Barry Richmond Scholarship Award" width="189" height="144" /><p class="wp-caption-text">Marcus Robinson &amp; James Ranney accept 2009 Barry Richmond Scholarship Award</p></div>
<p>The Barry Richmond Scholarship Award was established in 2007 by isee systems to honor and continue the legacy of our founder, Barry Richmond.  Barry was devoted to helping others become better “Systems Citizens”.  It was his mission to make Systems Thinking and System Dynamics accessible to people of all ages and in all fields.</p>
<p>The award is presented annually at the International System Dynamics Conference to an individual whose work demonstrates a desire to expand the field or to apply it to current social issues.</p>
<p>Barry had a particular passion for expanding the field into K-12 education.  He worked closely with teachers and young people at all levels to incorporate Systems Thinking tools and methodologies into the classroom.  With this in mind, it was a great pleasure to present this year’s award to Marcus Robinson and James Ranney, two students from Wilson High School in Portland, Oregon.</p>
<div id="attachment_2008" class="wp-caption alignleft" style="width: 132px"><img class="size-medium wp-image-2008     " style="margin-top: 10px; margin-bottom: 10px;" title="Marcus Robinson presents at SD Conference" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/br_scholarship1-248x300.jpg" alt="Marcus Robinson presents at SD Conference" width="122" height="147" /><p class="wp-caption-text">Marcus Robinson presents at SD Conference</p></div>
<p>The scholarship committee was very impressed by the quality of the models and technical papers that these students submitted.   Both high school seniors were enrolled in Diana Fisher’s modeling class this past year.  For their final project assignment, they were asked to explore a topic of their own choosing.</p>
<p>Inspired by a video of the PBS NOVA program “<a title="Dimming the Sun" href="http://www.pbs.org/wgbh/nova/sun/" target="_blank"><em>Dimming the Sun</em></a>”, Marcus chose to create a model that would help to answer the question “<em>How Much do Carbon Emissions Need to be Reduced in Order to Stop Global Warming?</em>” To download Marcus&#8217; paper, <a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/MarcusFinalPaper.pdf">click here</a>.</p>
<p>After a run-in with a large frog at his summer camp, James was interested in answering &#8220;<em>What is the Impact of Introducing an Invasive Species into an Ecosystem?</em>&#8221; – in this case, the bullfrog into the Pacific Northwest. To download James&#8217; paper, <a href="http://blog.iseesystems.com/wp-content/uploads/2009/08/JamesRanneyFinalPaper.pdf">click here</a>.</p>
<div id="attachment_2009" class="wp-caption alignright" style="width: 206px"><img class="size-medium wp-image-2009   " style="margin-top: 10px; margin-bottom: 10px;" title="James Ranney presents during K-12 poster session" src="http://blog.iseesystems.com/wp-content/uploads/2009/08/br_scholarship2-280x195.jpg" alt="James Ranney presents during K-12 poster session" width="196" height="137" /><p class="wp-caption-text">James Ranney presents during K-12 poster session</p></div>
<p>Both students presented their work at a parallel session during the conference and again at a special K-12 poster session.  What a delight it was to see how empowering modeling real-world issues is for young people and the enthusiasm they share for their work.</p>
<p>Thank you to the society for making a special effort to serve the K-12 community and provide opportunities for partnership.  Congratulations Marcus and James, Barry would be very proud!</p>
<p>Applications for the 2010 Barry Richmond Scholarship Award will be available on the <a href="http://www.iseesystems.com/community/news/RichmondScholarship.aspx" target="_blank">isee systems</a> and <a href="http://www.systemdynamics.org/" target="_blank">System Dynamics Society</a> web sites. Check those sites for more information.</p>
<p><br class="spacer_" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=jxI2RaftvMw:ujUaBwOhBoI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=jxI2RaftvMw:ujUaBwOhBoI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=jxI2RaftvMw:ujUaBwOhBoI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=jxI2RaftvMw:ujUaBwOhBoI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=jxI2RaftvMw:ujUaBwOhBoI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=jxI2RaftvMw:ujUaBwOhBoI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/jxI2RaftvMw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/2009-barry-richmond-scholarship-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/2009-barry-richmond-scholarship-award/</feedburner:origLink></item>
		<item>
		<title>System Dynamics Conference in Albuquerque</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/zOoV7oZrQtU/</link>
		<comments>http://blog.iseesystems.com/news-announcements/system-dynamics-conference-schedule/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 13:53:41 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[News & Announcements]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=1979</guid>
		<description><![CDATA[ We’re looking forward to connecting with folks at the 27th Annual International System Dynamics Conference in Albuquerque next week.   Karim Chichakly, Jeremy Merritt and I will be there to share the latest news, listen to your stories, and answer any questions you might have.
We hope to see you at as many of the following [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.systemdynamics.org/conferences/current/index.htm" target="_blank"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 30px 0px 20px; display: inline; border-top: 0px; border-right: 0px" title="System Dynamics Society" src="http://blog.iseesystems.com/wp-content/uploads/2009/07/SDSLogoJP.gif" border="0" alt="System Dynamics Society" width="98" height="68" align="right" /></a> We’re looking forward to connecting with folks at the <a href="http://www.systemdynamics.org/conferences/current/index.htm" target="_blank">27th Annual International System Dynamics Conference</a> in Albuquerque next week.   Karim Chichakly, Jeremy Merritt and I will be there to share the latest news, listen to your stories, and answer any questions you might have.</p>
<p>We hope to see you at as many of the following isee sponsored events as your schedule allows:</p>
<p><strong>Monday, July 27th</strong></p>
<table style="border: 1px solid #b5c0c4; width: 600px;" border="1" cellspacing="0" cellpadding="2" frame="box" rules="all">
<tbody>
<tr>
<td width="137" valign="top" align="right">8:00 – 6:00 PM</td>
<td width="469" valign="top">isee systems Exhibit Booth Open</td>
</tr>
<tr>
<td width="137" valign="top" align="right">12:30 – 1:00 PM</td>
<td width="469" valign="top">isee systems Exhibitor Demonstration</td>
</tr>
<tr>
<td width="137" valign="top" align="right">1:00 – 1:50 PM</td>
<td width="469" valign="top">STELLA and <em>iThink</em> User Group Meeting</td>
</tr>
</tbody>
</table>
<p><strong>Tuesday, July 28th</strong></p>
<table style="border: 1px solid #b5c0c4; width: 600px;" border="1" cellspacing="0" cellpadding="2" frame="box" rules="all">
<tbody>
<tr>
<td width="137" valign="top" align="right">8:00 – 6:00 PM</td>
<td width="469" valign="top">isee systems Exhibit Booth Open</td>
</tr>
<tr>
<td width="137" valign="top" align="right">7:00 PM</td>
<td width="469" valign="top"><a href="http://www.iseesystems.com/community/news/RichmondScholarship.aspx">Barry Richmond Scholarship Award</a> Presentation</td>
</tr>
</tbody>
</table>
<p><strong>Wednesday, July 29th</strong></p>
<table style="border: 1px solid #b5c0c4; width: 600px;" border="1" cellspacing="0" cellpadding="2" frame="box" rules="all">
<tbody>
<tr>
<td width="137" valign="top" align="right">8:00 – 6:00 PM</td>
<td width="469" valign="top">isee systems Exhibit Booth Open</td>
</tr>
</tbody>
</table>
<p><strong>Thursday, July 30th</strong></p>
<table style="border: 1px solid #b5c0c4; width: 600px;" border="1" cellspacing="0" cellpadding="2" frame="box" rules="all">
<tbody>
<tr>
<td width="137" valign="top" align="right" rowspan="2">8:30 – 10:00 AM</td>
<td width="469" valign="top">Getting Started with STELLA and <em>iThink </em>Workshop<em> </em>(Part 1)</td>
</tr>
<tr>
<td width="469" valign="top"><a href="http://www.iseesystems.com/store/ModelingBook/default.aspx"><em>Modeling Dynamic Systems: Lessons for a First Course</em></a> <br />
Workshop by Diana Fisher</td>
</tr>
<tr>
<td width="137" valign="top" align="right">10:30 – 12:00 PM</td>
<td width="469" valign="top">Getting Started with STELLA and <em>iThink </em>Workshop<em> </em>(Part 2)</td>
</tr>
<tr>
<td width="137" valign="top" align="right">1:00 – 2:30 PM</td>
<td width="469" valign="top">Creating Simulations for the Web with <em>iThink</em> &amp; STELLA Workshop
</td>
</tr>
</tbody>
</table>
<p>See you in Albuquerque!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=zOoV7oZrQtU:pmG059WgOjI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=zOoV7oZrQtU:pmG059WgOjI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=zOoV7oZrQtU:pmG059WgOjI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=zOoV7oZrQtU:pmG059WgOjI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=zOoV7oZrQtU:pmG059WgOjI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=zOoV7oZrQtU:pmG059WgOjI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/zOoV7oZrQtU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/news-announcements/system-dynamics-conference-schedule/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/news-announcements/system-dynamics-conference-schedule/</feedburner:origLink></item>
		<item>
		<title>Success to the Successful</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/03pM1PSg5Oo/</link>
		<comments>http://blog.iseesystems.com/stella-ithink/success-to-the-successful/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 13:21:41 +0000</pubDate>
		<dc:creator>Joanne Egner</dc:creator>
				<category><![CDATA[STELLA & iThink]]></category>
		<category><![CDATA[archetypes]]></category>
		<category><![CDATA[Causal Loop]]></category>
		<category><![CDATA[CLD]]></category>
		<category><![CDATA[modules]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=1883</guid>
		<description><![CDATA[My first introduction to the Systems Archetypes was years ago when I read Peter Senge&#8217;s book, The Fifth Discipline.  I remember relating these classic Systems Thinking stories to my own experience in business and thinking how useful it was to understand some of the problems we faced and why solutions didn&#8217;t always work out as intended.
What I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://books.google.com/books?id=uPAMkK118OcC&amp;lpg=PP1&amp;dq=the%20fifth%20discipline&amp;pg=PA396" target="_blank"><img class="alignright size-full wp-image-1886" style="margin-left: 10px; margin-right: 40px;" title="Fifth Discipline" src="http://blog.iseesystems.com/wp-content/uploads/2009/07/fifth_discipline.jpg" alt="fifth_discipline" width="88" height="128" /></a>My first introduction to the Systems Archetypes was years ago when I read Peter Senge&#8217;s book, <em>The Fifth Discipline</em>.  I remember relating these classic Systems Thinking stories to my own experience in business and thinking how useful it was to understand some of the problems we faced and why solutions didn&#8217;t always work out as intended.</p>
<p>What I&#8217;ve come to appreciate since then is how the characteristic themes of the Systems Archetypes transform across all sorts of different fields and situations — even our personal lives!</p>
<p>Take, for example, the basic story line of the &#8220;Success to the Successful&#8221; archetype:</p>
<blockquote><p>When given the choice, we invest our resources where we expect them to deliver the best results.  By giving more resources to one option over another, we create a self-fulfilling prophesy whereby the favored option is perpetually more successful.</p>
</blockquote>
<p>The story of the Success to the Successful archetype applies to all sorts of  situations leading to well-known patterns of behavior:</p>
<ul>
<li>rich getting richer and poor getting poorer </li>
<li>winners being rewarded with the means to win again</li>
<li>popular brands attracting more popularity</li>
<li>one species driving another to extinction</li>
<li><a href="http://blog.iseesystems.com/stella-ithink/arrayrank/">top salespeople being paid higher commissions</a></li>
</ul>
<p><strong>Exploring the Model Structure<br />
 </strong></p>
<p>We recently published a model of the <a title="Success to the Successful" href="http://forio.com/service/netsims/netsim/success/index.html" target="_blank">Success to the Successful</a> archetype to the web using isee NetSim. Exploring the model is a great way to understand the underlying structure of the <a href="http://forio.com/service/netsims/netsim/success/index.html" target="_blank"><img class="size-medium wp-image-1960 alignright" title="Success to the Successful" src="http://blog.iseesystems.com/wp-content/uploads/2009/07/successtosuccessful1-280x117.png" alt="Causal Loop Diagram" width="280" height="117" /></a>system and think about ways to avoid the problems it creates.</p>
<p>You&#8217;ll also get an appreciation of how the decision policy for allocating resources can determine success rather than competence.</p>
<p><strong>Running the Simulation</strong></p>
<p>After you&#8217;ve explored the model, try running a simulation.  The base case scenario assumes no one has an advantage over the other.  As you can imagine, everyone is equally successful and it&#8217;s a win-win situation.  Try turning on the &#8220;Advantage A Switch&#8221;  to see how even a modest advantage for A can snowball into a disadvantage for B.  It&#8217;s surprising how quickly the gap can widen.</p>
<p><strong>Using Modules to Create Models</strong></p>
<p>In STELLA and <em>iThink</em> version 9.1, we added the ability to <a href="http://blog.iseesystems.com/modeling-tips/module-faqs/">build models by linking together modules</a>.  The Success to the Successful model is an example of how you can use modules to create a higher level map of your model.  This map can easily be presented as a causal loop diagram.</p>
<p>The beauty of modules is they simplify the process of transitioning from a CLD to a model that actually simulates.  If you&#8217;ve ever tried to convert a causal loop diagram into a stock and flow model, you can appreciate what I&#8217;m talking about!  By architecting your model into modules, you&#8217;ve got a built-in mechanism for developing your model in manageable chunks and communicating the high level causal relationships.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=03pM1PSg5Oo:99eKLbLqyXQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=03pM1PSg5Oo:99eKLbLqyXQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=03pM1PSg5Oo:99eKLbLqyXQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=03pM1PSg5Oo:99eKLbLqyXQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=03pM1PSg5Oo:99eKLbLqyXQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=03pM1PSg5Oo:99eKLbLqyXQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/03pM1PSg5Oo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/stella-ithink/success-to-the-successful/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/stella-ithink/success-to-the-successful/</feedburner:origLink></item>
		<item>
		<title>Matrix Arithmetic</title>
		<link>http://feedproxy.google.com/~r/iseesystems/KOIx/~3/7oMUwaRh_cU/</link>
		<comments>http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 11:29:09 +0000</pubDate>
		<dc:creator>Karim Chichakly</dc:creator>
				<category><![CDATA[Modeling Tips]]></category>
		<category><![CDATA[2D array]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[iThink/STELLA]]></category>

		<guid isPermaLink="false">http://blog.iseesystems.com/?p=1869</guid>
		<description><![CDATA[iThink and STELLA support a variety of matrix operations. In this post, I will explain the following common operations and how to perform them:

Addition and Subtraction
Transposition
Extracting the Diagonal of a Square Matrix
Multiplying and Dividing by a Scalar
Multiplying a Square Matrix by a Vector
Multiplying a Non-Square Matrix by a Vector
Multiplying Two Matrices

In the examples provided, I [...]]]></description>
			<content:encoded><![CDATA[<p><em>iThink</em> and STELLA support a variety of matrix operations. In this post, I will explain the following common operations and how to perform them:<img class="alignright size-full wp-image-1924" title="Matrix Cube" src="http://blog.iseesystems.com/wp-content/uploads/2009/07/cube-matrix.jpg" alt="Matrix Cube" width="230" height="218" /></p>
<ul>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#0">Addition and Subtraction</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#1">Transposition</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#2">Extracting the Diagonal of a Square Matrix</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#3">Multiplying and Dividing by a Scalar</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#4">Multiplying a Square Matrix by a Vector</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#5">Multiplying a Non-Square Matrix by a Vector</a></li>
<li><a href="http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/#6">Multiplying Two Matrices</a></li>
</ul>
<p>In the examples provided, I use five different arrays of varying dimensions. They are all defined using the subscript name <em>Dim3</em>, which is size 3.</p>
<p class="code1" style="padding-left: 60px;"><em>a</em>: 3&#215;3 <br />
<em>b</em>: 3&#215;3 <br />
<em>c</em>: 3&#215;3 <br />
<em>d</em>: 3&#215;1 [one-dimensional] <br />
<em>e</em>: 3&#215;1 [one-dimensional]</p>
<p>I also use two arrays based on <em>Dim3</em>, as well as the subscript name <em>Dim2</em>, which is size 2.</p>
<p class="code1" style="padding-left: 60px;"><em>s</em>: 2&#215;3<br />
<em>t</em>: 3&#215;2</p>
<p><span id="more-1869"></span></p>
<p style="padding-left: 60px;">
<p><a class="anchor_header" name="0"><strong>Addition and Subtraction</strong></a></p>
<p>The easiest functions to perform are addition and subtraction. When two arrays have the same dimensions, they can be added and subtracted in the usual way, placing the result in a third array of the same dimensions.</p>
<p>For example, to place the difference of <em>b</em> and <em>c</em> into array <em>a</em>, set the equation of <em>a</em> to</p>
<p class="code1" style="padding-left: 60px;"><em>b</em>[<em>Dim3</em>, <em>Dim3</em>] – <em>c</em>[<em>Dim3</em>, <em>Dim3</em>]</p>
<p><a class="anchor_header" name="1"><strong>Transposition</strong></a></p>
<p>Transposition of a 2-dimensional array is also relatively easy, especially when the dimensions differ. Suppose we wish to transpose <em>s</em> and place the result in <em>t</em>. Simply set the equation for <em>t</em> to</p>
<p class="code1" style="padding-left: 60px;"><em>s</em>[<em>Dim2</em>, <em>Dim3</em>]</p>
<p>This will properly fill <em>t</em>, which has dimensions <em>Dim3</em>x<em>Dim2</em>, with:</p>
<p class="code1" style="padding-left: 60px;"><em>s</em><sub>11</sub>   <em>s</em><sub>21</sub><br />
<em>s</em><sub>12</sub>   <em>s</em><sub>22</sub><br />
<em>s</em><sub>13</sub>   <em>s</em><sub>23</sub></p>
<p>However, if the two dimensions of the array have the same name, the ARRAYVALUE built-in must be used. Suppose we wish to transpose <em>b</em>, placing its transposition in <em>a</em>. Set the equation of <em>a</em> to</p>
<p class="code1" style="padding-left: 60px;">ARRAYVALUE(<em>b</em>[*, *], ARRAYIDX(2), ARRAYIDX())</p>
<p>Note the index of <em>a</em>’s second dimension is used as the index for <em>b</em>’s first dimension and the index of <em>a</em>’s first dimension is used as the index for <em>b</em>’s second dimension.</p>
<p><a class="anchor_header" name="2"><strong>Extracting the Diagonal of a Square Matrix</strong></a></p>
<p>Extracting the diagonal from a 2-dimensional array is also very easy. To place the diagonal of <em>a</em> into <em>d</em>, set the equation of <em>d</em> to</p>
<p class="code1" style="padding-left: 60px;"><em>a</em>[<em>Dim3</em>, <em>Dim3</em>]</p>
<p><a class="anchor_header" name="3"><strong>Multiplying and Dividing by a Scalar</strong></a></p>
<p>Multiplying or dividing by a scalar works as expected. The contents of <em>b</em> can be multiplied by a scalar <em>x</em>, for example, by setting the equation of <em>a</em> to</p>
<p class="code1" style="padding-left: 60px;"><em>x</em>*<em>b</em>[<em>Dim3</em>, <em>Dim3</em>]</p>
<p><a class="anchor_header" name="4"><strong>Multiplying a Square Matrix by a Vector</strong></a></p>
<p>Matrix multiplication, as defined in linear algebra, is not directly supported at present. It is possible to multiply two arrays, but the results will not match matrix multiplication. When you multiply a 1-dimensional array by a 2-dimensional array, the size of the 1-dimensional array must match either the number of rows or the number of columns in the 2-dimensional array. In both cases, <em>iThink</em> and STELLA treats the 1-dimensional array as either a column or row of scalars that are multiplied across each corresponding row or column, respectively, of the 2-dimensional array.</p>
<p>Given the following equation in <em>a</em>,</p>
<p class="code1" style="padding-left: 60px;"><em>d</em>[<em>Dim3</em>]*<em>b</em>[<em>Dim3</em>, <em>Dim3</em>]</p>
<p><em>d</em> will be treated as a column of scalars (when the 2-dimensional array is square with the same dimension name in both directions, the 1-dimensional array is always treated as a column vector). Each scalar in <em>d</em> will be multiplied across each corresponding row of <em>b</em>. Note this equation does not represent a valid matrix multiplication, and also that switching the order to <em>b</em>[<em>Dim3</em>, <em>Dim3</em>]*<em>d</em>[<em>Dim3</em>], while now a valid matrix multiplication, will not change the result. I recommend leaving the order as above to emphasize that it is not a normal matrix multiplication.</p>
<p>More precisely, the array <em>a</em> will be populated with these values:</p>
<p class="code1" style="padding-left: 60px;"><em>d</em><sub>1</sub>*<em>b</em><sub>11</sub>   <em>d</em><sub>1</sub>*<em>b</em><sub>12</sub>   <em>d</em><sub>1</sub>*<em>b</em><sub>13</sub><br />
<em>d</em><sub>2</sub>*<em>b</em><sub>21</sub>   <em>d</em><sub>2</sub>*<em>b</em><sub>22</sub>   <em>d</em><sub>2</sub>*<em>b</em><sub>23</sub><br />
<em>d</em><sub>3</sub>*<em>b</em><sub>31</sub>   <em>d</em><sub>3</sub>*<em>b</em><sub>32</sub>   <em>d</em><sub>3</sub>*<em>b</em><sub>33</sub></p>
<p>Note that these are <em>not</em> the correct terms for matrix multiplication. If we multiply <em>b</em>[<em>Dim3</em>, <em>Dim3</em>]*<em>d</em>[<em>Dim3</em>], which is the only correct way to express it, the linear algebra result is a one-dimensional vector with these values:</p>
<p class="code1" style="padding-left: 60px;"><em>d</em><sub>1</sub>*<em>b</em><sub>11</sub> + <em>d</em><sub>2</sub>*<em>b</em><sub>12</sub> + <em>d</em><sub>3</sub>*<em>b</em><sub>13</sub><br />
<em>d</em><sub>1</sub>*<em>b</em><sub>21</sub> + <em>d</em><sub>2</sub>*<em>b</em><sub>22</sub> + <em>d</em><sub>3</sub>*<em>b</em><sub>23</sub><br />
<em>d</em><sub>1</sub>*<em>b</em><sub>31</sub> + <em>d</em><sub>2</sub>*<em>b</em><sub>32</sub> + <em>d</em><sub>3</sub>*<em>b</em><sub>33</sub></p>
<p>If we desire to generate these terms, we must first transpose <em>b</em> by placing the transposition equation given above in <em>c</em>:</p>
<p class="code1" style="padding-left: 60px;">ARRAYVALUE(<em>b</em>[*, *], ARRAYIDX(2), ARRAYIDX())</p>
<p>This puts the following values in <em>c</em>, i.e., <em>b</em> transposed:</p>
<p class="code1" style="padding-left: 60px;"><em>b</em><sub>11</sub>   <em>b</em><sub>21</sub>   <em>b</em><sub>31</sub><br />
<em>b</em><sub>12</sub>   <em>b</em><sub>22</sub>   <em>b</em><sub>32</sub><br />
<em>b</em><sub>13</sub>   <em>b</em><sub>23</sub>   <em>b</em><sub>33</sub></p>
<p>The equation for <em>a</em> can now be set to</p>
<p class="code1" style="padding-left: 60px;"><em>d</em>[<em>Dim3</em>]*<em>c</em>[<em>Dim3</em>, <em>Dim3</em>]</p>
<p>This equation will populate <em>a</em> with these values:</p>
<p class="code1" style="padding-left: 60px;"><em>d</em><sub>1</sub>*<em>b</em><sub>11</sub>   <em>d</em><sub>1</sub>*<em>b</em><sub>21</sub>   <em>d</em><sub>1</sub>*<em>b</em><sub>31</sub><br />
<em>d</em><sub>2</sub>*<em>b</em><sub>12</sub>   <em>d</em><sub>2</sub>*<em>b</em><sub>22</sub>   <em>d</em><sub>2</sub>*<em>b</em><sub>32</sub><br />
<em>d</em><sub>3</sub>*<em>b</em><sub>13</sub>   <em>d</em><sub>3</sub>*<em>b</em><sub>23</sub>    <em>d</em><sub>3</sub>*<em>b</em><sub>33</sub></p>
<p>Note that this gives the proper terms for the matrix multiplication, arranged vertically. The final answer is found by summing each column, using the following equation in vector <em>e</em>:</p>
<p class="code1" style="padding-left: 60px;">ARRAYSUM(<em>a</em>[*, <em>Dim3</em>])</p>
<p>Aside: The terms we get from the original equation for <em>a</em>, <em>d</em>[<em>Dim3</em>]*<em>b</em>[<em>Dim3</em>, <em>Dim3</em>], are the correct terms for <em>d</em><sup>T</sup><em>b</em>, i.e., <em>d</em>-transposed times <em>b</em>, again arranged vertically. If this was the desired result, we do not need to first transpose <em>b</em> and can just sum the columns into vector <em>e</em> as shown above.</p>
<p><a class="anchor_header" name="5"><strong>Multiplying a Non-Square Matrix by a Vector</strong></a></p>
<p>If the matrices do not use the same dimension name for both dimensions (square or not), you have much more control over the resultant terms and do not have to resort to transposition at all. The following discussion uses the following additional arrays:</p>
<p class="code1" style="padding-left: 60px;"><em>f</em>: 2&#215;3<br />
<em>g</em>: 2&#215;1 [one-dimensional]<br />
<em>s</em>: 2&#215;3<em>t</em>: 3&#215;2</p>
<p>If we multiply <em>f</em> times <em>d</em>, we will get a different result based on whether the resultant array is 2&#215;3 or 3&#215;2. Placing the equation <em>d</em>[<em>Dim3</em>]*<em>f </em>[<em>Dim2</em>, <em>Dim3</em>] into array <em>s</em> yields exactly the terms needed for a matrix multiplication, arranged horizontally:</p>
<p class="code1" style="padding-left: 60px;"><em>d</em><sub>1</sub>*<em>f</em><sub>11</sub>   <em>d</em><sub>2</sub>*<em>f</em><sub>12</sub>   <em>d</em><sub>3</sub>*<em>f</em><sub>13</sub><br />
<em>d</em><sub>1</sub>*<em>f</em><sub>21</sub>   <em>d</em><sub>2</sub>*<em>f</em><sub>22</sub>   <em>d</em><sub>3</sub>*<em>f</em><sub>23</sub></p>
<p>Setting the equation of <em>g</em> to</p>
<p class="code1" style="padding-left: 60px;">ARRAYSUM(<em>s</em>[<em>Dim2</em>, *])</p>
<p>will properly sum the rows into <em>g</em>, giving the result of the matrix multiplication <em>f</em> *<em>d</em>.</p>
<p>If, instead, we place the same equation <em>d</em>[<em>Dim3</em>]*<em>f </em>[<em>Dim2</em>, <em>Dim3</em>] into array <em>t</em>, we get these terms instead:</p>
<p class="code1" style="padding-left: 60px;"><em>d</em><sub>1</sub>*<em>f</em><sub>11</sub>   <em>d</em><sub>1</sub>*<em>f</em><sub>21</sub><br />
<em>d</em><sub>2</sub>*<em>f</em><sub>12</sub>   <em>d</em><sub>2</sub>*<em>f</em><sub>22</sub><br />
<em>d</em><sub>3</sub>*<em>f</em><sub>13</sub>   <em>d</em><sub>3</sub>*<em>f</em><sub>23</sub></p>
<p>The correct terms are still available, only now they are arranged vertically and the columns must be summed to arrive at the proper result:</p>
<p class="code1" style="padding-left: 60px;">ARRAYSUM(<em>t</em>[*, <em>Dim2</em>])</p>
<p>Multiplying by <em>g</em> instead, i.e., placing the equation <em>g</em>[<em>Dim2</em>]*<em>f </em>[<em>Dim2</em>, <em>Dim3</em>] into <em>s</em>, yields these terms:</p>
<p class="code1" style="padding-left: 60px;"><em>g</em><sub>1</sub>*<em>f</em><sub>11</sub>   <em>g</em><sub>1</sub>*<em>f</em><sub>12</sub>   <em>g</em><sub>1</sub>*<em>f</em><sub>13</sub><br />
<em>g</em><sub>2</sub>*<em>f</em><sub>21</sub>   <em>g</em><sub>2</sub>*<em>f</em><sub>22</sub>   <em>g</em><sub>2</sub>*<em>f</em><sub>23</sub></p>
<p>These are the terms for <em>g</em><sup>T</sup><em>f</em> , arranged vertically. Placing the equation into <em>t</em> gives the same terms horizontally. To calculate <em>f</em> <sup>T</sup><em>g</em>, it is necessary to first transpose <em>f</em> by setting <em>t</em> to the equation</p>
<p class="code1" style="padding-left: 60px;"><em>f</em> [<em>Dim2</em>, <em>Dim3</em>]</p>
<p>When this is multiplied by <em>g</em>, the correct terms for <em>f</em> <sup>T</sup><em>g</em> will be generated (horizontally in a 3&#215;2 array and vertically in a 2&#215;3 array).<strong> </strong></p>
<p><a class="anchor_header" name="6"><strong>Multiplying Two Matrices</strong></a></p>
<p>Unfortunately, there is no way to easily generate the terms for multiplying two matrices. The equations must be individually tailored for each case. As an example, let’s look at multiplying <em>t</em>*<em>s</em> and storing the result in <em>a</em>. Array <em>t</em> is 3&#215;2 and array <em>s</em> is 2&#215;3, so the result will fit in <em>a</em> (3&#215;3). The correct answer is:</p>
<p class="code1" style="padding-left: 60px;"><em>t</em><sub>11</sub>*<em>s</em><sub>11</sub> + <em>t</em><sub>12</sub>*<em>s</em><sub>21</sub>    <em>t</em><sub>11</sub>*<em>s</em><sub>12</sub> + <em>t</em><sub>12</sub>*<em>s</em><sub>22</sub>    <em>t</em><sub>11</sub>*<em>s</em><sub>13</sub> + <em>t</em><sub>12</sub>*<em>s</em><sub>23</sub><br />
<em>t</em><sub>21</sub>*<em>s</em><sub>11</sub> + <em>t</em><sub>22</sub>*<em>s</em><sub>21</sub>    <em>t</em><sub>21</sub>*<em>s</em><sub>12</sub> + <em>t</em><sub>22</sub>*<em>s</em><sub>22</sub>    <em>t</em><sub>21</sub>*<em>s</em><sub>13</sub> + <em>t</em><sub>22</sub>*<em>s</em><sub>23</sub><br />
<em>t</em><sub>31</sub>*<em>s</em><sub>11</sub> + <em>t</em><sub>32</sub>*<em>s</em><sub>21</sub>    <em>t</em><sub>31</sub>*<em>s</em><sub>12</sub> + <em>t</em><sub>32</sub>*<em>s</em><sub>22</sub>    <em>t</em><sub>31</sub>*<em>s</em><sub>13</sub> + <em>t</em><sub>32</sub>*<em>s</em><sub>23</sub></p>
<p>Examining these values for a pattern that could be used in an apply-to-all equation, we can see the proper equation for array <em>a</em> is</p>
<p class="code1" style="padding-left: 60px;"><em>t</em>[<em>Dim3</em>, 1]*<em>s</em>[1, <em>Dim3</em>] + <em>t</em>[<em>Dim3</em>, 2]*<em>s</em>[2, <em>Dim3</em>]</p>
<p>This pattern, incidentally, will hold in general for any two matrices. However, this equation does not work as an apply-to-all equation because the same name is used for both the first and second dimensions so it is not possible to tell which of the two varying <em>Dim3</em> values to use. In this case, <em>iThink</em> and STELLA currently always substitutes the value of the first dimension, which will not give the correct answer. This will always be a problem when the resulting array is square. One workaround is to define an additional dimension name that is the same size as <em>Dim3</em>. This works, but may lead to other array incompatibilities. The other solution is similar to how we transposed a square matrix – explicitly use ARRAYVALUE for any references to the second dimension:</p>
<p class="code1" style="padding-left: 60px;"><em>t</em>[<em>Dim3</em>, 1]*ARRAYVALUE(<em>s</em>[*, *], 1, ARRAYIDX(2))<br />
+ <em>t</em>[<em>Dim3</em>, 2]*ARRAYVALUE(<em>s</em>[*, *], 2, ARRAYIDX(2))</p>
<p>This is certainly not as clear, but it works and is only necessary when the result is square. One last example underscores this point and also shows how to expand the general pattern to a larger array. For this example, one more dimension name, <em>Dim4</em>, of size 4 and two more arrays are needed:</p>
<p class="code1" style="padding-left: 60px;"><em>u</em>: 3&#215;4<br />
<em>v</em>: 2&#215;4</p>
<p>To calculate the result of <em>s</em>*<em>u</em> in array <em>v</em>, where <em>s</em> is 2&#215;3, <em>u</em> is 3&#215;4, and <em>v</em> is (correctly) 2&#215;4, set the equation for <em>v</em> to:</p>
<p class="code1" style="padding-left: 60px;"><em>s</em>[<em>Dim2</em>, 1]*<em>u</em>[1, <em>Dim4</em>] + <em>s</em>[<em>Dim2</em>, 2]*<em>u</em>[2, <em>Dim4</em>] + <em>s</em>[<em>Dim2</em>, 3]*<em>u</em>[3, <em>Dim4</em>]</p>
<p>Note this same method can be used for multiplying a 2-dimensional array by a 1-dimensional array instead of the method presented above. It avoids both the intermediate transposition and product arrays, but results in more complex expressions that must be tailored to each combination of array sizes.</p></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7oMUwaRh_cU:rs0qVyFop9s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7oMUwaRh_cU:rs0qVyFop9s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=7oMUwaRh_cU:rs0qVyFop9s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7oMUwaRh_cU:rs0qVyFop9s:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/iseesystems/KOIx?a=7oMUwaRh_cU:rs0qVyFop9s:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/iseesystems/KOIx?i=7oMUwaRh_cU:rs0qVyFop9s:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/iseesystems/KOIx/~4/7oMUwaRh_cU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.iseesystems.com/modeling-tips/matrix-arithmetic/</feedburner:origLink></item>
	</channel>
</rss>
