Systems Engineering is one of the ‘hot’ disciplines right now. According to CNN, it’s the best (or highest paying, or fastest growing, or something) job in America. That’s not why I’m pursuing it, but it at least makes for a nice talking point should the moment require one. Unfortunately, it’s sister sciences, which I happen to be more interested in, haven’t fared as well. “Systems Science”, emphasis on the quotes, has been with us for nearly a hundred years now, but its contributions have been few, it’s tenets are vague, and it’s populated by a few too many nutjobs and crackpots for my comfort.
So, to both improve my understanding of the field and to try to break down what exactly you’re studying when you’re studying “systems”, I’m proceeding with unpacking and exploring some of the basic concepts of the study of systems. It’s a field full of cool-sounding ideas and impressive buzzwords, but how much meat is on those bones? Lets find out.
I’ll jump right in with a big one: complexity. Whenever you see the word ’system’, you can bet that the word ‘complex’ is either tacked on in front or lurking somewhere in the paragraphs below. Simple systems don’t merit study – they tend to fall into the category of already-figured-out. So-called ‘complex systems’ are a large part of why there’s able to be a ’systems’ discipline at all.
But what is complexity? Like many buzzwords, it’s gotten defined over and over again, in a variety of ways. Even in the comparatively more rigorous field of computer science, it seems that everyone and their mother has concocted some definition of complexity. Here’s a short list:
Computational Complexity – From ye old wikipedia, computational complexity “is a branch of the theory of computation in computer science that focuses on classifying computational problems according to their inherent difficulty.” It’s related to finding efficient algorithms for testing and solving problems of various kinds. P=NP is the classic, unsolved problem in computational complexity.
Kolmogorov Complexity – Kolmogorov Complexity is a description of how complex a piece of data or information is, making it closely related to computational complexity. Essentially, the Kolmogorov complexity of a particular sequence is the length of a computer program necessary to output that sequence. The longer the program, the more complex the sequence. Interestingly, under this definition (unlike many other definitions of complexity) a random sequence is the most complex you can get, since it’s impossible to compress. Kolmogorov Complexity is a description of the regularity of a piece of information (from perfectly regular to perfectly irregular) rather than what we would typically intuit to be its complexity. It also has the irritating property of being uncomputable, which hamstrings it’s usefulness somewhat.
Statistical Complexity – (or Effective Complexity). Bear with me as I google. Unlike Kolmogorov Complexity, Statistical complexity seems to be related to the structure present in a particular process – perfectly periodic and perfectly random processes possess no structure, and so are simple as opposed to complex. Statistical complexity is concerned with the degree of pattern or regularity in a process (though I confess what you might use to measure that escapes me). Like Kolmogorov Complexity though, the means of measurement of Statistical Complexity is the length of the computer program that outputs the regularities of a sequence.
The above are all closely related to, or subfields of, Information Theory – they’re about data compression and algorithmic performance. But none of these are what you tend to think of, or what systems engineers refer to, when they talk about something being complex. Let’s make that short list of definitions a little bit longer:
Biological Complexity – Now we’re headed towards familiar territory. Because biology isn’t developed to the point where it can completely describe the processes that produce a behavior, measures of biological complexity tend to based on form, function, or the genetic sequence that codes for an organism. These measures can be tricky, as it’s seldom obvious where to draw the line between different structures or behaviors. And though both are determined (at least initially) by genetic code, the fact that there’s a gap in our understanding between what the gene says and what the organism is and does means that currently it’s not the most useful definition, although in time it may end up being the most accurate.
Physical Complexity – Posited as a measure in the paper where I stole most of my definitions from, physical complexity is a measure of how much information about the environment is contained in a particular sequence. For example, the more information about the environment a gene stores, the more adaptive behaviors it is capable of specifying, and the more complex it becomes. “If A then B” is much less complex than “If A and C and E given G H and I previously, then B F and Q”, although I wonder if the physical complexity of gene sequences might level off once they’re capable of producing organs (such as minds) that can store information about the environment in a different fashion. More precisely defined, physical complexity is a measure of the shared Kolmogorov Complexity of a sequence and its environment.
These definitions, though relating to the physical world, are still rooted in information theory – genes coding for an organism is no different than a computer program outputting a string of data. Moving away from these definitions brings us closer to what we traditionally think of as complexity. Unfortunately, this serves only to illustrate the uselessness of those intuitions:
From the wikipedia article on “complex systems”:
A complex system is a system composed of interconnected parts that as a whole exhibit one or more properties (behavior among the possible properties) not obvious from the properties of the individual parts.
From the wikipedia article on “complex adaptive systems”:
A CAS behaves/evolves according to three key principles: order is emergent as opposed to predetermined (c.f. Neural Networks), the system’s history is irreversible, and the system’s future is often unpredictable.
From a MITRE newsletter:
“Complexity is a fuzzy concept,” says Lashon Booker, principal engineer for the Center for Washington Command, Control, and Communications (WC3). “There are prototypical examples of complex systems, such as economies and social systems; however, trying to draw boundaries and determining that everything inside is complex and everything out isn’t, I think, misses the point. Complex systems typically have some characteristic properties, but the extent to which a particular system exhibits any given property can vary.”
This is what often gets referred to when discussing ‘complexity’, and it’s the least precise definition yet. Read about ‘Complex Systems’, ‘Complexity Theory’, or other miscellanea with the word ‘Complex’ in it and you’ll see a vague definition like the one above, and a list of the properties that supposedly characterize a complex system. These include:
-emergence
-non-linearity
-self-reference
-fuzzy boundaries
-an open (as opposed to closed) system
These topics all have something in common: they’re all poorly understood, almost as if someone drew a line around a group of topics we haven’t figured out and called it a field of study. Some pattern seemingly ‘emerges’ out of nowhere? Complexity! Feedback loops causing unpredictable behavior? Complexity! Non-linear or ‘chaotic’ behavior that can’t be foreseen? Complexity! Don’t know where something starts or stops? Complexity! Self-reference or deep, recursive hierarchies doing something weird? Complexity! You can’t talk about any of them without using the phrase “don’t know”. It’s a field defined by our ignorance.
Take traffic, for example. Traffic/road systems have many of the properties of supposed complex systems – many small agents, fuzzy boundaries, an open system, etc. But they’re seldom talked about as an example of complex systems because we’re not ignorant of them – traffic pattern analysis and traffic engineering are well-defined disciplines. It’s only when we fail at understanding something that we apply the complexity label to it.
And I strongly suspect that these ‘mysterious’ behaviors of complex systems are really problems of computation or information theory in disguise. For example, one of the few useful concepts to come from the field of cybernetics is Ashby’s Law of Requisite Variety, which states: “The larger the variety of actions available to a control system, the larger the variety of perturbations it is able to compensate.” This seems little more than a restatement of the definition of Physical Complexity. And the only coherent definition of ‘emergence’ that I’ve come across has been an information-theoretical one.
So when you’re talking about complexity, you’re talking about one of two things:
1) A computer program outputting a sequence of data
2) Something you don’t understand
Systems engineering is about engineering a process, about creating something that does something. In principle, any process can be viewed as a computation (though I’ll bet many systems scientists would love to invoke the magic of ‘holism’ to explain why that isn’t the case), bringing us squarely into the realm of Information Theory. In short, complexity, fuzzy topic it may be, is over-defined. Problems of complexity are problems of computation or information theory in disguise, and any attempt so study or solve them will have to either look to those disciplines, or forgo a mathematical answer and use a heuristic, intuitionist approach. But pontificating about the magic and mysteriousness of complexity, as systems people seem to enjoy doing, is unnecessary. You can stop writing papers about “What is Complexity?” – we don’t need any more.