/
benchmark_parallel_GA.py
94 lines (60 loc) · 2.11 KB
/
benchmark_parallel_GA.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
84
85
86
87
88
89
90
91
92
93
94
"""
Benchmarks the parallel scaling for the GA driver.
"""
from time import time
import unittest
import openmdao.api as om
from openmdao.test_suite.components.exec_comp_for_test import ExecComp4Test
# Increase to simulate a slower model
DELAY = 0.05
MAXGEN = 5
POPSIZE = 40
class GAGroup(om.Group):
def setup(self):
self.add_subsystem('p1', om.IndepVarComp('x', 1.0))
self.add_subsystem('p2', om.IndepVarComp('y', 1.0))
self.add_subsystem('p3', om.IndepVarComp('z', 1.0))
self.add_subsystem('comp', ExecComp4Test(['f = x + y + z'], nl_delay=DELAY))
self.add_design_var('p1.x', lower=-100, upper=100)
self.add_design_var('p2.y', lower=-100, upper=100)
self.add_design_var('p3.z', lower=-100, upper=100)
self.add_objective('comp.f')
class BenchParGA1(unittest.TestCase):
N_PROCS = 1
def benchmark_genetic_1(self):
prob = om.Problem()
prob.model = GAGroup()
driver = prob.driver = om.SimpleGADriver()
driver.options['max_gen'] = MAXGEN
driver.options['pop_size'] = POPSIZE
driver.options['run_parallel'] = True
prob.setup()
t0 = time()
prob.run_driver()
print('Elapsed Time', time() - t0)
class BenchParGA2(unittest.TestCase):
N_PROCS = 2
def benchmark_genetic_2(self):
prob = om.Problem()
prob.model = GAGroup()
driver = prob.driver = om.SimpleGADriver()
driver.options['max_gen'] = MAXGEN
driver.options['pop_size'] = POPSIZE
driver.options['run_parallel'] = True
prob.setup()
t0 = time()
prob.run_driver()
print('Elapsed Time', time() - t0)
class BenchParGA4(unittest.TestCase):
N_PROCS = 4
def benchmark_genetic_4(self):
prob = om.Problem()
prob.model = GAGroup()
driver = prob.driver = om.SimpleGADriver()
driver.options['max_gen'] = MAXGEN
driver.options['pop_size'] = POPSIZE
driver.options['run_parallel'] = True
prob.setup()
t0 = time()
prob.run_driver()
print('Elapsed Time', time() - t0)