Friday, January 16, 2004 2:06 PM
richard
Complex Adaptive Systems in C#: Part 1 - Intro
Many of you may wonder exactly what Complex Adaptive Systems are. Good and fair question for a post with “Intro“ in the title - but rather than spend a lot of time defining them myself, I'm going to give my extra-brief working definition (to keep this byte-sized and readable). The blog here defines CAS as
“A complex, nonlinear, interactive system which has the ability to adapt to a changing environment.”
This definition works for me and so I use CAS as the umbrella term for the branches of computing known as AI (Artificial Intelligence), ALife (Artificial Life), Evolutionary Algorithms, Emergence etc. Here are some other resources (and of course, Google knows all). To compare and contrast: most systems we build in our 'everyday' roles as programmers require deterministic, repeatable, unchanging functionality. Unexpected behaviors are usually considered bad. But CAS systems are usually built to model and solve problems that don't have known answers - or have answers that are inadequate and need to be made better (optimization). CAS systems often are built to solve these type of fuzzy, ambiguous problems and the programs themselves are always given a certain amount of the burden of reaching a goal or multiple goals. Typically a CAS will demonstrate emergent behavior: behavior that was never explicitly written in, but occurs as a result of the interaction of the individual parts of the system.
Which brings me to the point of C#, the .NET Framework and CAS. In this series of posts I'm going to blog about the issues at the intersection of C# and CAS. Issues that have come up with me implementing various algorithms and the strengths and weaknesses of C# in terms of implementing real-world systems that I am creating. I believe C# combined with the Framework and it's combination of OO and procedural/imperative styles along with its type safety yet with dynamic code generating flexibility make it an extremely compelling environment to code CAS systems in. I have already made use of many of the specific abilities of C# and .NET and I'm looking forward to describing them here.