cubnm.optimize¶
Optimizers of the model free parameters
Brain network model problem. A |
|
Base class for evolutionary optimizers |
|
Grid search optimizer |
|
Generic wrapper for pymoo optimizers. |
|
Covariance Matrix Adaptation Evolution Strategy (CMA-ES) optimizer |
|
Non-dominated Sorting Genetic Algorithm II (NSGA-II) optimizer |
|
Optimize a batch of optimizers in parallel (without requiring |
- class cubnm.optimize.BNMProblem(model, params, emp_fc_tril=None, emp_fcd_tril=None, emp_bold=None, het_params=[], het_params_range='same', maps=None, maps_coef_range='auto', node_grouping=None, multiobj=False, **kwargs)¶
Bases:
pymoo.core.problem.ProblemBrain network model problem. A
pymoo.core.problem.Problemthat defines the model, free parameters and their ranges, and target empirical data (FC and FCD), and the simulation configurations (throughcubnm.sim.base.SimGroup).cubnm.optimize.Optimizerclasses can be used to optimize the free parameters of this problem.Parameters¶
- model:
str, {‘rWW’, ‘rWWEx’, ‘Kuramoto’} model name
- params:
dictoftupleorfloat a dictionary including parameter names as keys and their fixed values (
float) or continuous range of values (tupleof (min, max)) as values.- emp_fc_tril:
np.ndarrayorNone lower triangular part of empirical FC. Shape: (edges,)
- emp_fcd_tril:
np.ndarrayorNone lower triangular part of empirical FCD. Shape: (window_pairs,)
- emp_bold:
np.ndarrayor None cleaned and parcellated empirical BOLD time series. Shape: (nodes, volumes) Motion outliers can either be excluded (not recommended as it disrupts the temporal structure) or replaced with zeros. If provided emp_fc_tril and emp_fcd_tril will be ignored.
- het_params:
listofstr which regional parameters are heterogeneous across nodes
- maps:
str path to heterogeneity maps as a text file or a numpy array. Shape: (n_maps, nodes). If provided one free parameter per regional parameter per each map will be added.
- maps_coef_range: ‘auto’ or
tupleorlistoftuple Range of coefficients for the maps in map-based heterogeneity (i.e., when
mapsis provided).'auto': uses (-1/max, -1/min) for maps with positive and negative values (assuming they are z-scored) and (0, 1) otherwisetuple: uses the same range for all mapslistoftuple: n-map element list specifying the range of coefficients for each map
- het_params_range: ‘same’ or
dictoftupleor None Forced range of regional parameters (after map-based heterogeneity is applied). The regional parameter values across nodes will be normalized into this range (if out of range).
'same': uses the same range as provided in params.dictoftuple: uses the specified range for each regional parameter. The keys must be the allhet_paramsand the values must be tuples of (min, max).None: does not normalize the regional parameters. This may lead to infeasible parameters, e.g. negative values, with some combinations of maps and map coeficients.
- node_grouping: {None, ‘node’, ‘sym’,
str,np.ndarray} Defines groups of nodes which have the same regional parameters.
None: does not use region-/group-specific parameters'node': each node has its own regional free parameters'sym': uses the same regional free parameters for each pair of symmetric nodes (e.g. L and R hemispheres). Assumes symmetry of parcels between L and R hemispheres.str: path to a text file including node grouping array. Shape: (nodes,)np.ndarray: a numpy array. Shape: (nodes,)
- multiobj:
bool instead of combining the objectives into a single objective function (via summation) defines each objective separately. This must not be used with single-objective optimizers
- **kwargs
Keyword arguments passed to
cubnm.sim.base.SimGroup
- get_config(include_sim_group=True, include_N=False)¶
Get the problem configuration
Parameters¶
- include_sim_group:
bool whether to include the configuration of the associated
cubnm.sim.base.SimGroup- include_N:
bool whether to include the current population size in the configuration
Returns¶
dictthe configuration of the problem
- include_sim_group:
- _get_Xt(X)¶
Transforms normalized parameters in range [0, 1] to the actual parameter ranges
Parameters¶
- X:
np.ndarray the normalized parameters of current population. Shape: (N, ndim)
Returns¶
np.ndarraythe transformed parameters of current population. Shape: (N, ndim)
- X:
- _get_X(Xt)¶
Normalizes parameters to range [0, 1]
Parameters¶
- Xt:
np.ndarray the parameters of current population. Shape: (N, ndim)
Returns¶
np.ndarraythe normalized parameters current population. Shape: (N, ndim)
- Xt:
- _get_sim_params(X)¶
Gets the global and regional parameters of the problem’s
cubnm.sim.base.SimGroupbased on the problem free and fixed parameters and type of regional parameter heterogeneity (map-based, group-based or none).Parameters¶
- X:
np.ndarray the normalized parameters of current population in range [0, 1]. Shape: (N, ndim)
Returns¶
dictofnp.ndarraykeys correspond to model parameters
- X:
- _set_sim_params(X)¶
Sets the global and regional parameters of the problem’s
cubnm.sim.base.SimGroupbased on the problem free and fixed parameters and type of regional parameter heterogeneity (map-based, group-based or none).Parameters¶
- X:
np.ndarray the normalized parameters of current population in range [0, 1]. Shape: (N, ndim)
- X:
- _evaluate(X, out, *args, **kwargs)¶
Ovewrites the
pymoo.core.problem.Problem._evaluate()method to evaluate the goodness of fit of the simulations based on parameters X and store the results in out.Parameters¶
- eval(X, skip_run=False)¶
Runs the simulations based on normalized candidate free parameters X and evaluates their goodness of fit to the empirical FC and FCD of the problem.
Parameters¶
- X:
np.ndarray the normalized parameters of current population in range [0, 1]. Shape: (N, ndim)
- skip_run:
bool will only be true in batch optimization where the simulations are already run and only the GOF calculation is needed
Returns¶
pd.DataFrameThe goodness of fit measures (columns) of each simulation (rows)
- X:
- model:
- class cubnm.optimize.Optimizer(**kwargs)¶
Bases:
abc.ABCBase class for evolutionary optimizers
- abstract optimize()¶
- save(save_opt=True, save_obj=False)¶
Saves the output of the optimizer, including history of particles, history of optima, the optimal point, and its simulation data. The output will be saved to out_dir of the problem’s
cubnm.sim.base.SimGroup. If a directory with the same type of optimizer already exists, a new directory with a new index will be created.Parameters¶
- save_opt:
bool reruns and saves the optimal simulation(s) data
- save_obj:
bool saves the optimizer object which also includes the simulation data of all simulations and therefore can be large file. Warning: this file is very large.
- save_opt:
- _plot_space_3d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 3D parameter space colored by measure
- _plot_space_2d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 2D parameter space colored by measure
- _plot_space_1d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 1D parameter space colored by measure
- plot_space(measure=None, title='default', opt=False, gen=None, config={}, ax=None)¶
Plot parameter space colored by
measure. Can only be used for 1D, 2D and 3D parameter spaces.Parameters¶
- measure:
strorNone the measure to color the points by. If None, the points will be colored by the
config['color']parameter and have the same color- title:
str the title of the plot. If ‘default’, the title will be set to the measure clean label. If None, no title will be set.
- opt:
bool whether to mark the optimum in the plot. Will be ignored if
genis provided.- gen:
intorNone the generation to plot. If None, the entire history will be plotted. When using a
cubnm.optimize.GridOptimizerthis is ignored.- config:
dict plotting configuration. The following keys are available with default values:
- figsize:
tuple, (4.5, 4.5) for 2D and 3D plots, None for 1D figure size. Ignored if
axis provided
- figsize:
- size:
float, 30 size of the sphere
- size:
- alpha:
float, 0.2 transparency of the sphere
- alpha:
- color:
str, ‘red’ color of the points if measure is None or space is 1D
- color:
- opt_facecolor:
str, ‘none’ face color of the optimum point
- opt_facecolor:
- opt_edgecolor:
str, ‘black’ edge color of the optimum point
- opt_edgecolor:
- full_lim:
bool, True whether to set the axes limits to the full range of the parameters defined by the problem
- full_lim:
Specific to 2D and 3D plots:
- cmap:
str, ‘viridis’ colormap to use for the measure
- cmap:
- vmin:
float, None minimum value of the color range
- vmin:
- vmax:
float, None maximum value of the color range
- vmax:
Specific to 1D and 2D plots:
marker:
str, ‘o’
Specific to 3D plots:
- elev:
float, 15 elevation angle in degrees
- elev:
- azim:
float, -15 azimuth angle in degrees
- azim:
- roll:
floatorNone, None roll angle in degrees
- roll:
- aspects:
tuple, (1, 1, 1) aspect ratio of the axes
- aspects:
- zoom:
float, 0.85 zoom level of the plot
- zoom:
- ax:
matplotlib.axes.Axes the axes to plot on. For 3D must have
projection='3d'. If None, a new figure and axes will be created.
Returns¶
tuplethe axes of the plot
- measure:
- plot_history(measure, legend=True, ax=None, line_kws={}, scatter_kws={})¶
Plot the history of
measureacross the optimization generations.Parameters¶
- measure:
str the measure to plot
- legend:
bool whether to show the legend
- ax:
matplotlib.axes.Axes the axes to plot on. If None, a new figure and axes will be created.
- line_kws:
dict additional keyword arguments passed to the line plot of the median across generations
- scatter_kws:
dict additional keyword arguments passed to the scatter plot of the individual particles across generations
- measure:
- class cubnm.optimize.GridOptimizer(**kwargs)¶
Bases:
OptimizerGrid search optimizer
Example¶
Run a grid search of rWW model with 100 simulations running a 4 by 5 by 5 grid search of parameters G, w_p and J_N:
from cubnm import datasets, optimize problem = optimize.BNMProblem( model = 'rWW', params = { 'G': (0.001, 10.0), 'w_p': (0, 2.0), 'J_N': (0.001, 0.5), }, duration = 60, TR = 1, window_size=10, window_step=2, sc = datasets.load_sc('strength', 'schaefer-100'), emp_bold = datasets.load_bold('schaefer-100'), ) go = optimize.GridOptimizer() go.optimize(problem, grid_shape={'G': 4, 'w_p': 5, 'J_N': 5}) go.save()
- optimize(problem, grid_shape)¶
Runs a grid search optimization on the given problem.
Parameters¶
- problem:
cubnm.optimizer.BNMProblem The problem to be set up with the algorithm.
- grid_shape:
intordict Shape of the grid search. If an integer is provided the same number of points are used for each parameter. If a dictionary is provided, the keys should be the parameter names and the values should be the number of points within the range of each parameter.
- problem:
- save(save_avg_states=True, **kwargs)¶
Saves the output of the optimizer, including history of particles, history of optima, the optimal point, and its simulation data. The output will be saved to out_dir of the problem’s
cubnm.sim.base.SimGroup.Parameters¶
- save_avg_states:
bool saves the average states of all simulations
- **kwargs
additional keyword arguments passed to the
cubnm.optimizer.Optimizer.save()
- save_avg_states:
- _plot_space_3d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 3D parameter space colored by measure
- _plot_space_2d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 2D parameter space colored by measure
- _plot_space_1d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 1D parameter space colored by measure
- plot_space(measure=None, title='default', opt=False, gen=None, config={}, ax=None)¶
Plot parameter space colored by
measure. Can only be used for 1D, 2D and 3D parameter spaces.Parameters¶
- measure:
strorNone the measure to color the points by. If None, the points will be colored by the
config['color']parameter and have the same color- title:
str the title of the plot. If ‘default’, the title will be set to the measure clean label. If None, no title will be set.
- opt:
bool whether to mark the optimum in the plot. Will be ignored if
genis provided.- gen:
intorNone the generation to plot. If None, the entire history will be plotted. When using a
cubnm.optimize.GridOptimizerthis is ignored.- config:
dict plotting configuration. The following keys are available with default values:
- figsize:
tuple, (4.5, 4.5) for 2D and 3D plots, None for 1D figure size. Ignored if
axis provided
- figsize:
- size:
float, 30 size of the sphere
- size:
- alpha:
float, 0.2 transparency of the sphere
- alpha:
- color:
str, ‘red’ color of the points if measure is None or space is 1D
- color:
- opt_facecolor:
str, ‘none’ face color of the optimum point
- opt_facecolor:
- opt_edgecolor:
str, ‘black’ edge color of the optimum point
- opt_edgecolor:
- full_lim:
bool, True whether to set the axes limits to the full range of the parameters defined by the problem
- full_lim:
Specific to 2D and 3D plots:
- cmap:
str, ‘viridis’ colormap to use for the measure
- cmap:
- vmin:
float, None minimum value of the color range
- vmin:
- vmax:
float, None maximum value of the color range
- vmax:
Specific to 1D and 2D plots:
marker:
str, ‘o’
Specific to 3D plots:
- elev:
float, 15 elevation angle in degrees
- elev:
- azim:
float, -15 azimuth angle in degrees
- azim:
- roll:
floatorNone, None roll angle in degrees
- roll:
- aspects:
tuple, (1, 1, 1) aspect ratio of the axes
- aspects:
- zoom:
float, 0.85 zoom level of the plot
- zoom:
- ax:
matplotlib.axes.Axes the axes to plot on. For 3D must have
projection='3d'. If None, a new figure and axes will be created.
Returns¶
tuplethe axes of the plot
- measure:
- plot_history(measure, legend=True, ax=None, line_kws={}, scatter_kws={})¶
Plot the history of
measureacross the optimization generations.Parameters¶
- measure:
str the measure to plot
- legend:
bool whether to show the legend
- ax:
matplotlib.axes.Axes the axes to plot on. If None, a new figure and axes will be created.
- line_kws:
dict additional keyword arguments passed to the line plot of the median across generations
- scatter_kws:
dict additional keyword arguments passed to the scatter plot of the individual particles across generations
- measure:
- class cubnm.optimize.PymooOptimizer(termination=None, n_iter=2, seed=0, print_history=True, save_history_sim=False, **kwargs)¶
Bases:
OptimizerGeneric wrapper for pymoo optimizers.
Parameters:¶
- termination:
pymoo.termination.Termination The termination object that defines the stopping criteria for the optimization process. If not provided, the termination criteria will be based on the number of iterations (n_iter).
- n_iter:
int The maximum number of iterations for the optimization process. This parameter is only used if termination is not provided.
- seed:
int The seed value for the random number generator used by the optimizer.
- print_history:
bool Flag indicating whether to print the optimization history during the optimization process.
- save_history_sim:
bool Flag indicating whether to save the simulation data of each iteration. Default is False to avoid consuming too much memory across iterations.
- **kwargs
Additional keyword arguments that can be passed to the pymoo optimizer.
- setup_problem(problem, pymoo_verbose=False, **kwargs)¶
Registers a
cubnm.optimizer.BNMProblemwith the optimizer, so that the optimizer can optimize its free parameters.Parameters¶
- problem:
cubnm.optimizer.BNMProblem The problem to be set up with the algorithm.
- pymoo_verbose:
bool Flag indicating whether to enable verbose output from pymoo. Default is False.
- **kwargs
Additional keyword arguments to be passed to the algorithm setup method.
- problem:
- optimize()¶
Optimizes the associated
cubnm.optimizer.BNMProblemfree parameters through an evolutionary optimization approach by running multiple generations of parallel simulations until the termination criteria is met or maximum number of iterations is reached.
- save(save_opt=True, save_obj=False)¶
Saves the output of the optimizer, including history of particles, history of optima, the optimal point, and its simulation data. The output will be saved to out_dir of the problem’s
cubnm.sim.base.SimGroup. If a directory with the same type of optimizer already exists, a new directory with a new index will be created.Parameters¶
- save_opt:
bool reruns and saves the optimal simulation(s) data
- save_obj:
bool saves the optimizer object which also includes the simulation data of all simulations and therefore can be large file. Warning: this file is very large.
- save_opt:
- _plot_space_3d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 3D parameter space colored by measure
- _plot_space_2d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 2D parameter space colored by measure
- _plot_space_1d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 1D parameter space colored by measure
- plot_space(measure=None, title='default', opt=False, gen=None, config={}, ax=None)¶
Plot parameter space colored by
measure. Can only be used for 1D, 2D and 3D parameter spaces.Parameters¶
- measure:
strorNone the measure to color the points by. If None, the points will be colored by the
config['color']parameter and have the same color- title:
str the title of the plot. If ‘default’, the title will be set to the measure clean label. If None, no title will be set.
- opt:
bool whether to mark the optimum in the plot. Will be ignored if
genis provided.- gen:
intorNone the generation to plot. If None, the entire history will be plotted. When using a
cubnm.optimize.GridOptimizerthis is ignored.- config:
dict plotting configuration. The following keys are available with default values:
- figsize:
tuple, (4.5, 4.5) for 2D and 3D plots, None for 1D figure size. Ignored if
axis provided
- figsize:
- size:
float, 30 size of the sphere
- size:
- alpha:
float, 0.2 transparency of the sphere
- alpha:
- color:
str, ‘red’ color of the points if measure is None or space is 1D
- color:
- opt_facecolor:
str, ‘none’ face color of the optimum point
- opt_facecolor:
- opt_edgecolor:
str, ‘black’ edge color of the optimum point
- opt_edgecolor:
- full_lim:
bool, True whether to set the axes limits to the full range of the parameters defined by the problem
- full_lim:
Specific to 2D and 3D plots:
- cmap:
str, ‘viridis’ colormap to use for the measure
- cmap:
- vmin:
float, None minimum value of the color range
- vmin:
- vmax:
float, None maximum value of the color range
- vmax:
Specific to 1D and 2D plots:
marker:
str, ‘o’
Specific to 3D plots:
- elev:
float, 15 elevation angle in degrees
- elev:
- azim:
float, -15 azimuth angle in degrees
- azim:
- roll:
floatorNone, None roll angle in degrees
- roll:
- aspects:
tuple, (1, 1, 1) aspect ratio of the axes
- aspects:
- zoom:
float, 0.85 zoom level of the plot
- zoom:
- ax:
matplotlib.axes.Axes the axes to plot on. For 3D must have
projection='3d'. If None, a new figure and axes will be created.
Returns¶
tuplethe axes of the plot
- measure:
- plot_history(measure, legend=True, ax=None, line_kws={}, scatter_kws={})¶
Plot the history of
measureacross the optimization generations.Parameters¶
- measure:
str the measure to plot
- legend:
bool whether to show the legend
- ax:
matplotlib.axes.Axes the axes to plot on. If None, a new figure and axes will be created.
- line_kws:
dict additional keyword arguments passed to the line plot of the median across generations
- scatter_kws:
dict additional keyword arguments passed to the scatter plot of the individual particles across generations
- measure:
- termination:
- class cubnm.optimize.CMAESOptimizer(popsize, x0=None, sigma=0.5, use_bound_penalty=False, algorithm_kws={}, **kwargs)¶
Bases:
PymooOptimizerCovariance Matrix Adaptation Evolution Strategy (CMA-ES) optimizer
Parameters¶
- popsize:
int The population size for the optimizer
- x0: array-like
The initial guess for the optimization. If None (default), the initial guess will be estimated based on popsize random samples as the first generation
- sigma:
float The initial step size for the optimization
- use_bound_penalty:
bool Whether to use a bound penalty for the optimization
- algorithm_kws:
dict Additional keyword arguments for the CMAES algorithm
- **kwargs
Additional keyword arguments
Example¶
Run a CMAES optimization for 10 iterations with a population size of 20 on a 3D model (rWW, homogeneous):
from cubnm import datasets, optimize problem = optimize.BNMProblem( model = 'rWW', params = { 'G': (0.001, 10.0), 'w_p': (0, 2.0), 'J_N': (0.001, 0.5), }, emp_bold = datasets.load_bold('schaefer-100'), duration = 60, TR = 1, sc_path = datasets.load_sc('strength', 'schaefer-100'), states_ts = True ) cmaes = optimize.CMAESOptimizer(popsize=20, n_iter=10, seed=1) cmaes.setup_problem(problem) cmaes.optimize() cmaes.save()
- multiobj = False¶
- setup_problem(problem, **kwargs)¶
Extends
cubnm.optimizer.PymooOptimizer.setup_problem()to set up the optimizer with the problem and set the bound penalty option based on the optimizer’s use_bound_penalty attribute.Parameters¶
- problem:
cubnm.optimizer.BNMProblem The problem to be set up with the algorithm.
- **kwargs
Additional keyword arguments to be passed to
cubnm.optimizer.PymooOptimizer.setup_problem()
- problem:
- optimize()¶
Optimizes the associated
cubnm.optimizer.BNMProblemfree parameters through an evolutionary optimization approach by running multiple generations of parallel simulations until the termination criteria is met or maximum number of iterations is reached.
- save(save_opt=True, save_obj=False)¶
Saves the output of the optimizer, including history of particles, history of optima, the optimal point, and its simulation data. The output will be saved to out_dir of the problem’s
cubnm.sim.base.SimGroup. If a directory with the same type of optimizer already exists, a new directory with a new index will be created.Parameters¶
- save_opt:
bool reruns and saves the optimal simulation(s) data
- save_obj:
bool saves the optimizer object which also includes the simulation data of all simulations and therefore can be large file. Warning: this file is very large.
- save_opt:
- _plot_space_3d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 3D parameter space colored by measure
- _plot_space_2d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 2D parameter space colored by measure
- _plot_space_1d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 1D parameter space colored by measure
- plot_space(measure=None, title='default', opt=False, gen=None, config={}, ax=None)¶
Plot parameter space colored by
measure. Can only be used for 1D, 2D and 3D parameter spaces.Parameters¶
- measure:
strorNone the measure to color the points by. If None, the points will be colored by the
config['color']parameter and have the same color- title:
str the title of the plot. If ‘default’, the title will be set to the measure clean label. If None, no title will be set.
- opt:
bool whether to mark the optimum in the plot. Will be ignored if
genis provided.- gen:
intorNone the generation to plot. If None, the entire history will be plotted. When using a
cubnm.optimize.GridOptimizerthis is ignored.- config:
dict plotting configuration. The following keys are available with default values:
- figsize:
tuple, (4.5, 4.5) for 2D and 3D plots, None for 1D figure size. Ignored if
axis provided
- figsize:
- size:
float, 30 size of the sphere
- size:
- alpha:
float, 0.2 transparency of the sphere
- alpha:
- color:
str, ‘red’ color of the points if measure is None or space is 1D
- color:
- opt_facecolor:
str, ‘none’ face color of the optimum point
- opt_facecolor:
- opt_edgecolor:
str, ‘black’ edge color of the optimum point
- opt_edgecolor:
- full_lim:
bool, True whether to set the axes limits to the full range of the parameters defined by the problem
- full_lim:
Specific to 2D and 3D plots:
- cmap:
str, ‘viridis’ colormap to use for the measure
- cmap:
- vmin:
float, None minimum value of the color range
- vmin:
- vmax:
float, None maximum value of the color range
- vmax:
Specific to 1D and 2D plots:
marker:
str, ‘o’
Specific to 3D plots:
- elev:
float, 15 elevation angle in degrees
- elev:
- azim:
float, -15 azimuth angle in degrees
- azim:
- roll:
floatorNone, None roll angle in degrees
- roll:
- aspects:
tuple, (1, 1, 1) aspect ratio of the axes
- aspects:
- zoom:
float, 0.85 zoom level of the plot
- zoom:
- ax:
matplotlib.axes.Axes the axes to plot on. For 3D must have
projection='3d'. If None, a new figure and axes will be created.
Returns¶
tuplethe axes of the plot
- measure:
- plot_history(measure, legend=True, ax=None, line_kws={}, scatter_kws={})¶
Plot the history of
measureacross the optimization generations.Parameters¶
- measure:
str the measure to plot
- legend:
bool whether to show the legend
- ax:
matplotlib.axes.Axes the axes to plot on. If None, a new figure and axes will be created.
- line_kws:
dict additional keyword arguments passed to the line plot of the median across generations
- scatter_kws:
dict additional keyword arguments passed to the scatter plot of the individual particles across generations
- measure:
- popsize:
- class cubnm.optimize.NSGA2Optimizer(popsize, algorithm_kws={}, **kwargs)¶
Bases:
PymooOptimizerNon-dominated Sorting Genetic Algorithm II (NSGA-II) optimizer
Parameters¶
- popsize: int
The population size for the optimizer
- algorithm_kws: dict
Additional keyword arguments for the NSGA2 algorithm
- kwargs: dict
Additional keyword arguments for the base class
- multiobj = True¶
- setup_problem(problem, pymoo_verbose=False, **kwargs)¶
Registers a
cubnm.optimizer.BNMProblemwith the optimizer, so that the optimizer can optimize its free parameters.Parameters¶
- problem:
cubnm.optimizer.BNMProblem The problem to be set up with the algorithm.
- pymoo_verbose:
bool Flag indicating whether to enable verbose output from pymoo. Default is False.
- **kwargs
Additional keyword arguments to be passed to the algorithm setup method.
- problem:
- optimize()¶
Optimizes the associated
cubnm.optimizer.BNMProblemfree parameters through an evolutionary optimization approach by running multiple generations of parallel simulations until the termination criteria is met or maximum number of iterations is reached.
- save(save_opt=True, save_obj=False)¶
Saves the output of the optimizer, including history of particles, history of optima, the optimal point, and its simulation data. The output will be saved to out_dir of the problem’s
cubnm.sim.base.SimGroup. If a directory with the same type of optimizer already exists, a new directory with a new index will be created.Parameters¶
- save_opt:
bool reruns and saves the optimal simulation(s) data
- save_obj:
bool saves the optimizer object which also includes the simulation data of all simulations and therefore can be large file. Warning: this file is very large.
- save_opt:
- _plot_space_3d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 3D parameter space colored by measure
- _plot_space_2d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 2D parameter space colored by measure
- _plot_space_1d(plot_df, measure, title='default', opt_params=None, config={}, ax=None)¶
Plot 1D parameter space colored by measure
- plot_space(measure=None, title='default', opt=False, gen=None, config={}, ax=None)¶
Plot parameter space colored by
measure. Can only be used for 1D, 2D and 3D parameter spaces.Parameters¶
- measure:
strorNone the measure to color the points by. If None, the points will be colored by the
config['color']parameter and have the same color- title:
str the title of the plot. If ‘default’, the title will be set to the measure clean label. If None, no title will be set.
- opt:
bool whether to mark the optimum in the plot. Will be ignored if
genis provided.- gen:
intorNone the generation to plot. If None, the entire history will be plotted. When using a
cubnm.optimize.GridOptimizerthis is ignored.- config:
dict plotting configuration. The following keys are available with default values:
- figsize:
tuple, (4.5, 4.5) for 2D and 3D plots, None for 1D figure size. Ignored if
axis provided
- figsize:
- size:
float, 30 size of the sphere
- size:
- alpha:
float, 0.2 transparency of the sphere
- alpha:
- color:
str, ‘red’ color of the points if measure is None or space is 1D
- color:
- opt_facecolor:
str, ‘none’ face color of the optimum point
- opt_facecolor:
- opt_edgecolor:
str, ‘black’ edge color of the optimum point
- opt_edgecolor:
- full_lim:
bool, True whether to set the axes limits to the full range of the parameters defined by the problem
- full_lim:
Specific to 2D and 3D plots:
- cmap:
str, ‘viridis’ colormap to use for the measure
- cmap:
- vmin:
float, None minimum value of the color range
- vmin:
- vmax:
float, None maximum value of the color range
- vmax:
Specific to 1D and 2D plots:
marker:
str, ‘o’
Specific to 3D plots:
- elev:
float, 15 elevation angle in degrees
- elev:
- azim:
float, -15 azimuth angle in degrees
- azim:
- roll:
floatorNone, None roll angle in degrees
- roll:
- aspects:
tuple, (1, 1, 1) aspect ratio of the axes
- aspects:
- zoom:
float, 0.85 zoom level of the plot
- zoom:
- ax:
matplotlib.axes.Axes the axes to plot on. For 3D must have
projection='3d'. If None, a new figure and axes will be created.
Returns¶
tuplethe axes of the plot
- measure:
- plot_history(measure, legend=True, ax=None, line_kws={}, scatter_kws={})¶
Plot the history of
measureacross the optimization generations.Parameters¶
- measure:
str the measure to plot
- legend:
bool whether to show the legend
- ax:
matplotlib.axes.Axes the axes to plot on. If None, a new figure and axes will be created.
- line_kws:
dict additional keyword arguments passed to the line plot of the median across generations
- scatter_kws:
dict additional keyword arguments passed to the scatter plot of the individual particles across generations
- measure:
- cubnm.optimize.batch_optimize(optimizers, problems, save=True, setup_kwargs={})¶
Optimize a batch of optimizers in parallel (without requiring multiple CPU cores when using GPUs).
Parameters¶
- optimizers:
listofcubnm.optimize.PymooOptimizerorcubnm.optimize.PymooOptimizer A (list of) optimizer instance(s) to be run in parallel. If not a list, the same optimizer will be used for all problems and problems must be a list.
- problems:
listofcubnm.optimize.BNMProblemorcubnm.optimize.BNMProblem A (list of) problem instance(s) to be set up with the optimizers. Will be mapped one-to-one with the optimizers. If not a list, the same problem will be used in all optimizers and optimizers must be a list.
- save:
bool save the optimizers and their results. This is more efficient than saving each optimizer separately as saving involves rerunning the optimal simulations, which is done in a batch in this function.
- setup_kwargs:
dict kwargs passed on to
cubnm.optimize.PymooOptimizer.setup_problem()
Returns¶
- optimizers:
listofcubnm.optimize.PymooOptimizer A list of optimizer instances which have been run in parallel
Example¶
Run CMAES for two subjects (with different SC and functional data) in a batch:
from cubnm import datasets, optimize # assuming sub1 and sub2 SC and BOLD are available as # numpy arrays `sc_sub1`, `sc_sub2`, `bold_sub1`, `bold_sub2` # shared problem configuration problem_kwargs = dict( model = 'rWW', params = { 'G': (0.001, 10.0), 'w_p': (0, 2.0), 'J_N': (0.001, 0.5), }, duration = 60, TR = 1, ) # problem for subject 1 p_sub1 = optimize.BNMProblem( sc = sc_sub1, emp_bold = bold_sub1, **problem_kwargs ) # problem for subject 2 p_sub2 = optimize.BNMProblem( sc = sc_sub2, emp_bold = bold_sub2, **problem_kwargs ) # optimizer cmaes = optimize.CMAESOptimizer(popsize=20, n_iter=10, seed=1) # batch optimization optimizers = optimize.batch_optimize(cmaes, [p_sub1, p_sub2]) # print optima print(optimizers[0].opt) print(optimizers[1].opt)
- optimizers: