diff --git a/copycat/coderack.py b/copycat/coderack.py index c3820ee..9445169 100644 --- a/copycat/coderack.py +++ b/copycat/coderack.py @@ -159,7 +159,7 @@ class CodeRack(object): mapping.targetDescriptionType.buffer = 100.0 mapping.targetDescriptor.buffer = 100.0 mappings = correspondence.distinguishingConceptMappings() - urgency = sum([mapping.strength() for mapping in mappings]) + urgency = sum(mapping.strength() for mapping in mappings) numberOfMappings = len(mappings) if urgency: urgency /= numberOfMappings @@ -287,37 +287,33 @@ class CodeRack(object): def chooseCodeletToRun(self): if not self.codelets: return None - temp = formulas.Temperature - scale = (100.0 - temp + 10.0) / 15.0 - urgsum = 0.0 - for codelet in self.codelets: - urg = codelet.urgency ** scale - urgsum += urg - r = random.random() - threshold = r * urgsum - chosen = None - urgencySum = 0.0 - logging.info('temperature: %f', formulas.Temperature) - logging.info('actualTemperature: %f', formulas.actualTemperature) - logging.info('Slipnet:') - for node in slipnet.slipnodes: - logging.info("\tnode %s, activation: %d, buffer: %d, depth: %s", - node.get_name(), node.activation, node.buffer, - node.conceptualDepth) - logging.info('Coderack:') - for codelet in self.codelets: - logging.info('\t%s, %d', codelet.name, codelet.urgency) - from workspace import workspace - workspace.initial.log("Initial: ") - workspace.target.log("Target: ") + #logging.info('temperature: %f', formulas.Temperature) + #logging.info('actualTemperature: %f', formulas.actualTemperature) + #logging.info('Slipnet:') + #for node in slipnet.slipnodes: + # logging.info("\tnode %s, activation: %d, buffer: %d, depth: %s", + # node.get_name(), node.activation, node.buffer, + # node.conceptualDepth) + #logging.info('Coderack:') + #for codelet in self.codelets: + # logging.info('\t%s, %d', codelet.name, codelet.urgency) + + #from workspace import workspace + #workspace.initial.log("Initial: ") + #workspace.target.log("Target: ") + + scale = (100.0 - formulas.Temperature + 10.0) / 15.0 + urgsum = sum(codelet.urgency ** scale for codelet in self.codelets) + threshold = random.random() * urgsum + chosen = self.codelets[0] + urgencySum = 0.0 + for codelet in self.codelets: urgencySum += codelet.urgency ** scale - if not chosen and urgencySum > threshold: + if urgencySum > threshold: chosen = codelet break - if not chosen: - chosen = self.codelets[0] self.removeCodelet(chosen) logging.info('chosen codelet\n\t%s, urgency = %s', chosen.name, chosen.urgency) diff --git a/copycat/coderackPressure.py b/copycat/coderackPressure.py index 014003e..d60769b 100644 --- a/copycat/coderackPressure.py +++ b/copycat/coderackPressure.py @@ -88,7 +88,7 @@ class CoderackPressures(object): #logging.debug('coderackPressures.calculatePressures()') scale = (100.0 - Temperature + 10.0) / 15.0 values = map( - lambda pressure: sum([c.urgency ** scale for c in pressure.codelets]), + lambda pressure: sum(c.urgency ** scale for c in pressure.codelets), self.pressures ) totalValue = sum(values) or 1.0 diff --git a/copycat/correspondence.py b/copycat/correspondence.py index d7de5eb..7e592c9 100644 --- a/copycat/correspondence.py +++ b/copycat/correspondence.py @@ -108,8 +108,8 @@ class Correspondence(WorkspaceStructure): if isinstance(self.objectFromTarget, Letter): if self.objectFromTarget.spansString(): return 100.0 - total = sum([c.totalStrength for c in workspace.correspondences() - if self.supporting(c)]) + total = sum(c.totalStrength for c in workspace.correspondences() + if self.supporting(c)) total = min(total, 100.0) return total @@ -122,7 +122,7 @@ class Correspondence(WorkspaceStructure): if numberOfConceptMappings < 1: self.internalStrength = 0.0 return - totalStrength = sum([m.strength() for m in distinguishingMappings]) + totalStrength = sum(m.strength() for m in distinguishingMappings) averageStrength = totalStrength / numberOfConceptMappings if numberOfConceptMappings == 1.0: numberOfConceptMappingsFactor = 0.8 diff --git a/copycat/description.py b/copycat/description.py index f2a018f..4abb330 100644 --- a/copycat/description.py +++ b/copycat/description.py @@ -32,7 +32,9 @@ class Description(WorkspaceStructure): def localSupport(self): from workspace import workspace described_like_self = 0 - for other in workspace.otherObjects(self.object): + for other in workspace.objects: + if self.object == other: + continue if self.object.isWithin(other) or other.isWithin(self.object): continue for description in other.descriptions: diff --git a/copycat/rule.py b/copycat/rule.py index 2618e37..fdde058 100644 --- a/copycat/rule.py +++ b/copycat/rule.py @@ -106,11 +106,11 @@ class Rule(WorkspaceStructure): if self.relation == slipnet.predecessor: if 'a' in string: return None - return ''.join([chr(ord(c) - 1) for c in string]) + return ''.join(chr(ord(c) - 1) for c in string) elif self.relation == slipnet.successor: if 'z' in string: return None - return ''.join([chr(ord(c) + 1) for c in string]) + return ''.join(chr(ord(c) + 1) for c in string) else: return self.relation.name.lower() diff --git a/copycat/workspace.py b/copycat/workspace.py index d79da46..30f4361 100644 --- a/copycat/workspace.py +++ b/copycat/workspace.py @@ -42,14 +42,15 @@ class Workspace(object): self.target = WorkspaceString(self.targetString) def assessUnhappiness(self): - self.intraStringUnhappiness = __adjustUnhappiness([ + self.intraStringUnhappiness = __adjustUnhappiness( o.relativeImportance * o.intraStringUnhappiness - for o in self.objects]) - self.interStringUnhappiness = __adjustUnhappiness([ + for o in self.objects) + self.interStringUnhappiness = __adjustUnhappiness( o.relativeImportance * o.interStringUnhappiness - for o in self.objects]) - self.totalUnhappiness = __adjustUnhappiness([ - o.relativeImportance * o.totalUnhappiness for o in self.objects]) + for o in self.objects) + self.totalUnhappiness = __adjustUnhappiness( + o.relativeImportance * o.totalUnhappiness + for o in self.objects) def assessTemperature(self): self.calculateIntraStringUnhappiness() @@ -57,24 +58,21 @@ class Workspace(object): self.calculateTotalUnhappiness() def calculateIntraStringUnhappiness(self): - values = [o.relativeImportance * o.intraStringUnhappiness - for o in self.objects] - value = sum(values) / 2.0 + value = sum(o.relativeImportance * o.intraStringUnhappiness + for o in self.objects) / 2.0 self.intraStringUnhappiness = min(value, 100.0) def calculateInterStringUnhappiness(self): - values = [o.relativeImportance * o.interStringUnhappiness - for o in self.objects] - value = sum(values) / 2.0 + value = sum(o.relativeImportance * o.interStringUnhappiness + for o in self.objects) / 2.0 self.interStringUnhappiness = min(value, 100.0) def calculateTotalUnhappiness(self): for o in self.objects: logging.info("%s, totalUnhappiness: %d, relativeImportance: %d", o, o.totalUnhappiness, o.relativeImportance * 1000) - values = [o.relativeImportance * o.totalUnhappiness - for o in self.objects] - value = sum(values) / 2.0 + value = sum(o.relativeImportance * o.totalUnhappiness + for o in self.objects) / 2.0 self.totalUnhappiness = min(value, 100.0) def updateEverything(self): @@ -87,9 +85,6 @@ class Workspace(object): self.initial.updateIntraStringUnhappiness() self.target.updateIntraStringUnhappiness() - def otherObjects(self, anObject): - return [o for o in self.objects if o != anObject] - def numberOfUnrelatedObjects(self): """A list of all objects in the workspace with >= 1 open bond slots""" objects = [o for o in self.objects diff --git a/copycat/workspaceObject.py b/copycat/workspaceObject.py index 1aeee62..a4c07bf 100644 --- a/copycat/workspaceObject.py +++ b/copycat/workspaceObject.py @@ -185,22 +185,20 @@ class WorkspaceObject(WorkspaceStructure): def getDescriptor(self, descriptionType): """The description attached to this object of the description type.""" - descriptor = None logging.info("\nIn %s, trying for type: %s", self, descriptionType.get_name()) for description in self.descriptions: logging.info("Trying description: %s", description) if description.descriptionType == descriptionType: return description.descriptor - return descriptor + return None def getDescriptionType(self, sought_description): """The description_type attached to this object of that description""" for description in self.descriptions: if description.descriptor == sought_description: return description.descriptionType - description = None - return description + return None def getCommonGroups(self, other): return [o for o in self.string.objects diff --git a/copycat/workspaceString.py b/copycat/workspaceString.py index 4157f14..cf450a9 100644 --- a/copycat/workspaceString.py +++ b/copycat/workspaceString.py @@ -56,7 +56,7 @@ class WorkspaceString(object): def updateRelativeImportance(self): """Update the normalised importance of all objects in the string""" - total = sum([o.rawImportance for o in self.objects]) + total = sum(o.rawImportance for o in self.objects) if not total: for o in self.objects: o.relativeImportance = 0.0 @@ -71,7 +71,7 @@ class WorkspaceString(object): if not len(self.objects): self.intraStringUnhappiness = 0.0 return - total = sum([o.intraStringUnhappiness for o in self.objects]) + total = sum(o.intraStringUnhappiness for o in self.objects) self.intraStringUnhappiness = total / len(self.objects) def equivalentGroup(self, sought):