Class SemanticMemory

  • All Implemented Interfaces:
    java.io.Serializable

    public class SemanticMemory
    extends java.lang.Object
    implements java.io.Serializable
    See Also:
    Serialized Form
    • Constructor Detail

      • SemanticMemory

        public SemanticMemory()
    • Method Detail

      • AddInferenceOperator

        public void AddInferenceOperator​(Step op)
      • AskPredicate

        public boolean AskPredicate​(Name predicate)
        Asks the Memory the Truth value of the received predicate
        Parameters:
        predicate - - The predicate to search in the Memory
        Returns:
        Under the Closed World Assumption, the predicate is considered true if it is stored in the Memory and false otherwise.
      • AskProperty

        public java.lang.Object AskProperty​(Name property)
        Asks the Memory the value of a given property
        Parameters:
        property - - the property to search in the Memory
        Returns:
        the value stored inside the property, if the property exists. If the property does not exist, it returns null
      • Assert

        public void Assert​(Name predicate)
        Inserts a Predicate in the WorkingMemory
        Parameters:
        predicate - - the predicate to be inserted
      • ClearChangeList

        public void ClearChangeList()
      • Count

        public int Count()
      • GetChangeList

        public java.util.ArrayList<KnowledgeSlot> GetChangeList()
      • GetFactList

        public java.util.ArrayList<KnowledgeSlot> GetFactList()
      • GetKnowledgeBaseFacts

        public java.util.ArrayList<KnowledgeSlot> GetKnowledgeBaseFacts()
      • getNewFacts

        public java.util.ArrayList<KnowledgeSlot> getNewFacts()
      • GetObjectDetails

        public KnowledgeSlot GetObjectDetails​(java.lang.String objectName)
      • GetObjectProperty

        public KnowledgeSlot GetObjectProperty​(java.lang.String objectName,
                                               java.lang.String property)
      • GetPossibleBindings

        public java.util.ArrayList<SubstitutionSet> GetPossibleBindings​(Name name)
        This method provides a way to search for properties/predicates in the WorkingMemory that match with a specified name with unbound variables. In order to understand this method, let’s examine the following example. Suppose that the memory only contains properties about two characters: Luke and John. Furthermore, it only stores two properties: their name and strength. So the KB will only store the following objects: - Luke(Name) : Luke - Luke(Strength) : 8 - John(Name) : John - John(Strength) : 4 The next table shows the result of calling the method with several distinct names. The function works by finding substitutions for the unbound variables, which make the received name equal to the name of an object stored in memory. Name Substitutions returned Luke([x]) {{[x]/Name},{[x]/Strength}} [x](Strength) {{[x]/John},{[x]/Luke}} [x]([y]) {{[x]/John,[y]/Name},{[x]/John,[y]/Strength},{[x]/Luke,[y]/Name},{[x]/Luke,[y]/Strength}} John(Name) {{}} John(Height) null Paul([x]) null In the first example, there are two possible substitutions that make “Luke([x])” equal to the objects stored above. The third example has two unbound variables, so the returned set contains all possible combinations of variable attributions. If this method receives a ground name, as seen on examples 4 and 5, it checks if the received name exists in memory. If so, a set with the empty substitution is returned, i.e. the empty substitution makes the received name equal to some object in memory. Otherwise, the function returns null, i.e. there is no substitution that applied to the name will make it equal to an object in memory. This same result is returned in the last example, since there is no object named Paul, and therefore no substitution of [x] will match the received name with an existing object.
        Parameters:
        name - - a name (that correspond to a predicate or property)
        Returns:
        a list of SubstitutionSets that make the received name to match predicates or properties that do exist in the WorkingMemory
      • HasNewKnowledge

        public boolean HasNewKnowledge()
        Gets a value that indicates whether new Knowledge has been added to the WorkingMemory since the last inference process
        Returns:
        true if there is new Knowledge in the WM, false otherwise
      • InitializeProperty

        public void InitializeProperty​(Name property,
                                       java.lang.Object value)
      • PerformInference

        public boolean PerformInference​(AgentModel am)
        This method should be called every simulation cycle, and will try to apply InferenceOperators. Note, that if new knowledge results from this process, it will be added immediately to the WM. However, the inference will not continue (by trying to use the new knowledge to activate more operators) until the method PerformInference is called in next cycle.
        Returns:
        true if the Inference resulted in new Knowledge being added, false if no new knowledge was inferred
      • Retract

        public void Retract​(Name predicate)
        Removes a predicate from the Semantic Memory
        Parameters:
        predicate - - the predicate to be removed
      • Tell

        public void Tell​(Name property,
                         java.lang.Object value)
      • putKnowledgeBase

        public void putKnowledgeBase​(KnowledgeBase kb)
      • putWorkingMemory

        public void putWorkingMemory​(WorkingMemory wm)