Initialization¶
this doc describes initialization
CobraInitializer¶
The initialization in SACOBRA_Py consists of the following steps:
pass in the specification of the COP and all the options in
SACoptionss_opt(optional, if
s_opts.ID.rescale==True) rescale the problem in input spacecreate the initial design, see
InitDesigneradjust several elements according to constraint range, see
CobraInitializer.adCon()calculate for each initial design point
numViol, the number of violated constraints, andmaxViol, the maximum constraint violation. If equality constraints are involved, calculate \(\mu_{init}\), the radius for an artificial feasibility tube around each equality constraint (seeEQUoptions) and base the calculation ofnumViolandmaxViolon this artificial feasibility.calculate the so-far best (artificial) feasible point. If no point fulfills (artificial) feasibility, take from the set of points with minimum
numViolthe one with the best objective.set up result dictionary
self.sac_resadjust DRC according to objective range, see
CobraInitializer.adDRC()
- class cobraInit.CobraInitializer(x0, fn: object, fName: str, lower: ~numpy.ndarray, upper: ~numpy.ndarray, is_equ: ~numpy.ndarray, solu=None, s_opts: ~opt.sacOptions.SACoptions = <opt.sacOptions.SACoptions object>)¶
Initialize SACOBRA optimization:
problem formulation: x0, fn, lower, upper, is_equ, solu
parameter settings: s_opts via
SACoptionscreate initial design: A, Fres, Gres via
InitDesigner
- Parameters:
x0 (np.ndarray or None) – start point, if given, then its dim has to be the same as
lower. If it is/has NaN or None on input, it is replaced by a random point from[lower, upper].fn – function returning
(1+nConstraints)-dim vector: [objective to minimize, constraints]fName – function name
lower – lower bound, its dimension defines input space dimension
upper – upper bound (same dim as lower)
is_equ – boolean vector with dim
nConstraints: which constraints are equality constraints?solu (np.ndarray or None) – (optional, for diagnostics) true solution vector or solution matrix (one solution per row): one or several feasible x that deliver the minimal objective value
s_opts (SACoptions) – the options
- adCon()¶
Adjust several elements according to constraint range.
The following elements of
self.sac_resmay be changed: ‘fn’, ‘Gres’, ‘Grange’, ‘GrangeEqu’
- adDRC()¶
Adjust DRC (distance requirement cycle), based on range of
Fres
- get_fbest()¶
Return the original objective function value at the best feasible solution.
Note: We cannot take the best function value via
sac_res['fn'], because this may be modified by PLOG or others.
- get_xbest()¶
- Returns:
best solution in original space
- Return type:
np.ndarray
- get_xbest_cobra()¶
- Returns:
best solution in COBRA space (maybe rescaled)
- Return type:
np.ndarray
- class initDesigner.InitDesigner(x0: ndarray, fn, rng, lower: ndarray, upper: ndarray, s_opts: SACoptions)¶
Create matrix
self.Awith shape(P, d)of sample points in (potentially rescaled) input space[lower, upper]\(\subset \mathbb{R}^d\), whereP = initDesPointsandd =input space dimension.Apply
fnto these points and split the result in objective function valuesself.Fres(with shape(P,)) and constraint function valuesself.Gres(with shape(P,nC)wherenC= number of constraints).- Parameters:
x0 – the last point
self.A[-1,:]isx0fn – see parameter
fnincobraInit.CobraInitializerlower – vector of shape
(d,)upper – vector of shape
(d,)s_opts (SACoptions) – object of class
SACoptions. Here we use from elementIDoptionss_opts.IDthe elementsinitDesignandinitDesPoints.
- __call__() tuple[ndarray, ndarray, ndarray]¶
Return the three results
A,FresandGresof the initial design- Returns:
(self.A, self.Fres, self.Gres)
- Return type:
(np.ndarray, np.ndarray, np.ndarray)
TODO: Describe Types of Initial Design (LHS, Random, …)
Options¶
All paramters (options) for SACOBRA_Py have sensible defaults defined. The user has only to specify those parameters where a setting different from the defaults is desired.
- class opt.sacOptions.SACoptions(feval=100, XI=None, skipPhaseI=True, saveIntermediate=False, saveSurrogates=False, verbose=1, verboseIter=10, important=True, cobraSeed=42, ID=<opt.idOptions.IDoptions object>, RBF=<opt.rbfOptions.RBFoptions object>, SEQ=<opt.seqOptions.SEQoptions object>, EQU=<opt.equOptions.EQUoptions object>, ISA=<opt.isaOptions.ISAoptions object>, MS=<opt.msOptions.MSoptions object>, TR=<opt.trOptions.TRoptions object>)¶
The collection of all parameters (options) for SACOBRA_Py. Except for some general parameters defined in this class, they are hierarchically organized in nested option classes.
- Parameters:
feval – number of function evaluations
XI – Distance-Requirement-Cycle (DRC) that controls exploration: Each infill point has a forbidden-sphere of radius
XI[c]around it.cloops cyclically throughXI’s inidices. IfXI==None, then CobraInitializer will set it, depending on objective range, to short DRC[0.001, 0.0]or long DRC[0.3, 0.05, 0.001, 0.0005, 0.0].skipPhaseI – whether to skip SACOBRA_Py phase I or not
DOSAC – controls the default options for
ISAoptions ISA. 0: take plain COBRA settings, 1: full SACOBRA settings, 2: reduced SACOBRA settingssaveIntermediate – whether to save intermediate results or not (TODO)
saveSurrogates – whether to save surrogate models or not (TODO)
verbose – verbosity level: 0: print nothing. 1: print only important messages. 2: print everything
verboseIter – an integer value, after how many iterations to print summarized results.
important – controls the importance level for some
verboseprint’s inupdateInfoAndCounterscobraSeed – the seed for RNGs. SACOBRA_Py guarantees the same results for the same seed
ID (IDoptions) – nested options for initial design
RBF (RBFoptions) – nested options for radial basis functions
SEQ (SEQoptions) – nested options for sequential optimizer
EQU (EQUoptions) – nested options for equality constraints
ISA (ISAoptions) – nested Internal SACOBRA options
MS (MSoptions) – nested options for model selection
TR (TRoptions) – nested options for trust region
Distance Requirement Cycle
The Distance Requirement Cycle (DRC) is the vector XI that controls exploration: Each already evaluated infill point is surrounded by a forbidden-sphere of radius XI[c] with c = i mod XI.size (c loops cyclically through XI’s inidices`, that’s where the name cycle comes from). A new infill point is searched under the additional constraint that it has to be a distance XI[c] away from all other already evaluted infill points. The larger XI[c], the more exploration.
If XI==None, then CobraInitializer will set it, depending on objective range, to short DRC [0.001, 0.0] or long DRC [0.3, 0.05, 0.001, 0.0005, 0.0]. Both vectors contain XI[c] = 0 which enforces exploitation. (If all entries were XI[c] > 0 then a good region would never be exploited further, since the search could never continue in the close vicinity of an already good infill point.)
- class opt.idOptions.IDoptions(initDesign='RANDOM', initDesPoints: int = None, initDesOptP: int = None, initBias=0.005, rescale=True, newLower=-1, newUpper=1)¶
Options for the initial design (\(d\) = input dimension of problem).
- Parameters:
initDesign – options: “RANDOM”, “RAND_R”, “RAND_REP”, “LHS”, … (see initDesigner)
initDesPoints – number of initial design points. If None, cobraInit will set it to \(d+1\) if RBF.degree=1 or to \((d+1)(d+2)/2\) if RBF.degree=2
initDesOptP – if None, cobraInit will set it to initDesPoints
initBias
rescale – if True, rescale input space from [lower, upper] to \([\) newLower, newUpper \(]^d\)
newLower – common new lower bound for each of the \(d\) input dimensions
newUpper – common new upper bound for each of the \(d\) input dimensions
- class opt.rbfOptions.RBFoptions(model='cubic', degree=None, rho=0.0, rhoDec=2.0, rhoGrow=0, width=-1, widthFactor=1.0, gaussRule='One')¶
Options for the RBF surrogate models
- Parameters:
model – RBF kernel type (currently only
"cubic", but others will follow soon)degree – degree of polynomial tail for RBF kernel. If None, then
RBFInterpolatorwill set it depending on kernel type. See SciPy’s RBFInterpolator documentation for details.rho –
0: interpolating RBFs,> 0: approximating (spline-like) RBFs. The largerrhothe smootherrhoDec – exponential decay factor for
rhorhoGrow – every
rhoGrow(e.g. 100) iterations, re-enlargerho. If 0, then re-enlarge neverwidth – only relevant for scalable (e.g. Gaussian) kernels. Determines the width \(\sigma\)
widthFactor – only for scalable kernels. Additional constant factor applied to each width \(\sigma\)
gaussRule – only relevant for Gaussian kernels, see
trainGaussRBF
- class opt.seqOptions.SEQoptions(optimizer='COBYLA', feval=1000, tol=1e-06, conTol=0.0, penaF=[3.0, 1.7, 300000.0], sigmaD=[3.0, 2.0, 100], epsilonInit=None, epsilonMax=None, finalEpsXiZero=True, trueFuncForSurrogates=False)¶
Options for the sequential optimization
- Parameters:
optimizer – string defining the optimization method for SACOBRA_Py phase I and II. One out of [“COBYLA”,”ISRESN”]
feval – maximum number of function evaluations on the surrogate model
tol – convergence tolerance for sequential optimizer
conTol – constraint violation tolerance
penaF – (TODO)
sigmaD – (TODO)
epsilonInit – initial constant added to each constraint to maintain a certain margin to boundary
epsilonMax – maximum for constant added to each constraint
finalEpsXiZero – if True, set in final iteration
EPSandXIto zero for best exploitationtrueFuncForSurrogates – if True, use the true (constraint & fitness) functions instead of surrogates (only for debug analysis)
- class opt.equOptions.EQUoptions(active=True, initType='TAV', muType='expFunc', muDec=1.5, muFinal=1e-07, mu4inequality=False, muGrow=0, refine=True, refineMaxit=1000, refineAlgo='L-BGFS-B', refinePrint=False)¶
Equality handling options
- Parameters:
active – if set to TRUE, the equality-handling (EH) technique is activated. The EH technique transforms each equality constraint \(h(\mathbf{x})=0\) into two inequality constraints \(h(\mathbf{x})-\mu <0\) and \(-h(\mathbf{x})-\mu<0\) with an adaptive (normally decaying) margin \(\mu\).
initType – the equality margin \(\mu\) is initialized with one of these choices:
["TAV"|"TMV"|"EMV"|"useGrange"]muType – type of function used to shrink margin \(\mu\) during the optimization process. One out of
["SAexpFunc"|"expFunc"|"funcDim"|"funcSDim"|"Zhang"|"CONS"], seemodifyMumuDec – decay factor for margin \(\mu\), see
modifyMumuFinal – lower bound for margin \(\mu\).
muFinalshould be set to a small but non-zero value (larger than machine accuracy).muGrow – every
muGrow(e.g. 100) iterations, re-enlarge the \(\mu\)-band. If 0, then re-enlarge nevermu4inequality – use the artificial feasibility band also for inequalities (experimental)
refine – enables the refine mechanism for equality handling
refineMaxit – maximum number of iterations used in the refine step. Note that the refine step runs on the surrogate models and does not impose any extra real function evaluation
refineAlgo – optimizer for refine step [“COBYLA”|”L-BFGS-B”]
refinePrint – whether to print “cg-values (before,after,true)” after each refine step
TODO: Describe Refine Algo
- class opt.isaOptions.ISAoptions(DOSAC=1, RS=True, RStype='CONSTANT', RSauto=False, RSmax=0.3, RSmin=0.05, RS_Cs=10, RS_rep=False, RS_verb=False, aDRC=True, aFF=True, aCF=True, TFRange=100000.0, TGR=1000.0, conPLOG=False, conFitPLOG=False, adaptivePLOG=False, onlinePLOG=False, onlineFreqPLOG=10, pEffectInit=0, minMaxNormal=False, onlineMinMax=False)¶
Internal self-adjusting (ISA) options for SACOBRA.
Defaults for DOSAC=1 (SACOBRA settings with fewer online adjustments). Other choices are
DOSAC=0 (
ISAoptions0, COBRA-R settings = turn off SACOBRA), andDOSAC=2 (
ISAoptions2, SACOBRA settings with fewer parameters and more online adjustments).
- Parameters:
DOSAC
RS – flag to enable/disable random start algorithm
RStype – type of function to calculate probability to start the internal optimizer with a random start point. One out of [“CONSTANT”, “SIGMOID”]
RSauto
RSmax – maximum probability of a random start
RSmin – minimum probability of a random start
RS_Cs – if RS_Cs iterations w/o progress, do a random start
RS_rep – if True, generate reproducible random numbers with my_rng2 (R and Python)
RS_verb – if True, be verbose in RandomStarter.random_start
aDRC – flag for automatic DRC adjustment
aFF – flag for automatic objective function transformation
aCF – flag for automatic constraint function transformation
TFRange – threshold, if the range of
Fresis larger thanTFRange, then apply automatic objective function transformationTGR – threshold:
GRatio > TGR, then apply automatic constraint function transformation.GRatiois the ratio “largest GR / smallest GR” where GR is the min-max range of a specific constraint. IfTGR < 1, then the transformation is always performed.conPLOG
conFitPLOG
adaptivePLOG – (experimental) flag for objective function transformation with
plog, where the parameterpShiftis adapted during iterationsonlinePLOG – flag for online decision marking whether to use plog or not according to p-effect
onlineFreqPLOG – after how many iterations the online plog check is done again
pEffectInit
minMaxNormal
onlineMinMax
- class opt.isaOptions.ISAoptions0(DOSAC=0, RS=False, RStype='SIGMOID', RSauto=False, RSmax=0.3, RSmin=0.05, RS_Cs=10, RS_rep=False, RS_verb=False, aDRC=False, aFF=False, aCF=False, TFRange=inf, TGR=inf, conPLOG=False, conFitPLOG=False, adaptivePLOG=False, onlinePLOG=False, onlineFreqPLOG=10, pEffectInit=0, minMaxNormal=False, onlineMinMax=False)¶
Internal self-adjusting options for DOSAC=0 (COBRA-R settings = turn off SACOBRA).
Differs only in default settings, parameters and their meaning are the same as in
ISAoptions.
- class opt.isaOptions.ISAoptions2(DOSAC=2, RS=True, RStype='CONSTANT', RSauto=True, RSmax=0.3, RSmin=0.05, RS_Cs=10, RS_rep=False, RS_verb=False, aDRC=True, aFF=True, aCF=True, TFRange=-1, TGR=-1, conPLOG=False, conFitPLOG=False, adaptivePLOG=False, onlinePLOG=True, onlineFreqPLOG=10, pEffectInit=3, minMaxNormal=False, onlineMinMax=False)¶
Internal self-adjusting options for DOSAC=2 (SACOBRA with fewer parameters and more online adjustments).
Differs only in default settings, parameters and their meaning are the same as in
ISAoptions.