Modeling Complex Systems



Explanation in science is reduced to relationships: one thing is explained by being related to something else. A good theory is not one that gives an ultimate cause of events, but merely one that relates many different events through a few simple ideas and equations.

Kenneth W. Ford



For whom the bell tolls

This website is designed for people who want to solve difficult problems that arise in complex systems, and are looking for a means to do so. Be assured you are in the right place. We hope to show you how solving these problems is best accomplished by building a dynamic model of the system of interest, showing how these problems arise in that system, and only then proposing solutions based on that understanding. The effects of your proposals can then be thoroughly evaluated using your dynamic model.

This approach is based on our belief that these problems can best be solved if we have a firm understanding of how they arise. For complex systems this means dealing with any number of interrelationships that define the system. The interrelationships in complex systems form one or more feedback loops, which make for behavior and solutions that are often counterintuitive. Your model will reveal the cause of this type of behavior, and allow you to propose solutions that solve the problems, not merely treat the symptoms. We have been taught throughout our formal schooling, and life, to think of cause and effect as a simple relation. That may be true for very simple systems, but it is definitely not the case where relations are embedded in a network of relations, as is the case for complex systems.

How this site is organized and viewed by its developers

Organization is by far the most difficult aspect of any project, including this one. This site is organized as a series of collections, each of which deal with a set of related problems. The Site Map of this website identifies these collections with a title intended to describe each collection. The first of these is called Model Construction, the next Health/Medicine.

The identifiers of each of the members of these collections purport to indicate their purpose. For example, the identifier Methodology in the Model Construction collection will contain a book length description of how to build a dynamic model of a complex system from scratch in either the Java or Python programming languages. Other collections will be added at our discretion. Readers, once familiar with the methodology we propose, are encouraged to submit their own collections for publication on this site.

Which brings us to the question of ownership. Everything available on this site and in its associated Forum is freely available to our readers for personal or commercial use. This does not mean, however, that anyone can take material verbatim from this site and monetize it as a publication, or submit it as a journal paper under a different authorship. We reserve these rights for ourselves or the authors of a particular collection. Therefore, any use of the printed material found here that qualifies as copyright infringement is strictly prohibited. The code, however, can be used freely in any models that you may build. Authorship citation in your code comments would be appreciated.

This site is not financed by anyone except its writers. The writers receive no direct compensation for its publication. In addition there is no advertising associated with this site so you can read and absorb the contents in peace. Also, we assure you that to the best of our knowledge, there is no malware lurking about in our web pages, model code, or downloadable documents. Since you will be writing your own code from scratch, based on what you read here, you will have full control of its contents.

Why this site?

At least one of our authors has over 40 years of experience building dynamic models. He would like to share his understanding of how best to build dynamic models with a minimum of grief. Modeling has often been augmented by commercial tools that purport to make the process simpler and faster (but not less expensive). That may be true for simple systems with no unusual characteristics not envisioned by the tool builders. Of course, no tool exists that meets these specifications. It turns out to be relatively straightforward to build dynamic modes from scratch, and with much less frustration than trying to work around the limitations of a modeling tool.

The types of systems you will be able to model can be multiscale, continuous, discrete, deterministic, stochastic, or possess any combination of these characteristics. We will take advantage of all the features of the programming languages we use for development, and include the latest thinking in programming design without regard to favoring one school of thought over another. We do however avoid strictly procedural organizational schemas, and lean heavily on object oriented program design because it lends itself well to our model building paradigm.

With AI playing such a key role in problem solving efforts now, and in the future, one might wonder why we take the trouble to describe a methodology that does not use machine learning to solve these problems. The answer is that our dynamic models do not depend on large data sets to arrive at their conclusions. In fact, it is often impossible to acquire the needed data sets because of the inherent constraints posed by the system itself. We also doubt that AI will ever be able to analyze a real-life system and abstract it in the way we propose here.

Be that as it may, we will most likely find machine learning and dynamic system modeling to be quite complementary tools. AI will be particularly helpful in finding the parameters often needed to fully describe a system. Think of the effort that goes into acquiring proportionality constants that often appear in equations that represent a relation between system variables. The Standard Model of particle physics requires 25 of these. One of the oldest examples appears in Isaac Newton's expression for the gravitational force between two objects: the well known Gravitational constant.

On methodology and a host of other things

What we are offering in the methodology described here is a means to produce and test code, quickly, reliably, and at low cost. We are not describing how to produce commercial ready code. Think of our development environment much like a chemist (not a computational chemist) thinks of their lab bench — with pieces of tubing and flasks and Bunsen burners strung together in order to test the feasibility of a process. That's all you really need to do: test the feasibility of the solutions you are proposing to solve a problem. You are not going to write bulletproof code for the masses. It's a whole different coding paradigm when done our way: much faster and much more reliable because you can actually see what's going on, make changes to the code quickly, recompile and run immediately.

This is not to say that we encourage or accept writing spaghetti code. We are adamant about requiring excellent coding practices of ourselves. Using our methodology, however, you won't be able to hand your code off to interested parties in its current form. You can always give it to a CS professional to make it commercially viable if you so desire. Our task, as described in the current and future collections on this website, is to help you solve a difficult problem. We place our focus on system description and coding in order to reveal the reasons for the unique behavior of a complex system.

More than a methodology is offered here. The important field of health and medicine will be addressed as we attempt to describe the human biosystem in such a way as to help solve currently intractable health related problems. For example, disorders which are classified as autoimmune or idiopathic by the medical profession.


You need not be an expert in any field to use this website for its intended pupose. We will carefully explain every procedure that we present in our problem solving discussions. You will find this approach very helpful when learning a new subject, especilly when we are presenting a new topic in the field of computer science. Rather than expecting you to learn everthing there is to know about a computer language, we will show you what can safely be ignored.

On the other hand, a good deal of knowledge is required to solve the problems you will enconter in model constuction and health/medicine. To assist you in understanding the systems in which these problems arise, we have included a human-readable resource database on this site. Updating the entries in this database is an ongoing process; we welcome any suggestions you may have to add or modify this database.

The database consists mostly of references to textbooks and videos associated with a given subject and its related topics. References to journal articles are not stored in the database. There is enough informaton in the database to form the curricula of many diferent major fields of study at the undergraduate and graduate level. We recommend that you spend some time selecting and organizing the available information into a curriculum of study for your own purposes.

Finally: about this website

Putting stuff out on a website takes time. Time we would rather spend enhancing our models and modeling paradigm rather than producing nicely framed web pages. Therefore, a lot of communication on this site will take place via pdf files. Files that we have generated elsewhere using construction tools that are easier to use than having to work in an HTML/CSS/JavaScript environment. We write our own website code using the Dreamweaver editor, but not its design feature. We do like its editor, file transfer capabilities, informational displays, link creation features, and organizational schema in general. It comes with the Adobe CC package which we will have more to say about when we address the Model Construction collection.