1. A method for reusing information associated with a constraint solving operation for a problem domain, the method comprising: receiving a canonical representation for a constraint problem from the problem domain; searching through a problem cache for an entry which corresponds to the canonical representation; and if a corresponding entry does not exist in the problem cache, producing an entry in the problem cache for the canonical representation; otherwise if a corresponding entry exists in the problem cache, generating a solution to the canonical representation by reusing a solver heuristic associated with the corresponding entry in the problem cache.