def add_merge_actions(self): # should be general enough for any kind of salad / raw plated veggies # alphabetical, joined by dashes ex. Ingredient1-Ingredient2-Plate #self.full_name = '-'.join(sorted(self.contents + ['Plate'])) # for any plural number of ingredients for i in range(2, len(self.contents) + 1): # for any combo of i ingredients to be merged for combo in combinations(self.contents_names, i): # can merge all with plate self.actions.add(recipe.Merge('-'.join(sorted(combo)), 'Plate',\ [recipe.Merged('-'.join(sorted(combo))), recipe.Fresh('Plate')], None)) # for any one item to be added to the i-1 rest for item in combo: rem = list(combo).copy() rem.remove(item) rem_str = '-'.join(sorted(rem)) plate_str = '-'.join(sorted([item, 'Plate'])) rem_plate_str = '-'.join(sorted(rem + ['Plate'])) # can merge item with remaining if len(rem) == 1: self.actions.add(recipe.Merge(item, rem_str,\ [recipe.Chopped(item), recipe.Chopped(rem_str)], None)) self.actions.add(recipe.Merge(rem_str, plate_str)) self.actions.add(recipe.Merge(item, rem_plate_str)) else: self.actions.add(recipe.Merge(item, rem_str)) self.actions.add(recipe.Merge(plate_str, rem_str,\ [recipe.Merged(plate_str), recipe.Merged(rem_str)], None)) self.actions.add(recipe.Merge(item, rem_plate_str))
def add_ingredient(self, item): self.contents.append(item) # always starts with FRESH self.actions.add(recipe.Get(item.name)) if item.state_seq == FoodSequence.FRESH_CHOPPED: self.actions.add(recipe.Chop(item.name)) self.actions.add(recipe.Merge(item.name, 'Plate',\ [item.state_seq[-1](item.name), recipe.Fresh('Plate')], None))
def __init__(self, world, recipes): self.initial = recipe.STRIPSState() self.recipes = recipes # set initial state self.initial.add_predicate(recipe.NoPredicate()) for obj in world.get_object_list(): if isinstance(obj, Object): for obj_name in ['Plate', 'Tomato', 'Lettuce', 'Onion']: if obj.contains(obj_name): self.initial.add_predicate(recipe.Fresh(obj_name))