1 from teamwork.math.KeyedMatrix import *
2 from teamwork.math.KeyedTree import *
3 from teamwork.math.ProbabilityTree import *
4
6 if not feature:
7 feature = fromFeature
8
9 weights = {StateKey({'entity':'self','feature':feature}):1.,
10 StateKey({'entity':'actor','feature':fromFeature}): -.1,
11 StateKey({'entity':'object','feature':fromFeature}): .1,
12 keyConstant: -.05*scale}
13 objWeaker = createDynamicNode(feature,weights)
14
15 objStronger = ProbabilityTree(IncrementMatrix(feature,value=-.01*scale))
16
17 plane = KeyedPlane(DifferenceRow(keys=[{'entity':'object','feature':fromFeature},
18 {'entity':'actor','feature':fromFeature}]),0.)
19
20 objectTree = createBranchTree(plane,objWeaker,objStronger)
21
22 unchangedTree = ProbabilityTree(IdentityMatrix(feature))
23
24 weights = {makeIdentityKey('object'): 1.}
25 notActorTree = createBranchTree(KeyedPlane(IdentityRow(keys=[{'entity':'object','relationship':'equals'}]),0.5),
26 unchangedTree,objectTree)
27
28 weights = {StateKey({'entity':'self','feature':feature}):1.,
29 StateKey({'entity':'actor','feature':fromFeature}): .1,
30 StateKey({'entity':'object','feature':fromFeature}): -.1,
31 keyConstant: .02*scale}
32 actorMuchWeakerTree = createDynamicNode(feature,weights)
33
34 actorWeakerTree = ProbabilityTree(IncrementMatrix(feature,value=-.01*scale))
35
36
37 weights = {makeStateKey('actor',fromFeature): -1.,
38 makeStateKey('object',fromFeature): 1.}
39 plane = KeyedPlane(DifferenceRow(keys=[{'entity':'object','feature':fromFeature},
40 {'entity':'actor','feature':fromFeature}]),0.2)
41 actorTree = createBranchTree(plane,actorWeakerTree,actorMuchWeakerTree)
42
43 plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
44 'relationship':'equals'}]),0.5)
45 tree = createBranchTree(plane,notActorTree,actorTree)
46 return {'tree':tree}
47
59
60 if __name__ == '__main__':
61 tree = genAttackDyn('power','power')['tree']
62 print tree.simpleText()
63