Python:
-- in the new_context() class: # just simm applied to relevant kets def pattern_recognition(self,pattern,op,t=0): if type(op) == ket: op = op.label[4:] result = superposition() for label in self.ket_rules_dict: if op in self.ket_rules_dict[label]: candidate_pattern = self.recall(op,label,True) value = silent_simm(pattern,candidate_pattern) if value > t: result.data.append(ket(label,value)) # "result += ket(label,value)" when we swap in fast_superposition return result.coeff_sort() -- in the ket() class: # implements: similar[op] |x> def similar(self,context,op): f = self.apply_op(context,op) return context.pattern_recognition(f,op).delete_ket(self)Now, try to explain in English what is going on.
Consider: similar[example-operator] |x>
First, find the superposition resulting from "example-operator" applied to |x>.
f = self.apply_op(context,op)Then find all the kets that support the "example-operator" operator.
for label in self.ket_rules_dict: if op in self.ket_rules_dict[label]:Then find the superpositions resulting from "example-operator" applied to each of them.
candidate_pattern = self.recall(op,label,True)Then find how similar they are to f/pattern:
value = silent_simm(pattern,candidate_pattern)Keep only the interesting ones:
if value > t: result.data.append(ket(label,value))Sort and return the result:
return result.coeff_sort()Delete |x> since we are always 100% similar with ourselves:
return context.pattern_recognition(f,op).delete_ket(self)Update: Tweaked the code so we have a version of similar[op] that doesn't delete |x>
-- in the ket() class: # implements: self-similar[op] |x> def self_similar(self,context,op): f = self.apply_op(context,op) return context.pattern_recognition(f,op)Update: tweaked similar so that if we want, the operator we apply to |x> is different to the operator we use in looking for matching patterns.
The new python:
-- in the ket() class: def similar(self,context,ops): try: op1,op2 = ops.split(',') except: op1 = ops op2 = ops f = self.apply_op(context,op1) return context.pattern_recognition(f,op2).delete_ket(self) def self_similar(self,context,ops): try: op1,op2 = ops.split(',') except: op1 = ops op2 = ops f = self.apply_op(context,op1) return context.pattern_recognition(f,op2)Update: It should be rather trivial to write a parallel version of context.pattern_recognition() in the case of large sw files. Roughly, partition the sw file. Calculate the resulting superposition for each. Add them up, do a coeff sort. Done.
No comments:
Post a Comment