1. A method of balancing a computing load among a plurality of computing resources in a problem, comprising: determining computing capabilities of a plurality of computing nodes; selectively assigning any of a computing agent role or a server role to the computing nodes; monitoring available resources for the nodes that have been assigned a computing agent role; and reassigning original problem cells among the nodes that have been assigned a computing agent role, as necessary to balance the computing load.