1. A distributed resource allocation system, comprising: a plurality of resources, each of the resources having a resource manager, with each resource manager having a processor and a memory encoded with knowledge of its own resource capabilities and being configured to cause the processor to execute instructions encoded on the memory to perform operations of: (a) receiving both a desired system state and a current system state; (b) computing a difference between the desired system state and the current system state; and if the difference between the current system state and the desired system state is less than or equal to a predetermined threshold, then exiting; or if the difference between the current system state and the desired system state is greater than the predetermined threshold, then perform the following: i. based on the resource capabilities and the current system state and desired system state, each resource manager independently determines an expected rate of information gain (RIG) if used to move the current system state toward the desired system state; ii. communicate the expected RIG to other resource managers; iii. review the expected RIG s and collectively determine with other resource managers which resource has the highest expected RIG in moving the current system state to the desired system state, with the resource with the highest expected RIG then being designated as an allocated resource to perform an allocated task in order to move the current system state toward the desired system state, with the remaining resources then being designated as unallocated resources having unallocated resource managers; iv. compute an expected modified current system state due to the expected RIG of the allocated resource; v. wherein the unallocated resource managers repeat the operations above until the plurality of resources have been allocated; and wherein each allocated resource is further configured to perform the allocated task, which results in an updated current system state, and where upon completion of the allocated task, each corresponding resource manager is configured to repeat operations (a) through (b)(v).