git @ Cat's Eye Technologies Samovar / 74ff4fe
Fix some bugs. The complete generator does indeed seem to work. Chris Pressey 2 years ago
2 changed file(s) with 8 addition(s) and 8 deletion(s). Raw diff Collapse all Expand all
33 shortest path of events that leads to the goal state
44 (if any such path exists).
55 """
6 #
7 # NOTE, this is only a rough sketch at the moment!
8 #
96
107 import sys
118
2724 situations = [
2825 ([], Database(self.scenario.propositions, sorted_search=self.sorted_search))
2926 ]
30 goal_has_been_met = False
3127
32 while not goal_has_been_met:
28 while True:
3329 new_situations = []
30 if self.verbosity >= 2:
31 sys.stderr.write("Considering {} situations\n".format(len(situations)))
3432 for (events, state) in situations:
3533 for rule, unifier in self.get_candidate_rules(state):
3634 new_event = Event(rule, unifier)
3735 new_state = state.clone()
38 self.update_state(state, unifier, rule)
36 self.update_state(new_state, unifier, rule)
3937 new_events = events + [new_event]
4038 if self.goal_is_met(new_state):
4139 return new_events
4240 new_situations.append(
4341 (new_events, new_state)
4442 )
43 if self.verbosity >= 2:
44 sys.stderr.write("Installing {} new situations\n".format(len(new_situations)))
4545 situations = new_situations
2626 sys.stderr.write("Generating {} events\n".format(count))
2727 self.reset_state()
2828 if self.verbosity >= 2:
29 self.debug_state("Initial")
29 self.debug_state(self.state, "Initial")
3030 events = []
3131 for i in xrange(0, count):
3232 event = self.generate_event()
3434 break
3535 events.append(event)
3636 if self.verbosity >= 2:
37 self.debug_state("Final")
37 self.debug_state(self.state, "Final")
3838 acceptable = self.goal_is_met(self.state)
3939 if not acceptable:
4040 count = int(float(count) * lengthen_factor)