def messageSelectionMethod(self, currentTimeStep, user, currentTopics, **conf): if self.lastObservedTimeStep != currentTimeStep: self._updateTopicProbabilities(currentTimeStep, currentTopics, **conf) message = None if GeneralMethods.trueWith(user.messagingProbability): if GeneralMethods.trueWith(user.newTopicProbability): topic = Topic(len(currentTopics)) currentTopics.append(topic) message = user.generateMessage(currentTimeStep, topic) else: if GeneralMethods.trueWith(user.probabilityOfPickingPopularTopic): if user.topicClass != None: topicIndex = GeneralMethods.weightedChoice( [i[1] for i in self.topicProbabilities[user.topicClass]] ) topic = self.topicProbabilities[user.topicClass][topicIndex][0] message = user.generateMessage(currentTimeStep, topic) if not GeneralMethods.trueWith(topic.stickiness): message = None else: topicIndex = GeneralMethods.weightedChoice([i[1] for i in self.topTopics]) topic = self.topTopics[topicIndex][0] message = user.generateMessage(currentTimeStep, topic) else: if user.topicClass != None: message = user.generateMessage( currentTimeStep, random.choice(self.topicProbabilities[user.topicClass])[0] ) else: topicIndex = GeneralMethods.weightedChoice([i[1] for i in self.allTopics]) topic = self.allTopics[topicIndex][0] message = user.generateMessage(currentTimeStep, topic) return message
def messageSelectionMethod(self, currentTimeStep, user, currentTopics, **conf): message = None if GeneralMethods.trueWith(user.messagingProbability): if GeneralMethods.trueWith(user.newTopicProbability): topic = Topic(len(currentTopics)) currentTopics.append(topic) message = user.generateMessage(currentTimeStep, topic) else: message = user.generateMessage(currentTimeStep, random.choice(currentTopics)) return message
def __init__(self, id): self.id = id self.totalCount = 0 self.countDistribution = defaultdict(int) self.age = 0 self.topicClass = random.choice(topicClasses) self.decayCoefficient = -3 if GeneralMethods.trueWith(0.05): self.stickiness = random.uniform(stickinessLowerThreshold, 1.0) else: self.stickiness = random.uniform(0.0, 0.1) self.payloads = PayLoad.generatePayloads(self.id, noOfPayloadsPerTopic) #Non-modeling attributes. self.color = GeneralMethods.getRandomColor()