Complexity theory is a set of theoretical frameworks used for modeling and analyzing complex systems within a variety of domains. Complexity theory draws upon models developed in many different areas such as computer science, ecology, physics, mathematics, and engineering. Out of these different models has emerged a core set of commonalities that over the past few decades has come to be recognized as a generic framework for studying complex systems in the abstract. Complexity theory encompasses a very broad and diverse set of models and methods, such as network theory, systems theory, nonlinear systems dynamics and it associated with the used of computational tools such as cellular automata and agent-based models.