Skip to content

Commit f93573b

Browse files
committed
more improvements to model opt + tests
1 parent fc14e00 commit f93573b

3 files changed

Lines changed: 27 additions & 20 deletions

File tree

biosteam/evaluation/_model.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,12 @@ class Model:
102102
)
103103
default_optimizer_options = {
104104
'shgo': dict(f_tol=1e-3, minimizer_kwargs=dict(f_tol=1e-3)),
105-
'differential evolution': {'seed': 0, 'popsize': 12, 'tol': 1e-3},
106-
'COBYLA': {},
105+
'differential evolution': dict(seed=0),
107106
}
108-
default_optimizer = 'COBYLA'
107+
for method in ('cobyla', 'cobyqa', 'trust-constr', 'slsqp', 'L-BFGS-B'):
108+
default_optimizer_options[method] = {}
109+
110+
default_optimizer = 'cobyla'
109111
default_convergence_model = None # Optional[str] Default convergence model
110112
load_default_parameters = load_default_parameters
111113

@@ -365,7 +367,8 @@ def parameter(self,
365367
elif not setter:
366368
return lambda setter: self.parameter(setter, element, coupled, name,
367369
distribution, units, baseline,
368-
bounds, hook, description, optimized)
370+
bounds, hook, description, optimized,
371+
kind, safe)
369372
p = Parameter(name, setter, element,
370373
self.system, distribution, units,
371374
baseline, bounds, coupled, hook, description)
@@ -920,7 +923,7 @@ def optimize(self,
920923
for i, p in enumerate(parameters):
921924
lb[i], ub[i] = p.bounds
922925
bounds = Bounds(lb, ub)
923-
if method == 'COBYLA':
926+
if method in ('cobyla', 'cobyqa', 'trust-constr', 'slsqp', 'l-bfgs-b'):
924927
result = minimize(
925928
objective_function,
926929
args=args,
@@ -939,7 +942,10 @@ def optimize(self,
939942
)
940943
else:
941944
raise ValueError(f'invalid optimization method {method!r}')
942-
return result, convergence_model
945+
if isinstance(convergence_model, str):
946+
return result, convergence_model
947+
else:
948+
return result
943949

944950
def evaluate(self, notify=0, file=None, autosave=0, autoload=False,
945951
convergence_model=None, **kwargs):

biosteam/units/design_tools/Gibbs_equilibrium_reaction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def minimize_Gibbs_free_energy(
8181
polish = lambda *args, **kwargs: minimize(
8282
*args, **kwargs,
8383
args=f_args,
84-
method='COBYQA',
84+
method='COBYLA',
8585
)
8686
solution = differential_evolution(
8787
Gibbs_equilibrium_objective,

tests/test_model.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def set_temperature(temperature):
202202
H1.T = temperature
203203

204204
with pytest.raises(ValueError):
205-
@model.parameter(element=H1)
205+
@model.parameter(element=H1, safe=True)
206206
def set_efficiency(temperature):
207207
H1.T = temperature
208208

@@ -343,7 +343,7 @@ def test_model_optimization_differential_evolution():
343343
import biosteam as bst
344344
import numpy as np
345345
model = bst.Model(bst.System())
346-
inputs = np.array([0, 0, 0])
346+
inputs = np.array([0, 0], float)
347347

348348
@model.optimized_parameter(bounds=(-2, 1))
349349
def P0(x0):
@@ -353,19 +353,20 @@ def P0(x0):
353353
def P1(x1):
354354
inputs[1] = x1
355355

356-
@model.optimized_parameter(bounds=(-1, 3))
357-
def P2(x2):
358-
inputs[2] = x2
359-
360356
@model.indicator
361357
def objective():
362-
x0, x1, x2 = inputs
363-
return x0**2 - x0 + x1**4 - x1**2 + x0 * x1 + x2
364-
365-
solution = model.optimize(
366-
objective,
367-
method='differential evolution',
368-
)
358+
x0, x1 = inputs
359+
return x0**2 - x0 + x1**2 - x1
360+
361+
for method in ('cobyla', 'cobyqa',
362+
'trust-constr', 'slsqp',
363+
'L-BFGS-B', 'shgo',
364+
'differential evolution'):
365+
solution = model.optimize(
366+
objective,
367+
method=method,
368+
)
369+
assert_allclose(solution.x, [0.5, 0.5], rtol=1e-3, atol=1e-3)
369370

370371
if __name__ == '__main__':
371372
test_parameter_hook()

0 commit comments

Comments
 (0)