ICDM
The Integrated Cooperative Decision Making (ICDM) toolkit is a software development framework that facilitates the design and production of intelligent decision-support applications. ICDM enables the auto-generation of generic code, establishes programming procedures for CDM developers, and documents design modifications. With these three features, programmers can concentrate on manually coding domain-specific information, designing intelligent agents, and building interface functions.
The core component of an ICDM-based application is a virtual representation of real-world objects and the relationships between them. For example, if High Mobility Multi-Purpose Wheeled Vehicles (HMMWV—or Humvee) were the domain being represented, an ICDM-based application would be programmed to virtually represent every aspect that defines that vehicle (engine type, lug nut size, wheel size) and how they are all linked to each other (each Humvee has at least one engine, four wheels and so forth).

Figure 1: A simplified object model of a Humvee domain.
With this representation of information (i.e., data and relationships), CDM programmers can build software modules—referred to as intelligent agents—that reason about domain-specific information in order to perform information-based tasks. Examples of such tasks include: monitoring events in dynamically changing situations; detecting conflicts; triggering warnings and alerts; formulating and evaluating alternative courses of action; and collaboratively assessing situations. Typically, in ICDM-based applications, intelligent agents collaborate with one another and the human users in their monitoring, planning, and evaluation activities.
An ICDM-based software development process:
Provides a convenient, structured means of creating information-centric systems in which intelligent agents assist users to accelerate the decision-making process.
Automatically generates a generic code base so that developers can concentrate on coding domain-specific interface functions and designing intelligent agents.
Focuses the development process on the design, rather than the implementation, of the software and structures this process into clearly defined stages
Creates a common language across multiple applications, which provides a development platform for achieving interoperability.
Saves developers weeks of development time during the initial software development period.


