예제 #1
0
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
예제 #4
0
 def __init__(self, identifier):
     Refinement.__init__(self, identifier)
     self.providedQualityLevels = {}
     self.identifier = identifier
예제 #5
0
 def myType(self):
     return Refinement().TASK
예제 #6
0
 def myType(self):
     return Refinement().DELEGATION
예제 #7
0
 def __init__(self, identifier):
     Refinement.__init__(self, identifier)
예제 #8
0
 def __init__(self, decomposition, identifier):
     Refinement.__init__(self, identifier)
     self.decomposition = decomposition