OpenSim

From OLPC
Revision as of 23:04, 2 April 2008 by Bobbypowers (talk | contribs) (clarified Forrester)
Jump to navigation Jump to search

This page contains the working Google Summer of Code proposal for OpenSim. OpenSim consists of a System Dynamics modeling activity called "Model" and the simulation engine that Model uses to load, edit and run System Dynamics models.


Introduction

"The greatest constant of modern time is change." - John Sterman


System dynamics (SD) deals with how things change over time. It is a way to augment our understanding of the world around us, particularly suited for studying dynamic, non-linear systems. The Limits To Growth caused more public reaction than any other computer model and came out of MIT's system dynamics lab. Jay Forrester, the founder of system dynamics had this to say in 1997:

  • System Dynamics uses computer simulation models to reveal how known structures and policies often produce unexpected and troublesome behavior. The computer models are constructed from descriptive information that is usually already known. Such information relates to who is striving to do what, the information that each person has available, time delays in taking action, and what individuals will do under a variety of pressures. The same approach carries over to non-human systems in nature, and physical change...
  • In the more successful schools <nowiki>[with system dynamic programs<nowiki>], system dynamics is combined with a classroom reorganization we call "learner-centered learning." Such a project-oriented approach goes by various names in other proposals for K-12 education, but is especially powerful when combined with system dynamics. Learner-centered learning focuses on solving substantial problems. Teachers are no longer lecturers, no longer the source of all wisdom, not even necessarily authority figures...
  • Students address projects with real world significance for which they have not been given the necessary background and techniques. They start by facing the challenge of learning what they need to know in order to accomplish the project... It is becoming clear that teachers in ordinary K--12 schools can make enough progress in two or three years to achieve major improvements in students' thinking, self reliance, and enthusiasm for learning. - System Dynamics and K-12 Teachers

For a more detailed introduction to the subject, the System Dynamics Society and Wikipedia both have good overviews. In addition to education, it is used around the world, frequently in developing countries, for planning.


Basics and Other Approaches

While there are many approached out there for modeling and describing how systems behave, at a basic level you have to specify the mathematical equations that define the structure of the system. All of the system's behavior is generated by this structure. The same problems can be solved by writing code in a programming language (models in systems ecology are frequently written in Fortran), but in SD the modeling is customarily done using a visual model editor where you can define the causal relationships, stocks and flows graphically. This greatly lowers the barriers to learning by removing most of the non-modeling aspects of programming like memory management, file IO, syntax, etc. Don Hopkins started a thread on the Sugar mailing list a year ago on this subject, I've incorporated many of those ideas here. In the SD field today there are several commercial offerings [1][2][3] but no open-source solutions. In addition, the commercial solutions are expensive (usually > $500 dollars per single academic license) and many haven't seen a redesign of their user-interfaces since the turn of the millennium. They have a steep learning curve for adults and are not suited for use by children at all.


Differences from eToys and Turtle Art

There are currently two activities that provide some kind of visual programming on the XO, Turtle Art and Etoys. Turtle Art provides a snap-together visual programming environment which can draw colorful art. Etoys provides an environment to easily define rules to control user created objects and run them. Both serve their role, but do not fill the niche that SD modeling can offer. You can see below for an example of how a simple system dynamics model looks - they can make the feedback loops of a system much more clear than the list of equations you would get in either Turtle Art or Etoys. Turtle Art and eToys are very good at describing agents, but are not as expressive at SD for describing the behavior of systems. The three have all have their place on the XO, and there are great possibilities for integrating a SD approach and Turtle art in the future.


Deliverables

I started work this January, 2008 on a simulation engine as the core of my Master's thesis at UiB. I currently have a working model interpreter which can simulate models and output the results as a table. By the summer I'll have this packaged as a shared library which can open, edit, simulate and save models. I would like to adapt and expand the work I'll have done on this by the summer for the XO. For GSoC I would like to produce a first-class System Dynamics modeling Activity, named "Model".


"Model" Activity Details

The Activity will have three main components: a model editor, a model presenter, and tutorials. The model editor will allow kids to easily and visually design models, and the model presenter will allow them to annotate and animate them to show to their peers, families and teachers. The tutorials will be created in the model presenter and packaged with the activity, illustrating the basics of system dynamics and how to use Model. The goal will be to have a functional activity early on, and incrementally add features through the rest of the summer. This way if any unforeseen troubles crop up or push deadlines back, there will be a product No Matter What. I should say I plan on continuing the project into the fall and beyond, but its always best to be on the safe side.

Model Editor

The models created will look similar to the following mockup, but may span several pages (or 'sketches') when they become too big to fit on one screen. I'll be using the [[human interface guidelines, and will have a toolbox at the top. Modeling will eventually be a collaborative activity, several people can work on editing a model at once and models would be saved in the Journal as usual. I've been spending my time recently on actively developing the simulation engine, so while I have many ideas for the Editor, I'm also wide open to suggestions.

Rabbit Model mockup

The modeling pallet will be where users can click to add stocks (like population), flows (the thick lines in and out of stocks), variables (that define the rates of flows, and others), and influence (the blue arrows, showing where variables and stocks are referenced) to the model. Children will also be able to add shadow variables, variables that are defined in other parts of the sketch or on other sketches. It will look similar to the following:

Undo Redo Copy Paste Stock Rate Variable Influence Shadow

There are two big things that I would like to see for equation editing: tokens for referencing other variables and something like interactive latex formatting for the equation field. With something like the tokens you can use in Cocoa on OSX (NSTokenView), it would ease the problem of typing in long variable names, they could be autocompleted or dragged in, and only valid identifiers would show up as tokens. This could be created as a subclass of GtkEntry or GtkEntryCompletion. As for the interactive equation formatting, I'm envisioning something like what is available in Grapher, again on OSX. These two components aren't core functionality, and will be worked on after the editor, presenter, and tutorial are complete, time allowing.

Presentation Creator

System dynamics can bring large insights to common problems for the people creating the models. As kids do, they will want to share what they've learned. I want to make that as easy and fun as possible. As you can have One part of this would be revealing a part of their model at a time, to explain each part of the structure on its own and show others how they made it.

Simulation engine

I have a simulation engine that can run models Today. It approximates the solution to a set of equations with respect to time through the Euler method; I will eventually add additional integration techniques. By the summer it will be packaged as a shared library with the ability to edit models, execute them, and provide the data and results. It's written in a sane subset of C++, and I'll be creating Python bindings for it. Eventually I would like to expand this to be able to access and operate on geospatial GIS data (hard), as well as the execution of Turtle Art models (not hard), but that will probably happen in the fall at the earliest.

Integration with GIS

I initially proposed integrating GIS into the simulation engine, but have put that off in order to spend the summer and do a Really Good Job on the activity. I moved the old content here.

Micropolis

I also have many ideas in how to eventually integrate the simulation engine into Micropolis, and allow kids to edit the rules that govern the game through Model. I initially was proposing to do this over the summer too, but its been suggested I put it off to focus on doing one things right. I moved the ideas here.


Availability

I am currently attending courses for my Masters at the University of Bergen in Norway, but will be living in Westchester, NY over the summer (a 45-minute train ride from NYC), and can commit to working a good eight hours per day on the project. Courses end the 30th of May, and I will be back in the US about a week later, available for 10 weeks of solid work on this.

Beginning Timeline Notes

  • Now - May 26 - Continue work on the simulation engine in my free time. Key features I would like to add before GSoC starts are output to SQLite and CSV, live model editing, interaction with the Journal, and creating 'libsim' as a dynamic library. This will let me focus almost exclusively on Model for the summer.
  • April 14 - May 26 - Talk with mentors to hammer down design of the interface, how to implement Sugar specific features and set up the development tool-chain. Getting the design stuff nailed down before the summer will leave me with more time to code things up and squish bugs out. I'll also read and grok the OLPC_Human_Interface_Guidelines HIG
  • May 26 - around June 10 - Class at my university doesn't finish until the 30th of May, and I don't arrive back in the US until around the 10th or 11th of June, so during this time I won't be able to work full time (on average I would say 2-3 hours per weekday).
  • Starting June 11 - Full time GSoC work
    • Week 1 - Get simulation engine running on the XO and saving and loading models from the Journal.
    • Week 2 - Create activity shell: all the toolbars in place with at least placeholder tool icons, and have the model editing tools drawing their respective shapes on the screen, and saving/loading the drawings from the Journal.
    • Week 3 - Implement an equation editor so that the visual representation can be linked to the underlying equations.
    • Week 4 - Allow models to scan several sketches and finish up the model editor.
    • Week 5 - Implement other tools that will be used in presenting the model (text labels, rects, graphs).
    • Week 6 - Implement allowing the model to be revealed piece by piece, and simulated over time (well, the model would be simulated at the beginning, and the results revealed over time. This could be implemented by adding a 'time control' to the sketch, which would place a progress bar at the bottom, along with a start/pause button).
    • Week 7 - Finish presenter editor and implement the equivalent of a slide/sketch sorter.
    • Week 8-9 - Add collaboration and any other missing XO specific features.
    • Week 10 - Catch up on the previous work, or hack at Micropolis.


About Me

Please check out my user page for information about me: Bobbypowers 11:50, 23 March 2008 (EDT)

Links

http://www.systemdynamics.org/
http://en.wikipedia.org/wiki/System_dynamics
http://www.millenniuminstitute.net/
http://lists.laptop.org/pipermail/sugar/2007-March/001829.html
http://www.vensim.com/
http://www.powersim.com/
http://www.iseesystems.com/
http://www.futuresalon.org/2004/11/will_wright_kic.html
http://www.donhopkins.com/drupal/node/142