9a0e0b4a450fe0f2f7118182adab6a47dd241964,framework/Optimizers/SPSA.py,SPSA,localInputAndChecks,#SPSA#Any#,79
Before Change
if self.paramDict["a"] is None:
self.paramDict["a"] = mathUtils.hyperdiagonal(np.ones(numValues))
self.raiseAMessage("Defaulting "a" gradient parameter to",self.paramDict["a"])
else:
self.paramDict["a"] = float(self.paramDict["a"])
self.constraintHandlingPara["innerBisectionThreshold"] = float(self.paramDict.get("innerBisectionThreshold", 1e-2))
self.constraintHandlingPara["innerLoopLimit"] = float(self.paramDict.get("innerLoopLimit", 1000))
self.gradDict["pertNeeded"] = self.gradDict["numIterForAve"] * (self.paramDict["pertSingleGrad"]+1)
After Change
.format(self.paramDict["pertDist"]))
self.constraintHandlingPara["innerBisectionThreshold"] = float(self.paramDict.get("innerBisectionThreshold", 1e-2))
if not 0 < self.constraintHandlingPara["innerBisectionThreshold"] < 1:
self.raiseAnError(IOError,"innerBisectionThreshold must be between 0 and 1; got",self.constraintHandlingPara["innerBisectionThreshold"])
self.constraintHandlingPara["innerLoopLimit"] = float(self.paramDict.get("innerLoopLimit", 1000))
self.gradDict["pertNeeded"] = self.gradDict["numIterForAve"] * (self.paramDict["pertSingleGrad"]+1)
stochDist = self.paramDict.get("stochasticDistribution", "Hypersphere")
if stochDist == "Bernoulli":
self.stochasticDistribution = Distributions.returnInstance("Bernoulli",self)
self.stochasticDistribution.p = 0.5
self.stochasticDistribution.initializeDistribution()
self.stochasticEngine = lambda: [(0.5+randomUtils.random()*(1.+randomUtils.random()/1000.*randomUtils.randomIntegers(-1, 1, self))) if self.stochasticDistribution.rvs() == 1 else
-1.*(0.5+randomUtils.random()*(1.+randomUtils.random()/1000.*randomUtils.randomIntegers(-1, 1, self))) for _ in range(numValues)]
elif stochDist == "Hypersphere":
self.stochasticEngine = lambda: randomUtils.randPointsOnHypersphere(numValues) if numValues > 1 else [randomUtils.randPointsOnHypersphere(numValues)]
else:
self.raiseAnError(IOError, self.paramDict["stochasticEngine"]+"is currently not supported for SPSA")
def localLocalInitialize(self, solutionExport):
Method to initialize local settings.
@ In, solutionExport, DataObject, a PointSet to hold the solution
@ Out, None
self._endJobRunnable = (self._endJobRunnable*self.gradDict["pertNeeded"])+len(self.optTraj)
self.trajCycle = cycle(self.optTraj)
for traj in self.optTraj:
self.counter["lastStepSize"][traj] = self.paramDict["initialStepSize"]
values = {}
for var in self.getOptVars():
values[var] = self.optVarsInit["initial"][var][traj]
values[var] = self._checkBoundariesAndModify(self.optVarsInit["upperBound"][var],
self.optVarsInit["lowerBound"][var],
self.optVarsInit["ranges"][var],
values[var], 0.99, 0.01)
data = self.normalizeData(values)
self.updateVariableHistory(values,traj)
self.queueUpOptPointRuns(traj,data)
pertPoints = self._createPerturbationPoints(traj,data)
self._setupNewStorage(traj)
def localStillReady(self, ready, convergence = False):
Determines if optimizer is ready to provide another input. If not, and if jobHandler is finished, this will end sampling.
@ In, ready, bool, variable indicating whether the caller is prepared for another input.
@ In, convergence, bool, optional, variable indicating whether the convergence criteria has been met.
@ Out, ready, bool, variable indicating whether the caller is prepared for another input.
if not ready:
return ready
if any(len(self.submissionQueue[t]) for t in self.optTraj):
return True
return False
def localGenerateInput(self,model,oldInput):
Method to generate input for model to run
@ In, model, model instance, it is the instance of a RAVEN model
@ In, oldInput, list, a list of the original needed inputs for the model (e.g. list of files, etc. etc)
@ Out, None
GradientBasedOptimizer.localGenerateInput(self,model,oldInput)
for _ in self.optTraj:
traj = next(self.trajCycle)
if len(self.submissionQueue[traj]):
prefix, point = self.getQueuedPoint(traj)
for var in self.getOptVars():
self.values[var] = point[var]

In pattern: SUPERPATTERN
Frequency: 3
Non-data size: 5
Instances
Project Name: idaholab/raven
Commit Name: 9a0e0b4a450fe0f2f7118182adab6a47dd241964
Time: 2019-01-31
Author: paul.talbot@inl.gov
File Name: framework/Optimizers/SPSA.py
Class Name: SPSA
Method Name: localInputAndChecks
Project Name: idaholab/raven
Commit Name: 79c1d265126b3e1551e60d503817de830dac241f
Time: 2019-11-11
Author: paul.talbot@inl.gov
File Name: framework/Samplers/Stratified.py
Class Name: Stratified
Method Name: localInputAndChecks
Project Name: idaholab/raven
Commit Name: b61879b8f78d7709be5eb12d8fa44832f0e9c362
Time: 2017-07-03
Author: paul.talbot@inl.gov
File Name: framework/Optimizers/Optimizer.py
Class Name: Optimizer
Method Name: initialize