| OCR Text |
Show 72 An important note about lisp. The variables RootObjects and SuspectConstraints are declared to be 'fluid'. Any function called by flrstSolutlon may access the variables declared by flrstSolutlon. NewSolutlon can and will access and modify the values of both RootObjects and SuspectConstraints. 8.2.2 NewSolutlon NewSolutlon examines the ~et of objects requiring recomputation and the set of unsatisfied constraints to determine the next constraint group to be satisfied. A new satisfaction phase record is pushed onto the satisfaction phase stack and nextSolutlon is invoked to find a constraint satisfaction and continue the search. NewSolutlon is not a user callable function. It encapsulates functionality shared between flrstSolutlon and nextSolutlon. 1. The list of affected constraint groups can be found by finding the union of the premise_of sets of the objects in RootObjectsllst and the constraint group identifiers of the constraints in UnsatisfiedConstraintslist. Each constraint group in this list is guaranteed to require satisfaction because either one of its constraints is unsatisfied now or will become unsatisfied by some phase of dependency propagation. 2. If the list of affected constraint groups is empty, then the set of unsatisfied constraints must also be empty. Propagate dependencies from the objects In RootObjectslist and terminate. The model has been satisfied. 3. If the list of affected constraint groups is not empty, then find the set of dependent constraint groups by finding the union of the dependent group lists in each constraint group identifier. 4. Find an independent constraint group. Any constraint in the affected constraint group list and not in the dependent constraint group list is an independent constraint group. 5. Propagate dependencies from the objects in RootObjectslist which are ancestors of the independent group using topologlcaiEval (section 4.1 ). When an object with constraints is recomputed, its constraints are added to UnsatisfiedConstraintsllst since they are probably unsatisfied. Ancestors will contain the independent group as a member of their premise_of sets, objects which are not ancestors will not. 6. Find the set of unsatisfied constraints in UnsatisfiedConstraintslist which belong to the independent constraint group. 7. Create a new satisfaction phase record containing the independent constraint |