def evaluate(self):
act = self.actionName
if self.syncState:
possible = False
for sInp in self.inputs:
if self.neurons[sInp].isCurrent:
possible = True
break
if not possible or len(self.valueInputs) == 0:
self.finalValue = 0
self.finalValueCalcd = True
return
sm = self.brain.sim.syncManager
userid = self.brain.userid
for inp in self.valueInputs:
vals = self.neurons[inp].evaluate()
for key, v in vals.items():
if self.settings["RandomInput"]:
val = v + (self.settings["ValueDefault"] *
v * random.random())
else:
val = v + (v * self.settings["ValueDefault"])
if val > 0:
if self.isGroup():
acNm = self.actionName
for act in self.brain.sim.actionGroups[acNm[1:-1]]:
sm.tell(userid, key, act, val, self.name)
else:
sm.tell(userid, key, self.actionName,
val, self.name)
(state, action), pairedAgent = sm.getResult(userid)
if state == self.name:
self.finalValue = 1
self.action = action
else:
self.finalValue = 0
self.finalValueCalcd = True
elif self.isGroup():
State.evaluate(self)
acNm = self.actionName
state = random.getstate()
if not self.randomActionFromGroup:
random.seed(hash(self.brain.userid))
self.action = random.choice(
self.brain.sim.actionGroups[acNm[1:-1]])
random.setstate(state)
else:
State.evaluate(self)
self.action = self.actionName
评论列表
文章目录