1. A method of solving a dynamic constraint satisfaction problem that comprises a constraint network of variables and constraints, the method comprising: creating a first sub-problem model comprising a first model type, one or more first variables and zero or more first constraints; propagating the first constraints through the constraint network; 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; creating a first sub-problem set comprising a second model type and one or more sub-problem models; connecting the first sub-problem model to the first sub-problem set via a second constraint; and propagating the second constraint through the constraint network.