forked from meshula/OpenSteer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_bench.py
More file actions
76 lines (65 loc) · 2.55 KB
/
Copy pathrun_bench.py
File metadata and controls
76 lines (65 loc) · 2.55 KB
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
import os
import statistics
import math
versions = ["sort", "rsqrt"]
nAgents = [8000, 16000, 32000, 64000, 128000]
initialWorldRadius = 64.0
initialQueryRadius = 8.0
nSteps = 500
reps = 1
benchmarks = {
"const_size": [
(a, nSteps if a != 128000 else 10, initialWorldRadius, initialQueryRadius)
for a in nAgents
],
# "const_pop": [
# (nAgents[0], nSteps, wRadius, initialQueryRadius / initialWorldRadius * wRadius)
# for wRadius in [x * (initialWorldRadius / nAgents[0]) for x in nAgents]
# ],
"const_density": [
(a, nSteps if a != 128000 else 10, wRadius, initialQueryRadius)
for (a, wRadius) in zip(
nAgents,
[
math.sqrt(
x * (4 * initialWorldRadius * initialWorldRadius) / nAgents[0]
)
/ 2
for x in nAgents
],
)
],
}
OpenSteerPath = ".\\build\\OpenSteerDemo.exe"
for version in versions:
for benchmark, configs in benchmarks.items():
csvFile = open(f"{version}_{benchmark}.csv", "w")
csvFile.write("Agents;Steps;WorldRadius;QueryRadius;Time(s)\n")
print(f"Running {benchmark} benchmark, {version} version")
for config in configs:
args = f"-no-gui -n {config[0]} -s {config[1]} { '-w '+str(config[2]) if config[2] > initialWorldRadius else ''} {'-rsqrt' if version == 'rsqrt' else ''} {'-sort' if version == 'sort' else ''}"
print(f" Agents, Steps, WorldRadius, QueryRadius\n {config}")
completed = False
while not completed:
data = []
csvOut = ""
for i in range(reps):
output = (
os.popen(OpenSteerPath + " " + args).read().splitlines()[-1]
+ "\n"
)
data.append(float(output.split(";")[-1]))
csvOut += output
print(f" {i+1}/{reps} Completed {data[i]}")
avg = data[0] # statistics.mean(data)
median = data[0] # statistics.median(data)
variance = 0 # statistics.variance(data)
print(f"Avg:{avg} Median:{median} Variance:{variance}")
completed = True
if not completed:
print("Variance > 5, repeating test")
else:
csvFile.write(csvOut) # .splitlines()[data.index(median)])
csvFile.write("\n")
# Constant Population Benchmark
# Constant Density Benchmark