1. A method of solving a dynamic constraint satisfaction problem that comprises a constraint network of variables and constraints, the method comprising: creating a sub-problem variable associated with a sub-problem model type, wherein the sub-problem variable comprises one or more first variables, the sub-problem model type and zero or more first constraints, wherein the sub-problem variable comprises an encapsulation of sub-problem elements into a variable; propagating the first constraints through the constraint network; when propagating each of the first constraints, when a node has changed in response to the propagation, saving a previous state of the changed node and associating the previous state with the first constraint that caused the change before propagating the next of the first constraints; determining if a first conflict is detected from propagating the first constraints; if the first conflict is detected, restoring the constraint network variables to a first previous state before the first constraints were propagated, wherein the restoring comprises retrieving one or more of the saved previous states; if the first conflict is not detected, creating a first sub-problem set associated with the sub-problem model type and comprising the sub-problem variable associated with the sub-problem model type; connecting the sub-problem variable to the first sub-problem set via a second constraint; and propagating the second constraint through the constraint network.