diff --git a/copycat/formulas.py b/copycat/formulas.py index 37bd7a3..14671dd 100644 --- a/copycat/formulas.py +++ b/copycat/formulas.py @@ -1,5 +1,4 @@ import math -import logging import random from conceptMapping import ConceptMapping @@ -43,23 +42,6 @@ def blur(value): return value - root -def chooseObjectFromList(objects, attribute): - from context import context as ctx - temperature = ctx.temperature - if not objects: - return None - probabilities = [] - for objekt in objects: - value = getattr(objekt, attribute) - probability = temperature.getAdjustedValue(value) - logging.info('Object: %s, value: %d, probability: %d', - objekt, value, probability) - probabilities += [probability] - i = selectListPosition(probabilities) - logging.info('Selected: %d', i) - return objects[i] - - def chooseRelevantDescriptionByActivation(workspaceObject): descriptions = workspaceObject.relevantDescriptions() if not descriptions: diff --git a/copycat/workspaceFormulas.py b/copycat/workspaceFormulas.py index 27e8b9e..2e596d0 100644 --- a/copycat/workspaceFormulas.py +++ b/copycat/workspaceFormulas.py @@ -3,17 +3,32 @@ import logging import formulas +def __chooseObjectFromList(temperature, objects, attribute): + if not objects: + return None + weights = [ + temperature.getAdjustedValue( + getattr(o, attribute) + ) + for o in objects + ] + i = formulas.selectListPosition(weights) + return objects[i] + + def chooseUnmodifiedObject(attribute, inObjects): from context import context as ctx + temperature = ctx.temperature workspace = ctx.workspace objects = [o for o in inObjects if o.string != workspace.modified] if not len(objects): print 'no objects available in initial or target strings' - return formulas.chooseObjectFromList(objects, attribute) + return __chooseObjectFromList(temperature, objects, attribute) def chooseNeighbor(source): from context import context as ctx + temperature = ctx.temperature workspace = ctx.workspace objects = [] for objekt in workspace.objects: @@ -23,7 +38,7 @@ def chooseNeighbor(source): objects += [objekt] elif source.leftIndex == objekt.rightIndex + 1: objects += [objekt] - return formulas.chooseObjectFromList(objects, "intraStringSalience") + return __chooseObjectFromList(temperature, objects, "intraStringSalience") def chooseDirectedNeighbor(source, direction): @@ -38,6 +53,7 @@ def chooseDirectedNeighbor(source, direction): def __chooseLeftNeighbor(source): from context import context as ctx + temperature = ctx.temperature workspace = ctx.workspace objects = [] for o in workspace.objects: @@ -48,16 +64,17 @@ def __chooseLeftNeighbor(source): else: logging.info('%s is not on left of %s', o, source) logging.info('Number of left objects: %s', len(objects)) - return formulas.chooseObjectFromList(objects, 'intraStringSalience') + return __chooseObjectFromList(temperature, objects, 'intraStringSalience') def __chooseRightNeighbor(source): from context import context as ctx + temperature = ctx.temperature workspace = ctx.workspace objects = [o for o in workspace.objects if o.string == source.string and o.leftIndex == source.rightIndex + 1] - return formulas.chooseObjectFromList(objects, 'intraStringSalience') + return __chooseObjectFromList(temperature, objects, 'intraStringSalience') def chooseBondFacet(source, destination):