Example #1
0
def predictSuccess(current_skills, equation):
    curr_skills_KB = FolKB()
    required_skills_KB = FolKB()
    required_skills = set()
    # Create KnowledgeBase for current skills that exist
    for skill in current_skills:
        curr_skills_KB.tell(expr(skill))

    steps_for_solving = solveEquation(equation)
    lht = getLeftTerms(equation)
    rht = getRightTerms(equation)
    divisor = calcDivisor(lht, rht)
    rht_var_combine = calcCombineVars(rht)
    lht_var_combine = calcCombineVars(lht)

    for step in steps_for_solving:
        if 'addVar' in step:
            if step[6] == '-':
                required_skills.add('S2')
            else:
                required_skills.add('S1')
        elif 'addConst' in step:
            if step[9] == '-':
                required_skills.add('S4')
            else:
                required_skills.add('S3')
        elif 'divide' in step:
            if divisor > 0:
                required_skills.add('S5')
            else:
                required_skills.add('S6')
        elif ('combineRightConst' or 'combineRightConstTwo') in step:
            required_skills.add('S9')
        elif 'combineLeftVar':
            if (rht_var_combine > 0) | (lht_var_combine > 0):
                required_skills.add('S7')
            else:
                required_skills.add('S8')

    for sk in required_skills:
        required_skills_KB.tell(expr(sk))
    for curr_sk in curr_skills_KB.clauses:
        if curr_sk in required_skills_KB.clauses:
            required_skills_KB.retract(curr_sk)

    missing_skills = required_skills_KB.clauses
    return missing_skills
Example #2
0
    def act(self, kb, args):
        """Executes the action on the state's knowledge base"""

        if isinstance(kb, list):
            kb = FolKB(kb)

        if not self.check_precond(kb, args):
            raise Exception('Action pre-conditions not satisfied')
        for clause in self.effect:
            kb.tell(self.substitute(clause, args))
            if clause.op[:3] == 'Not':
                new_clause = Expr(clause.op[3:], *clause.args)

                if kb.ask(self.substitute(new_clause, args)) is not False:
                    kb.retract(self.substitute(new_clause, args))
            else:
                new_clause = Expr('Not' + clause.op, *clause.args)

                if kb.ask(self.substitute(new_clause, args)) is not False:    
                    kb.retract(self.substitute(new_clause, args))

        return kb
Example #3
0
    def act(self, kb, args):
        """Executes the action on the state's knowledge base"""

        if isinstance(kb, list):
            kb = FolKB(kb)

        if not self.check_precond(kb, args):
            raise Exception('Action pre-conditions not satisfied')
        for clause in self.effect:
            kb.tell(self.substitute(clause, args))
            if clause.op[:3] == 'Not':
                new_clause = Expr(clause.op[3:], *clause.args)

                if kb.ask(self.substitute(new_clause, args)) is not False:
                    kb.retract(self.substitute(new_clause, args))
            else:
                new_clause = Expr('Not' + clause.op, *clause.args)

                if kb.ask(self.substitute(new_clause, args)) is not False:
                    kb.retract(self.substitute(new_clause, args))

        return kb