-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbenchmark.py
83 lines (62 loc) · 1.43 KB
/
benchmark.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import goap
class IndexArms:
cost = 1
preRequisite = {
}
effect = {
'indexed': True
}
class RetractArms:
cost = 1
preRequisite = {
'indexed': True
}
effect = {
'deployed': False
}
class BuildTower:
cost = 1
preRequisite = {
'deployed': False,
'has_blocks': True
}
effect = {
'deployed': True,
'tower_built': True
}
class PickupBlocks:
cost = 1
preRequisite = {
'deployed': False,
}
effect = {
'deployed': True,
'has_blocks': True
}
class PressSwitch:
cost = 1
preRequisite = {
'deployed': False,
}
effect = {
'deployed': True,
'switch_on': True
}
ACTIONS=[RetractArms, IndexArms, BuildTower, PickupBlocks, PressSwitch]
def problem(planner):
goal = {
'deployed': False,
'tower_built': True,
'switch_on': True,
}
state = {}
return planner(goal, state, ACTIONS)
p1 = sorted(str(s) for s in problem(goap.fast_plan)[0])
p2 = sorted(str(s) for s in problem(goap.plan)[0])
assert p1 == p2
import timeit
N = 100
t_slow = timeit.timeit('problem(goap.plan)', globals=globals(), number=N)
t_fast = timeit.timeit('problem(goap.fast_plan)', globals=globals(), number=N)
print("Solved the GoalAction {} times.".format(N))
print("Slow: {:.3f} Fast: {:.3f} ({:.1f}x speedup)".format(t_slow, t_fast, t_slow / t_fast))