1
2
3
4
5
6
7
8
9 from teamwork.agent.AgentClasses import *
10 from teamwork.dynamics.pwlDynamics import *
11
12 from RedRidingHoodDynamics import *
13
14 classHierarchy['character'] = {
15 'parent': [],
16 'horizon':1,
17 'depth':2,
18 'dynamics':[DynFun['basicDyn'],DynFun['RedDyn']],
19 'state':{\
20 'type':0.0,
21 'being-greeted':0.0,
22 'being-byed':0.0,
23 'being-enquired':0.0,
24
25 'greeted':0.0,
26 'byed':0.0,
27
28 'conversation':0.0,
29
30 'init-norm':0.0,
31 'resp-norm':0.0,
32 'makeResp-norm':0.0,
33 'conversation-flow-norm':0.0,
34 'noRepeat-norm':0.0,
35
36 'alive':1.0,
37 'sameLocation':1.0,
38 'actAlive':1.0,
39 'noRepeat':1.0,
40
41
42 'likeMove':-1,
43 'likeTalk':-1,
44 'specialRule':1.0,
45 },
46 'models': {
47 'simple': {'goals':[\
48 {'entity':['self'],'direction':'max','type':'state',
49 'key':'init-norm','weight':1.},
50 {'entity':['self'],'direction':'max','type':'state',
51 'key':'resp-norm','weight':1000.},
52 {'entity':['self'],'direction':'max','type':'state',
53 'key':'makeResp-norm','weight':1.},
54 {'entity':['self'],'direction':'max','type':'state',
55 'key':'conversation-flow-norm','weight':1.},
56 {'entity':['self'],'direction':'max','type':'state',
57 'key':'noRepeat-norm','weight':1.},
58
59 {'entity':['self'],'direction':'max','type':'state',
60 'key':'alive','weight':1000},
61 {'entity':['self'],'direction':'max','type':'state',
62 'key':'actAlive','weight':1000.},
63 {'entity':['self'],'direction':'max','type':'state',
64 'key':'sameLocation','weight':1000.},
65 {'entity':['self'],'direction':'max','type':'state',
66 'key':'specialRule','weight':1000.},
67
68
69 ],
70 'policy': [],
71 },
72 'evil': {'goals':[\
73 {'entity':['self'],'direction':'max','type':'state',
74 'key':'init-norm','weight':1.},
75 {'entity':['self'],'direction':'max','type':'state',
76 'key':'resp-norm','weight':1000.},
77 {'entity':['self'],'direction':'max','type':'state',
78 'key':'makeResp-norm','weight':1.},
79 {'entity':['self'],'direction':'max','type':'state',
80 'key':'conversation-flow-norm','weight':1.},
81 {'entity':['self'],'direction':'max','type':'state',
82 'key':'noRepeat-norm','weight':1.},
83
84 {'entity':['self'],'direction':'max','type':'state',
85 'key':'alive','weight':1000.},
86 {'entity':['self'],'direction':'max','type':'state',
87 'key':'actAlive','weight':1000.},
88 {'entity':['self'],'direction':'max','type':'state',
89 'key':'sameLocation','weight':1000.},
90 {'entity':['self'],'direction':'max','type':'state',
91 'key':'specialRule','weight':1000.},
92
93
94 {'entity':['self'],'direction':'max','type':'state',
95 'key':'full','weight':5.},
96 ],
97 'policy': [],
98 },
99
100 'good': {'goals':[\
101 {'entity':['self'],'direction':'max','type':'state',
102 'key':'init-norm','weight':1.},
103 {'entity':['self'],'direction':'max','type':'state',
104 'key':'resp-norm','weight':1000.},
105 {'entity':['self'],'direction':'max','type':'state',
106 'key':'makeResp-norm','weight':1.},
107 {'entity':['self'],'direction':'max','type':'state',
108 'key':'conversation-flow-norm','weight':1.},
109 {'entity':['self'],'direction':'max','type':'state',
110 'key':'noRepeat-norm','weight':1.},
111
112 {'entity':['self'],'direction':'max','type':'state',
113 'key':'alive','weight':1000.},
114 {'entity':['self'],'direction':'max','type':'state',
115 'key':'actAlive','weight':1000.},
116 {'entity':['self'],'direction':'max','type':'state',
117 'key':'sameLocation','weight':1000.},
118 {'entity':['self'],'direction':'max','type':'state',
119 'key':'specialRule','weight':1000.},
120
121
122 {'entity':['self'],'direction':'min','type':'state',
123 'key':'full','weight':.1},
124 ],
125 'policy': [],
126 },
127
128
129 'shy': {'goals':[\
130 {'entity':['self'],'direction':'max','type':'state',
131 'key':'init-norm','weight':1.},
132 {'entity':['self'],'direction':'max','type':'state',
133 'key':'resp-norm','weight':1000.},
134 {'entity':['self'],'direction':'max','type':'state',
135 'key':'makeResp-norm','weight':1.},
136 {'entity':['self'],'direction':'max','type':'state',
137 'key':'specialRule','weight':1000.},
138 {'entity':['self'],'direction':'max','type':'state',
139 'key':'conversation-flow-norm','weight':1.},
140 {'entity':['self'],'direction':'max','type':'state',
141 'key':'noRepeat-norm','weight':1.},
142
143 {'entity':['self'],'direction':'max','type':'state',
144 'key':'alive','weight':1000.},
145 {'entity':['self'],'direction':'max','type':'state',
146 'key':'actAlive','weight':1000.},
147 {'entity':['self'],'direction':'max','type':'state',
148 'key':'sameLocation','weight':1000.},
149 {'entity':['self'],'direction':'max','type':'state',
150 'key':'specialRule','weight':1000.},
151
152
153 {'entity':['self'],'direction':'min','type':'state',
154 'key':'likeTalk','weight':1},
155
156 ],
157 'policy': [],
158 },
159 'talktive': {'goals':[\
160 {'entity':['self'],'direction':'max','type':'state',
161 'key':'init-norm','weight':1.},
162 {'entity':['self'],'direction':'max','type':'state',
163 'key':'resp-norm','weight':1000.},
164 {'entity':['self'],'direction':'max','type':'state',
165 'key':'makeResp-norm','weight':1.},
166 {'entity':['self'],'direction':'max','type':'state',
167 'key':'conversation-flow-norm','weight':1.},
168 {'entity':['self'],'direction':'max','type':'state',
169 'key':'noRepeat-norm','weight':1.},
170
171 {'entity':['self'],'direction':'max','type':'state',
172 'key':'alive','weight':1000.},
173 {'entity':['self'],'direction':'max','type':'state',
174 'key':'actAlive','weight':1000.},
175 {'entity':['self'],'direction':'max','type':'state',
176 'key':'sameLocation','weight':1000.},
177 {'entity':['self'],'direction':'max','type':'state',
178 'key':'specialRule','weight':1000.},
179
180
181 {'entity':['self'],'direction':'max','type':'state',
182 'key':'likeTalk','weight':1},
183
184 ],
185 'policy': [],
186 },
187 },
188 }
189 classHierarchy['red'] = {
190 'parent': ['character'],
191 'horizon':2,
192 'depth':2,
193 'state':{\
194 'has-cake':1.0,
195
196 'location':0,
197
198 'told-about-granny':0.0,
199 'given-cake':0.0,
200
201 'SDwithWolf':-.19,
202 'being-enquired-about-granny':0,
203
204 },
205
206
207
208
209 'goals':[\
210 {'entity':['self'],'direction':'max','type':'state',
211 'key':'init-norm','weight':1.},
212 {'entity':['self'],'direction':'max','type':'state',
213 'key':'resp-norm','weight':1000.},
214 {'entity':['self'],'direction':'max','type':'state',
215 'key':'makeResp-norm','weight':1.},
216 {'entity':['self'],'direction':'max','type':'state',
217 'key':'conversation-flow-norm','weight':1.},
218 {'entity':['self'],'direction':'max','type':'state',
219 'key':'noRepeat-norm','weight':1.},
220
221 {'entity':['self'],'direction':'max','type':'state',
222 'key':'alive','weight':5.},
223
224
225
226
227 {'entity':['granny'],'direction':'max','type':'state',
228 'key':'has-cake','weight':1.},
229 {'entity':['self'],'direction':'max','type':'state',
230 'key':'actAlive','weight':1000.},
231 {'entity':['self'],'direction':'max','type':'state',
232 'key':'sameLocation','weight':1000.},
233 {'entity':['self'],'direction':'max','type':'state',
234 'key':'specialRule','weight':1000.},
235
236
237
238 {'entity':['self'],'direction':'max','type':'state',
239 'key':'likeMove','weight':.5},
240 {'entity':['self'],'direction':'max','type':'state',
241 'key':'likeTalk','weight':.5},
242 ],
243 'actions': {'type':'OR',
244 'values':[{'type':'decision',
245 'value':{'type':'XOR',
246 'key':'object',
247 'values':[{'type':'generic','value':'wolf'}],
248 'base': {'type':'XOR',
249 'key':'type',
250 'values':[\
251 {'type':'literal','value':'tell-about-granny'},
252 {'type':'literal','value':'inform-about-granny'},
253 {'type':'literal','value':'escape'},
254 {'type':'literal','value':'greet-init'},
255 {'type':'literal','value':'greet-resp'},
256 {'type':'literal','value':'bye-init'},
257 {'type':'literal','value':'bye-resp'},
258 {'type':'literal','value':'enquiry'},
259 {'type':'literal','value':'inform'},
260 {'type':'literal','value':'give-cake'},
261
262
263 ],
264 },
265 },
266 },
267 {'type':'decision',
268 'value':{'type':'XOR',
269 'key':'object',
270 'values':[{'type':'generic','value':'granny'}],
271 'base': {'type':'XOR',
272 'key':'type',
273 'values':[{'type':'literal','value':'give-cake'},
274 ],
275 },
276 },
277 },
278 {'type':'decision',
279 'value':{'type':'XOR',
280 'key':'type',
281 'values':[{'type':'literal','value':'move2'},
282 {'type':'literal','value':'wait'},
283 ],
284 },
285 },
286 {'type':'decision',
287 'value':{'type':'XOR',
288 'key':'object',
289 'values':[{'type':'generic','value':'hunter'}],
290 'base': {'type':'XOR',
291 'key':'type',
292 'values':[{'type':'literal','value':'enquiry'},
293 ],
294 },
295 },
296 },
297 ],
298 },
299
300 }
301
302 classHierarchy['hunter'] = {
303 'parent': ['character'],
304
305 'depth':1,
306 'state':{\
307 'location':-.6,
308 'likeMove':-1,
309 },
310 'beliefs':{'red':{'model':'simple'},
311 'granny':{'model':'simple'},
312 'wolf':{'model':'simple'},
313 },
314 'goals':[\
315 {'entity':['self'],'direction':'max','type':'state',
316 'key':'init-norm','weight':1.},
317 {'entity':['self'],'direction':'max','type':'state',
318 'key':'resp-norm','weight':1000.},
319 {'entity':['self'],'direction':'max','type':'state',
320 'key':'makeResp-norm','weight':1.},
321 {'entity':['self'],'direction':'max','type':'state',
322 'key':'conversation-flow-norm','weight':1.},
323 {'entity':['self'],'direction':'max','type':'state',
324 'key':'noRepeat-norm','weight':1.},
325
326 {'entity':['wolf'],'direction':'min','type':'state',
327 'key':'alive','weight':1.},
328
329 {'entity':['self'],'direction':'max','type':'state',
330 'key':'actAlive','weight':1000.},
331 {'entity':['self'],'direction':'max','type':'state',
332 'key':'sameLocation','weight':1000.},
333
334
335
336 {'entity':['self'],'direction':'max','type':'state',
337 'key':'likeMove','weight':.5},
338 {'entity':['self'],'direction':'max','type':'state',
339 'key':'likeTalk','weight':.5},
340 ],
341 'actions': {'type':'OR',
342 'values':[{'type':'decision',
343 'value':{'type':'XOR',
344 'key':'object',
345 'values':[{'type':'generic','value':'wolf'}],
346 'base': {'type':'XOR',
347 'key':'type',
348 'values':[{'type':'literal','value':'kill'},
349 ],
350 },
351 },
352 },
353 {'type':'decision',
354 'value':{'type':'XOR',
355 'key':'object',
356 'values':[{'type':'generic','value':'red'}],
357 'base': {'type':'XOR',
358 'key':'type',
359 'values':[{'type':'literal','value':'inform'},
360 ],
361 },
362 },
363 },
364 {'type':'decision',
365 'value':{'type':'XOR',
366 'key':'type',
367 'values':[{'type':'literal','value':'move2'},
368 {'type':'literal','value':'wait'},
369 ],
370 },
371 },
372
373 ],
374 },
375
376 }
377
378 classHierarchy['granny'] = {
379 'parent': ['character'],
380
381 'depth':1,
382 'state':{\
383 'has-cake':0.0,
384 'location':0.4,
385
386 },
387 'beliefs':{'red':{'model':'simple'},
388 'hunter':{'model':'simple'},
389 'wolf':{'model':'simple'},
390 },
391 'goals':[\
392 {'entity':['self'],'direction':'max','type':'state',
393 'key':'alive','weight':5.},
394 {'entity':['self'],'direction':'max','type':'state',
395 'key':'actAlive','weight':1000.},
396 {'entity':['self'],'direction':'max','type':'state',
397 'key':'sameLocation','weight':1000.},
398
399 {'entity':['self'],'direction':'max','type':'state',
400 'key':'has-cake','weight':1},
401
402
403 ],
404 'actions': {'type':'OR',
405 'values':[{'type':'decision',
406 'value':{'type':'XOR',
407 'key':'object',
408 'values':[{'type':'generic','value':'wolf'}],
409 'base': {'type':'XOR',
410 'key':'type',
411 'values':[{'type':'literal','value':'escape'},
412 ],
413 },
414 },
415 },
416 {'type':'decision',
417 'value':{'type':'XOR',
418 'key':'type',
419 'values':[{'type':'literal','value':'wait'},
420 ],
421 },
422 },
423 ],
424 },
425
426 }
427
428 classHierarchy['wolf'] = {
429 'parent': ['character'],
430 'horizon':2,
431 'depth':2,
432 'state':{\
433 'location':-.2,
434 'full':0.0,
435
436 'know-granny':0.0,
437
438 'enquired':0.0,
439
440
441 'SDnorm':0.0,
442
443 'preferWait':-1,
444 },
445
446
447
448
449 'goals':[{'entity':['self'],'direction':'max','type':'state',
450 'key':'init-norm','weight':1.},
451 {'entity':['self'],'direction':'max','type':'state',
452 'key':'resp-norm','weight':1000.},
453 {'entity':['self'],'direction':'max','type':'state',
454 'key':'makeResp-norm','weight':1.},
455 {'entity':['self'],'direction':'max','type':'state',
456 'key':'conversation-flow-norm','weight':1.},
457 {'entity':['self'],'direction':'max','type':'state',
458 'key':'noRepeat-norm','weight':1.},
459
460 {'entity':['self'],'direction':'max','type':'state',
461 'key':'SDnorm','weight':1.},
462 {'entity':['self'],'direction':'max','type':'state',
463 'key':'full','weight':3.},
464 {'entity':['self'],'direction':'max','type':'state',
465 'key':'alive','weight':5.},
466 {'entity':['self'],'direction':'max','type':'state',
467 'key':'know-granny','weight':1.},
468
469 {'entity':['self'],'direction':'max','type':'state',
470 'key':'actAlive','weight':1000.},
471 {'entity':['self'],'direction':'max','type':'state',
472 'key':'sameLocation','weight':1000.},
473 {'entity':['self'],'direction':'max','type':'state',
474 'key':'specialRule','weight':1000.},
475
476 {'entity':['self'],'direction':'max','type':'state',
477 'key':'preferWait','weight':.1},
478
479 {'entity':['self'],'direction':'max','type':'state',
480 'key':'likeMove','weight':.5},
481 {'entity':['self'],'direction':'max','type':'state',
482 'key':'likeTalk','weight':.5},
483
484
485 ],
486
487 'actions': {'type':'OR',
488 'values':[{'type':'decision',
489 'value':{'type':'XOR',
490 'key':'object',
491 'values':[{'type':'generic','value':'red'},
492 {'type':'generic','value':'granny'}],
493 'base': {'type':'XOR',
494 'key':'type',
495 'values':[{'type':'literal','value':'eat'},
496 ],
497 },
498 },
499 },
500 {'type':'decision',
501 'value':{'type':'XOR',
502 'key':'object',
503 'values':[{'type':'generic','value':'red'},
504 ],
505 'base': {'type':'XOR',
506 'key':'type',
507 'values':[\
508 {'type':'literal','value':'greet-init'},
509 {'type':'literal','value':'greet-resp'},
510 {'type':'literal','value':'bye-init'},
511 {'type':'literal','value':'bye-resp'},
512 {'type':'literal','value':'enquiry'},
513 {'type':'literal','value':'enquiry-about-granny'},
514 {'type':'literal','value':'inform'},
515 ],
516 },
517 },
518 },
519
520 {'type':'decision',
521 'value':{'type':'XOR',
522 'key':'type',
523 'values':[{'type':'literal','value':'move2'},
524 {'type':'literal','value':'wait'},
525
526 ],
527
528 },
529 },
530 ],
531 },
532 }
533
534 classHierarchy['fairy'] = {
535 'parent': ['Entity'],
536 'horizon':1,
537 'depth':0,
538 'goals':[{'entity':['self'],'direction':'min','type':'state',
539 'key':'preferWait','weight':1},],
540 'state':{\
541 'alive':1,
542 },
543 'dynamics':[],
544 'actions': {'type':'OR',
545 'values':[{'type':'decision',
546 'value':{'type':'XOR',
547 'key':'object',
548 'values':[{'type':'generic','value':'wolf'}],
549 'base': {'type':'XOR',
550 'key':'type',
551 'values':[{'type':'literal','value':'kill'},
552 ],
553 },
554 },
555 },
556
557 {'type':'decision',
558 'value':{'type':'XOR',
559 'key':'type',
560 'values':[{'type':'literal','value':'wait'},
561 ],
562 },
563 },
564 {'type':'decision',
565 'value':{'type':'XOR',
566 'key':'object',
567 'values':[{'type':'generic','value':'red'},
568 {'type':'generic','value':'granny'},
569 {'type':'generic','value':'wolf'},],
570 'base': {'type':'XOR',
571 'key':'type',
572 'values':[{'type':'literal','value':'resurrect'},
573 ],
574 },
575 },
576 },
577 ],
578 },
579
580 }
581