The desire to build high levels of autonomy into distributed heterogeneous systems has led to new developments combining several areas of research including control theory, computational intelligence, economics, and cognitive psychology. However, there still are many unsolved problems in this area. This particular body of work focuses on two aspects of the autonomy problem and the benefit of interactions between the two. First is task allocation. When considering the control of a group of heterogeneous systems, a central issue is to determine which tasks should be accomplished by each of the systems in the group. The second area of consideration is the control that is used in each of the systems in the group. These controls are generally designed using methods that consider the dynamics of the underlying system. By appropriately designing algorithms that incorporate controller design with task allocation, the resulting solutions will be optimal in the sense that they utilize the best possible control policy for a given set of tasks.