Just had a thought reading through some of Forbus's work on constraining possible structure matches.
The general idea is that we only consider matching two objects if there is a non-zero benefit of a singleton match (i.e., a match without any other objects being matched). This idea could be extended to partial matches (assuming there are no unary relations).
For example, if we had the following instance and concept:
Instance:
(block ?b1): True
(block ?b2): True
(table ?t1): True
(On ?b1 ?t1): True
(On ?b2 ?t1): True
Concept:
(block ?o1): True -- frequency = 1/1
We could only consider mapping ?b1 or ?b2 to ?o1 because they are the only objects in the instance that have a non-zero singleton match. Currently, we consider matching all objects (?b1, ?b2 ,and ?t1) to ?o1. In situations where there are a lot of objects this could drastically reduce the complexity of the matching problem.
Just had a thought reading through some of Forbus's work on constraining possible structure matches.
The general idea is that we only consider matching two objects if there is a non-zero benefit of a singleton match (i.e., a match without any other objects being matched). This idea could be extended to partial matches (assuming there are no unary relations).
For example, if we had the following instance and concept:
Instance: (block ?b1): True (block ?b2): True (table ?t1): True (On ?b1 ?t1): True (On ?b2 ?t1): True
Concept: (block ?o1): True -- frequency = 1/1
We could only consider mapping ?b1 or ?b2 to ?o1 because they are the only objects in the instance that have a non-zero singleton match. Currently, we consider matching all objects (?b1, ?b2 ,and ?t1) to ?o1. In situations where there are a lot of objects this could drastically reduce the complexity of the matching problem.