This project is concerned with investigating and developing the basic mechanisms that enable collectives of software agents to self-organise, self-repair and self-optimise in response to dynamic environments. Such autonomic behaviour is needed to ensure the agents are able to best achieve both their individual objectives and the objectives of the collective as a whole in the face of a constantly changing and highly uncertain operational environment. In such cases, the resources available (communication and computation) to the agents are in a constant state of flux and the set of agents in the system is constantly changing. In such cases, it is impossible for the a priori system design to continue to be maximally effective because many of its operational assumptions and parameters are changing. Thus, the system can gradually degrade its performance or it can endeavour to respond to such changes by reorganizing itself in order to best achieve its objectives.