Reasoning Fuzzy Logic and The Rule Application Andrew Diniz da Costa Fábio de Azevedo Sérgio Ciglione [email protected] [email protected] [email protected] Roadmap • Introduction • Fuzzy Logic • The Rule Application • Simulations • Final Considerations © LES/PUC-Rio Introdução • Aristóteles, filósofo grego, foi o fundador da ciência da lógica. • Estabeleceu um conjunto de regras rígidas para que conclusões pudessem ser consideradas logicamente válidas. • Linha de raciocínio lógico baseado em premissas e conclusões. • Exemplo • Premise 1: All humans are mortal. • Premise 2: Socrates is a human. • Conclusion: Socrates is mortal. © LES/PUC-Rio Introdução • Desde então, a lógica Ocidental, assim chamada, tem sido binária, isto é, uma declaração é falsa ou verdadeira, • Não podendo ser ao mesmo tempo parcialmente verdadeira e parcialmente falsa. • Esta suposição e a lei da não contradição, que coloca que "U e não U" cobrem todas as possibilidades, formam a base do pensamento lógico Ocidental. © LES/PUC-Rio Lógica Fuzzy • A Lógica Difusa (Fuzzy Logic) viola estas suposições. • O conceito de dualidade, estabelecendo que algo pode e deve coexistir com o seu oposto, faz a lógica difusa parecer natural, até mesmo inevitável. • A lógica de Aristóteles classifica como verdade ou falsidade. • Experiências humanas não podem ser classificadas simplesmente como verdadeiras ou falsas, sim ou não, branco ou preto. • Ao trabalhar com a lógica fuzzy é comum chamar a lógica booleana de lógica nítida. © LES/PUC-Rio Lógica Fuzzy • Exemplos: – Aquele homem é alto ou baixo? – A taxa de risco para aquele empreendimento é grande ou pequena? • Um Sim ou Não, na maioria das vezes, é incompleta. • Na verdade, entre a certeza de ser e a certeza de não ser, existem infinitos graus de incerteza. • Tratada matematicamente no passado com o uso da teoria das probabilidades. © LES/PUC-Rio Lógica Fuzzy • Lógica Difusa, com base na teoria dos Conjuntos Nebulosos (Fuzzy Set), tem se mostrado mais adequada para tratar imperfeições da informação do que a Teoria das Probabilidades. • Lógica Difusa: “Uma ferramenta capaz de capturar informações vagas, em geral descritas em uma linguagem natural e convertê-las para um formato numérico, de fácil manipulação pelos computadores de hoje em dia.” © LES/PUC-Rio Lógica Fuzzy • Conjunto nebuloso estende o conceito de conjunto permitindo que um elemento passa a ter um grau de pertinência variando entre 0 e 1, ao invés de pertencer ou não ao conjunto como na teoria de conjuntos tradicional. • Permitem que estados indeterminados possam ser tratados por dispositivos de controle, como por exemplo avaliar conceitos como morno, médio... © LES/PUC-Rio Lógica Fuzzy • O raciocínio fuzzy também é conhecido como raciocínio aproximado e pode ser dividido em 5 etapas. 1. Transformação das variáveis do problema em valores fuzzy, ou fuzzificação 2. Aplicação dos operadores fuzzy 3. Aplicação da implicação 4. Combinação de todas as saídas fuzzy possíveis 5. Transformação do resultado fuzzy em um resultado nítido, a defuzzificação. © LES/PUC-Rio Lógica Fuzzy • Passo 1: Transformação das variáveis do problema em valores fuzzy, ou fuzzificação – para cada valor de entrada associamos uma função de pertinência, que permite obter o grau de verdade da proposição. – Determinar o grau de pertinência de cada conjunto (proposição); – Limitar o valor da entrada entre 0 e 1. • Passo 2: Aplicação dos operadores fuzzy – aplicar os operadores fuzzy, assim como os operadores da lógica nítida: AND e OR, conhecidos como operadores de relação. © LES/PUC-Rio Lógica Fuzzy • Passo 3: Aplicação da implicação – Aplicar o operador de implicação, usado para definir o peso no resultado e remodelar a função, ou seja, criar a hipótese de implicação. – Exemplo: Serviço é excelente OU atendimento é rápido ENTÃO pagamento é alto • Passo 4: Combinação de todas as saídas fuzzy possíveis – Combinação de todas as saídas em um único conjunto fuzzy, algo semelhante ao processo de união e intersecção, na teoria dos conjuntos abruptos. © LES/PUC-Rio Lógica Fuzzy • Passo 5: Defuzzificação – Consiste em retornar os valores; – Obter um valor numérico dentro da faixa estipulada pela lógica fuzzy. © LES/PUC-Rio The Rule Application • Java application that implements both Boolean and fuzzy logic-based inferencing and demostrates the two major types of reasoning algorithms used with rule-based systems: – Forward chaining – Backward chaining • Main classes – Rule – Clause – Boolean Rule Base © LES/PUC-Rio Rule • It is used to define a single rule and also contains methods that support the inferencing process. • Properties – A name data member – A reference to the owning BooleanRuleBase object – A array of antecedent Clauses – A single consequent Clause – Rule’s truth value is stored in the Boolean object. This allows us to move a null value to indicate that the rule’s truth cannot be determined – The fired boolean member indicates whether this rule has been fired or not. © LES/PUC-Rio Clause • Clauses are used both in the antecedent and consequent parts of a Rule. • A Clause is composed by – a RuleVariable on the left-hand size; – a Condition, which testes equality, greater than, or less than; – the right-hand size, which can be a String; – a truth Boolean which indicates whether the clause is true, false, or unknown (null); – A vector of the Rules which contain this Clause; – A consequent boolean which indicates whether the clause appears in the antecendet or the consequent of the rule. © LES/PUC-Rio Clause • Automobile: IF num_wheels=4 AND motor=yes THEN vehicleType=automobile • Clause num_wheels=4 – Rule Variable: “num_wheels” – Condition: “=” – String: “4” © LES/PUC-Rio Boolean Rule Base • Boolean Rule Base defines – A set of Rule Variables – Rules © LES/PUC-Rio The Rule Application – Fuzzy Classes • The FuzzyRuleBase implementation is made up of several classes that roughly parallel the BooleanRuleBase design. These include: – FuzzyRule – FuzzyClause – FuzzyRuleVariable – FuzzySet – FuzzyRuleBase • Main Algorithm – Forward chaining © LES/PUC-Rio FuzzyRule • It is used to define a single rule and also contains methods that support the inferencing process. • Properties – A name data member – A reference to the owning FuzzyRuleBase object – A array of antecedent Clauses – A single consequent Clause – A firedFlag boolean – Each FuzzyVariable has a unique integer ID © LES/PUC-Rio FuzzyClauses • Clauses are used both in the antecedent and consequent parts of a FuzzyRule. • A Clause is composed by – a FuzzyRuleVariable on the left-hand size – a FuzzyOperator, which implements fuzzy comparison or assignment – the right-hand size, which is a FuzzySet • Ex: – VeryFastRule: IF temp is very hot AND humidity is very sticky THEN motor is very fast © LES/PUC-Rio ContinuousFuzzyRuleVariable • For fuzzy rule processing, we define the base FuzzyRuleVariable class and the ContinuousFuzzyRuleVariable subclass that supports the use of FuzzySets in inferencing. • A ContinuousFuzzyRuleVariable is composed by – Name of the variable – Minimum and maximum values of the domain (called discourse) – Hashtable that holds all of the fuzzy sets and linguistic edges defined for the variable – Two WorkingFuzzySet instances. One valFzy holds the current fuzzy value, while the other one is used as a temporary fuzzy set during inferencing © LES/PUC-Rio FuzzySet • The FuzzySet class is the base class for the sets implamentations like triangle, trapezoid, and shoulder. • A FuzzySet is composed by – Int setType – String setName – String alphaCut – String DomainLo – String DomainHi – Array of Doubles called truthVector that defines the shape of FuzzySet at 256 points © LES/PUC-Rio Membership FuzzySet - Layouts Discourse © LES/PUC-Rio FuzzySet Classes • All the FuzzySets define fuzzy memberships functions whose shape resembles: – Trapezoid: This Fuzzy set takes four parameters, ptLeft, ptLeftCore, ptRightCore, and ptRight to describe the base (left and right) and top (left and right) of the fuzzy set. – Triangle: This Fuzzy set takes three parameters, ptLeft, ptLeftCenter, and ptRight to describe the base (left and right) and top (center) of the fuzzy set. – Shoulder (one half of a trapezoid): This Fuzzy set takes three parameters, ptBeg, ptEnd, and the direction of the shoulder, either right or left. • There’s also the WorkingFuzzySet, one of the major classes in the FuzzyRulesBase. It is used to combine fuzzy sets as we are inferencing with the correlateWith() and implicateWith() methods. © LES/PUC-Rio Fuzzy Rule Base • The FuzzyRuleBase class implements the RuleBase interface and contains: – A name; – A set of FuzzyRuleVariables and FuzzyRules, along with the high-level methods for foward chaining. • The key parameter that control inferencing are the aplhaCut, inferenceMethod, correlationMethod, and defuzzificationMethod members © LES/PUC-Rio Fuzzy Forward-Chaining Implementation • Automatically resets the rules, but not the variables wich may have had their values set by the user. • The factBase is initialized to a BitSet with all bits clear. It´s used to keep track of variables that have been computed. • Unconditional rules are procesed. • Fuzzy forward inferencing logic is performed in the processConditionalRules() method © LES/PUC-Rio Fuzzy Forward-Chaining Implementation public void forwardChain() { Enumeration enum = ruleList.elements(); while(enum.hasMoreElements()){ ((FuzzyRule) (enum.nextElement())).reset(); } BitSet factbase = (BitSet) fbinitial.clone(); factBase.set(0); processAssertionRules(factBase); processConditionalRules(factBase); } © LES/PUC-Rio Fuzzy Forward-Chaining Implementation processAssertionRules() • Simply walks through the unconditonal rules lists and fires each rule; • Since each rule has no antecedent clause, the effect of firing each rule is to perform them; © LES/PUC-Rio Fuzzy Forward-Chaining Implementation private void processAssertionRules(BitSet factBase) { trace (“\nProcessing unconditional fuzzy rules “); Enumeration enum = uncRuleList.elements.elements(); while (enum.hasMoreElements()) { FuzzyRule rule = (FuzzyRule) (enum.nextElement()); rule.fire(alphacut, factBase); } } © LES/PUC-Rio Fuzzy Forward-Chaining Implementation process ConditionalRules() • Grabbing of Enummeration of all the conditional rules in the rule base • For each rule that has not yet fired, the Id bit is extracted and placed into two working BitSets • Logically and the set of currently know variables with the variables required by the rule: – If result equals the same bits required by the rule, then the rule is added to the list of rules to be processed. © LES/PUC-Rio Fuzzy Forward-Chaining Implementation process ConditionalRules() • If there is no more rule to be processed, set moreRules to false and exits loop. • Loop over the list, and fire() each rule. • As soon as rules are fired, their fired flags are set. © LES/PUC-Rio Fuzzy Forward-Chaining Implementation process ConditionalRules() private void processConditionalRules(BitSet factBase) { boolean moreRules = true; Vector tmpRuleSet = new Vector(); trace("\nProcessing conditional fuzzy rules "); while (moreRules) { // Create a rule set: // Examine all conditional rules. // If a rule has fired, ignore it. // If a rule has not fired, and if it can be fired given // the current fact base, add it to the rule set. Enumeration enum = cndRuleList.elements(); while (enum.hasMoreElements()) { FuzzyRule rule = (FuzzyRule) (enum.nextElement()); © LES/PUC-Rio Fuzzy Forward-Chaining Implementation process ConditionalRules() if (!rule.isFired()) { // The rule has not fired; check the rule's antecedents reference BitSet tmpRuleFacts = rule.getRdReferences(); BitSet tempFacts = rule.getRdReferences(); tempFacts.and(factBase); // If the antecedents reference variables whose values have been // determined, the rule can fire, so add it to the rule set. if (tempFacts.equals(tmpRuleFacts)) { tmpRuleSet.addElement(rule); } } } // If the rule set is empty, no rules can be fired; exit the loop. if (tmpRuleSet.isEmpty()) { moreRules = false; break; } © LES/PUC-Rio Fuzzy Forward-Chaining Implementation process ConditionalRules() // Okay, we have some rules in the generated rule set; // Attempt to fire them all. Rules that fire successfully // update the fact base directly. for (int i = 0; i < tmpRuleSet.size(); i++) { FuzzyRule rule = (FuzzyRule) tmpRuleSet.elementAt(i); trace("\nFiring fuzzy rule: " + rule.getName()); rule.fire(alphaCut, factBase); } // We may or may not have fired all the rules in the rule set; // In any event, do a purge of the rule set to get ready for the // next iteration of the while loop. tmpRuleSet.removeAllElements(); } } © LES/PUC-Rio Planning • Uma das tarefas mais complexas que IA tenta solucionar. • Basicamente: • – Sequência ordenada de tarefas – Variedade enorme de técnicas Técnicas de solução: – Decomposição de um grande problema em pequenos problemas – Consideração de restrições de precedência © LES/PUC-Rio Planning • Planejamento não é Busca ! • Busca x Planejamento • • – Espaço de soluções em problemas de planejamento é enorme. – Restrições de precedência em planejamento impõem dificuldades ainda maiores Basicamente: – Sequência ordenada de tarefas – Variedade enorme de técnicas Técnicas de solução: – Decomposição de um grande problema em pequenos problemas – Consideração de restrições de precedência © LES/PUC-Rio Planning Três abordagens para solucionar problemas de planejamento: • Pilha de objetivos • Método não linear • Algoritmo de planejamento hierárquico © LES/PUC-Rio Planning Pilha de Objetivos • Tentativa de solucionar problemas através do seu particionamento: – 1 problema grande = n problemas pequenos • Baseado no problema de empilhamento de blocos em uma determinada ordem. © LES/PUC-Rio Planning Pilha de Objetivos • Dada uma configuração inicial de blocos (tarefas) e operadores possíveis, deseja-se alcançar o estado final. • O objetivo é desenvolver uma seqüência de operações que levem ao objetivo final. • Usa uma pilha de objetivos que será armazenada até que objetivos anteriores sejam alcançados. © LES/PUC-Rio Planning Pilha de Objetivos • Problemas: – Perda de boas soluções iniciais para solucionar subproblemas de maior precedência e com isso prejudicar os subproblemas de menor precedência. – Tenta encontrar uma solução linear, e não leva em consideração como isto pode impactar na solução final. © LES/PUC-Rio Planning Método não linear • Constrói um plano onde dois ou mais objetivos podem proceder simultaneamente. • Consegue encontrar boas soluções em problemas que possuem restrições de precedência mais rígidas, pois, aborda a prática de executar problemas que podem ser resolvidos simultaneamente. • Aplica múltiplos operadores e somente após testar as restrições atualiza o espaço de soluções. © LES/PUC-Rio Planning Método não linear • Sistemas de Planejamento não lineares: – NOAH – MOLGEN © LES/PUC-Rio Planning Algoritmo de planejamento hierárquico • Permite o planejamento em maior nível de abstração, para conseguir soluções globais melhores. • Mapeia a solução como um todo, para então buscar resolver os detalhes. © LES/PUC-Rio Planning Algoritmo de planejamento hierárquico • ABSTRIPS: – Soluciona o problema levando em consideração as tarefas de maiores níveis de urgência. – Em seguida, prossegue para solucionar os problemas de menores granularidades, adicionando operadores que satisfaçam as precondições de todos eles. © LES/PUC-Rio The Rule Application - Vehicle • Simulation – Forward Chaining – Backward Chaining © LES/PUC-Rio Forward Chaining © LES/PUC-Rio Backward Chaining © LES/PUC-Rio The Rule Application - Motor • Simulation – Forward Chaining © LES/PUC-Rio The Motor Rule Base Implementation © LES/PUC-Rio The Motor Rule Base Implementation To see if adding more rules would help, a new rule base was created that covered all possible temperature - humidity combinations. The following table shows the motor speed for each of the 25 climate scenarios. © LES/PUC-Rio The Motor Rule Base Implementation © LES/PUC-Rio Final Considerations • Three types of algorithms – Forward Chaining – Backward Chaining – Fuzzy Logic • Boolean Logic vs Fuzzy Logic • The code source will be available. © LES/PUC-Rio Bibliography • Bigus, Joseph P.; Bigus, Jennifer, Constructing Intelligent Agents Using Java – Second Edition. • Fuzzy Logic – An Introduction (2007) http://www.seattlerobotics.org/encoder/mar98/fuz/flindex.html, August • http://www.zabaronick.com/CO/susan/csc5814/Assignment1/index.html • Forward chaining - Wikipedia (2007), http://en.wikipedia.org/wiki/Forward_chaining, August. • Forward chaining of Rules (2007), http://msdn2.microsoft.com/enus/library/aa349441.aspx, August. • Reasoning – Wikipedia (2007), http://en.wikipedia.org/wiki/Reasoning, August © LES/PUC-Rio Bibliography • Backward chaining – Wikipedia (2007) http://en.wikipedia.org/wiki/Backward_chaining, August. • API JTP Web site (2007), http://wwwksl.stanford.edu/software/jtp/, August. © LES/PUC-Rio Questions? The End.