def test_refinement(): refinement = Refinement() task = Task("T1") delegation = Delegation("D1") goal = Goal(Decomposition.AND, "G1") assert task.myType() is refinement.TASK assert delegation.myType() is refinement.DELEGATION assert goal.myType() is refinement.GOAL
def isAchievable(self, goal, current, interp): # Check if Goal is achievable for current context if not self.isApplicable(goal, current): return None # Active taks or goals that are dendencies for self.goal achievement dependencies = goal.getApplicableDependencies(current) if goal.decomposition == Decomposition.OR: # if decomposition is OR return first achievable plan from dependencies list for dep in dependencies: if(dep.myType() is Refinement().GOAL): if type(dep).__name__ == 'Pragmatic': dep.isAchievable(current, interp) else: plan = self.isAchievable(dep, current, interp) elif(dep.myType() is Refinement().TASK): plan = self.isAchievableTask(dep, current, interp) else: return None if plan: return plan return None else: # else decomposition is AND return achievables plans list from dependencies list complete = Plan() for dep in dependencies: if(dep.myType() is Refinement().GOAL): if type(dep).__name__ == 'Pragmatic': plan = dep.isAchievable(current, interp) else: plan = self.isAchievable(dep, current, interp) elif(dep.myType() is Refinement().TASK): plan = self.isAchievableTask(dep, current, interp) else: return None if plan: complete.add(plan) else: return None if len(complete.getTasks()) > 0: return complete else: return None
def isAchievable(self, goal, current, interp): plan = None # Check if Goal is achievable for current context if not self.isApplicable(goal, current): return None # Active taks or goals that are dendencies for self.goal achievement dependencies = goal.getApplicableDependencies(current) if goal.decomposition == Decomposition.OR: # if decomposition is OR return first achievable plan from dependencies list for dep in dependencies: if (dep.myType() is Refinement().GOAL): newInterp = self.mergeInterp(goal, interp) self.isAchievable(dep, current, newInterp) elif (dep.myType() is Refinement().TASK): if self.isAchievableTask(dep, current, interp): value = dep.getValue(current) weight = dep.getWeight(current) goal.setItem(dep, value, weight, goal.identifier) if dependencies: if goal.parentNode.decomposition is Decomposition.AND: if goal.task: if goal.parentNode.parentNode is None: plan = self.createKnapsackTable( interp, goal, current) if plan: return plan else: return goal else: maxTask = None maxValue = 0 for dep in goal.dependencies: if dep.maxValue > maxValue: maxValue = dep.maxValue maxTask = dep goal.maxValue = maxValue goal.solution = maxTask.solution return maxTask.solution return None else: # else decomposition is AND return achievables plans list from dependencies list for dep in dependencies: complete = None if (dep.myType() is Refinement().GOAL): newInterp = self.mergeInterp(goal, interp) plan = self.isAchievable(dep, current, newInterp) elif (dep.myType() is Refinement().TASK): if self.isAchievableTask(dep, current, interp): value = dep.getValue(current) weight = dep.getWeight(current) goal.setItem(dep, value, weight, goal.identifier) plan = None else: return None if plan: if type( plan ).__name__ == 'Goal' and plan.interp.getQualityConstraints: complete = self.createKnapsackTable( plan.interp, plan, current) for item in complete.tasks: value = item.getValue(current) weight = item.getWeight(current) goal.setItem(item, value, weight, item.parentNode.identifier) if type(plan).__name__ == 'Plan': for item in plan.tasks: value = item.getValue(current) weight = item.getWeight(current) goal.setItem(item, value, weight, item.parentNode.identifier) else: goal.mergeKnapsack(plan, plan.interp) if dependencies: if goal.task: complete = self.createKnapsackTable(interp, goal, current) return complete
def __init__(self, identifier): Refinement.__init__(self, identifier) self.providedQualityLevels = {} self.identifier = identifier
def myType(self): return Refinement().TASK
def myType(self): return Refinement().DELEGATION
def __init__(self, identifier): Refinement.__init__(self, identifier)
def __init__(self, decomposition, identifier): Refinement.__init__(self, identifier) self.decomposition = decomposition