Skip to content

Commit

Permalink
Merge pull request #426 from Libensemble/experimental/aposmm_rc
Browse files Browse the repository at this point in the history
Experimental/aposmm rc
  • Loading branch information
shuds13 committed Apr 17, 2020
2 parents 6cd7181 + 1fbd6f6 commit 1377972
Show file tree
Hide file tree
Showing 25 changed files with 143 additions and 34 deletions.
2 changes: 1 addition & 1 deletion .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ per-file-ignores =
examples/gen_funcs/*aposmm.py:E501

# Need to set something before the APOSMM import
libensemble/tests/scaling_tests/warpx/run_libE_on_warpX_aposmm.py:E402
libensemble/tests/scaling_tests/warpx/run_libensemble_on_warpx.py:E402
libensemble/gen_funcs/persistent_aposmm.py:E402, E501
libensemble/tests/regression_tests/test_persistent_aposmm*:E402
libensemble/tests/regression_tests/test_aposmm*:E402
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class Mock(MagicMock):
def __getattr__(cls, name):
return MagicMock()

MOCK_MODULES = ['argparse', 'numpy', 'mpi4py' , 'scipy', 'numpy.lib', 'numpy.lib.recfunctions', 'math', 'petsc4py', 'PETSc', 'nlopt', 'scipy.spatial', 'scipy.spatial.distance']
MOCK_MODULES = ['argparse', 'numpy', 'mpi4py' , 'dfols', 'scipy', 'numpy.lib', 'numpy.lib.recfunctions', 'math', 'petsc4py', 'PETSc', 'nlopt', 'scipy.spatial', 'scipy.spatial.distance']
sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)

#from libensemble import *
Expand Down
2 changes: 1 addition & 1 deletion docs/data_structures/exit_criteria.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Exit criteria for libEnsemble::
.. seealso::
From `test_branin_aposmm_nlopt_and_then_scipy.py`_.

.. literalinclude:: ../../libensemble/tests/regression_tests/test_sim_dirs.py
.. literalinclude:: ../../libensemble/tests/regression_tests/test_aposmm_sim_dirs.py
:start-at: exit_criteria
:end-before: end_exit_criteria_rst_tag

Expand Down
26 changes: 23 additions & 3 deletions docs/examples/gen_funcs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,29 @@ sampling
:members:
:undoc-members:

APOSMM
------
.. automodule:: aposmm
Persistent APOSMM
-----------------

Configuring APOSMM
^^^^^^^^^^^^^^^^^^

By default, persistent APOSMM will import several optmizers which require
external packages and MPI. To import only the optmizers you are using
you can add the following lines in your calling script, before importing APOSMM::

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = <optimizers>

Where ``optimizers`` can be a string or list of strings.

The options are:

- ``'petsc'``, ``'nlopt'``, ``'dfols'``, ``'scipy'``, ``'external'``

Persistent APOSMM
^^^^^^^^^^^^^^^^^

.. automodule:: persistent_aposmm
:members:
:undoc-members:

Expand Down
6 changes: 3 additions & 3 deletions libensemble/gen_funcs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ def rc(**kargs):
Parameters
----------
aposmm_optimizer : string
Set the aposmm optimizer (to prevent all options being imported).
aposmm_optimizers : string or list of strings
Select the aposmm optimizer/s (to prevent all options being imported).
"""
Expand All @@ -15,5 +15,5 @@ def rc(**kargs):
setattr(rc, key, value)


rc.aposmm_optimizer = True
rc.aposmm_optimizers = None
__import__('sys').modules[__name__ + '.rc'] = rc
30 changes: 23 additions & 7 deletions libensemble/gen_funcs/aposmm.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,32 @@
import traceback
import numpy as np
from scipy.spatial.distance import cdist, pdist, squareform
from scipy import optimize as scipy_optimize

from mpi4py import MPI
from petsc4py import PETSc

from numpy.lib.recfunctions import merge_arrays

from math import log, gamma, pi, sqrt

import nlopt
import libensemble.gen_funcs
optimizer_list = ['petsc', 'nlopt', 'scipy']
optimizers = libensemble.gen_funcs.rc.aposmm_optimizers

if optimizers is None:
from mpi4py import MPI
from petsc4py import PETSc
import nlopt
from scipy import optimize as scipy_optimize
else:
if not isinstance(optimizers, list):
optimizers = [optimizers]
unrec = set(optimizers) - set(optimizer_list)
if unrec:
print('APOSMM Warning: unrecognized optimizers {}'.format(unrec))

if 'petsc' in optimizers:
from mpi4py import MPI
from petsc4py import PETSc
if 'nlopt' in optimizers:
import nlopt
if 'scipy' in optimizers:
from scipy import optimize as scipy_optimize


class APOSMMException(Exception):
Expand Down
37 changes: 23 additions & 14 deletions libensemble/gen_funcs/persistent_aposmm.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,42 @@

import numpy as np
from scipy.spatial.distance import cdist
from scipy import optimize as sp_opt
from math import log, gamma, pi, sqrt

import libensemble.gen_funcs
optimizer = libensemble.gen_funcs.rc.aposmm_optimizer
if optimizer == 'petsc':
from petsc4py import PETSc
elif optimizer == 'nlopt':
import nlopt
elif optimizer == 'dfols':
import dfols
elif optimizer in ['scipy', 'external']:
pass
else:
if optimizer is not None:
print('APOSMM Warning: {} optimizer not recognized. Loading all')
optimizer_list = ['petsc', 'nlopt', 'dfols', 'scipy', 'external']
optimizers = libensemble.gen_funcs.rc.aposmm_optimizers

if optimizers is None:
from mpi4py import MPI
from petsc4py import PETSc
import nlopt
import dfols
from scipy import optimize as sp_opt
else:
if not isinstance(optimizers, list):
optimizers = [optimizers]
unrec = set(optimizers) - set(optimizer_list)
if unrec:
print('APOSMM Warning: unrecognized optimizers {}'.format(unrec))

if 'petsc' in optimizers:
from mpi4py import MPI
from petsc4py import PETSc
if 'nlopt' in optimizers:
import nlopt
if 'dfols' in optimizers:
import dfols
if 'scipy' in optimizers:
from scipy import optimize as sp_opt
if 'external' in optimizers:
pass


from libensemble.message_numbers import STOP_TAG, PERSIS_STOP, FINISHED_PERSISTENT_GEN_TAG
from libensemble.tools.gen_support import send_mgr_worker_msg
from libensemble.tools.gen_support import get_mgr_worker_msg


from multiprocessing import Event, Process, Queue


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc'
from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f

from libensemble.alloc_funcs.fast_alloc_and_pausing import give_sim_work_first as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble.tests.regression_tests.support import persis_info_3 as persis_info, aposmm_gen_out as gen_out
Expand Down
4 changes: 4 additions & 0 deletions libensemble/tests/regression_tests/test_aposmm_pounders.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc'
from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f

from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc'
from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f

from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out
from libensemble.tests.regression_tests.common import mpi_comm_split
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc'
from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f

from libensemble.tests.regression_tests.support import persis_info_2 as persis_info, aposmm_gen_out as gen_out
from libensemble.tests.regression_tests.common import mpi_comm_excl
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.branin.branin_obj import call_branin as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = ['nlopt', 'scipy']
from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f

from libensemble.tests.regression_tests.support import (persis_info_2 as persis_info,
aposmm_gen_out as gen_out,
branin_vals_and_minima as M)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE, libE_tcp_worker
from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = ['nlopt', 'petsc']
from libensemble.gen_funcs.aposmm import aposmm_logic as gen_f

from libensemble.alloc_funcs.fast_alloc_to_aposmm import give_sim_work_first as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble.tests.regression_tests.support import (persis_info_1 as persis_info,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'dfols'

from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f
from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.periodic_func import func_wrapper as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, add_unique_random_streams

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@
from libensemble.libE import libE
from math import gamma, pi, sqrt
from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@
import sys
import numpy as np

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = ['nlopt', 'scipy']
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.periodic_func import func_wrapper as sim_f
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f
from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, add_unique_random_streams

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
from libensemble.libE import libE
from math import gamma, pi, sqrt, ceil
from libensemble.sim_funcs.chwirut1 import chwirut_eval as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.gen_funcs.sampling import lhs_sample
from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'scipy'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@
from libensemble.libE import libE
from math import gamma, pi, sqrt
from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
# Import libEnsemble items for this test
from libensemble.libE import libE
from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'petsc'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, add_unique_random_streams

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@
from libensemble.libE import libE
from math import gamma, pi, sqrt
from libensemble.sim_funcs.six_hump_camel import six_hump_camel as sim_f, six_hump_camel_func, six_hump_camel_grad

import libensemble.gen_funcs
libensemble.gen_funcs.rc.aposmm_optimizers = 'nlopt'
from libensemble.gen_funcs.persistent_aposmm import aposmm as gen_f

from libensemble.alloc_funcs.persistent_aposmm_alloc import persistent_aposmm_alloc as alloc_f
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble.tests.regression_tests.support import six_hump_camel_minima as minima
Expand Down
4 changes: 2 additions & 2 deletions libensemble/tests/scaling_tests/warpx/all_machine_specs.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
'sim_app': os.environ['HOME'] + '/warpx/Bin/main2d.gnu.TPROF.MPI.OMP.ex',
'extra_args': '', # extra arguments passed to mpirun/mpiexec at execution
'OMP_NUM_THREADS': '2',
'sim_max': 3 # Maximum number of simulations
'sim_max': 3 # Maximum number of simulations
}


Expand All @@ -22,5 +22,5 @@
# extra arguments passed to jsrun at execution
'extra_args': '-n 1 -a 1 -g 1 -c 1 --bind=packed:1 --smpiargs="-gpu"',
'OMP_NUM_THREADS': '1',
'sim_max': 400 # Maximum number of simulations
'sim_max': 400 # Maximum number of simulations
}
Loading

0 comments on commit 1377972

Please sign in to comment.