MCPcopy Create free account
hub / github.com/Meshcapade/difflocks / PIDStepSizeController

Class PIDStepSizeController

k_diffusion/sampling.py:304–330  ·  view source on GitHub ↗

A PID controller for ODE adaptive step size control.

Source from the content-addressed store, hash-verified

302
303
304class PIDStepSizeController:
305 """A PID controller for ODE adaptive step size control."""
306 def __init__(self, h, pcoeff, icoeff, dcoeff, order=1, accept_safety=0.81, eps=1e-8):
307 self.h = h
308 self.b1 = (pcoeff + icoeff + dcoeff) / order
309 self.b2 = -(pcoeff + 2 * dcoeff) / order
310 self.b3 = dcoeff / order
311 self.accept_safety = accept_safety
312 self.eps = eps
313 self.errs = []
314
315 def limiter(self, x):
316 return 1 + math.atan(x - 1)
317
318 def propose_step(self, error):
319 inv_error = 1 / (float(error) + self.eps)
320 if not self.errs:
321 self.errs = [inv_error, inv_error, inv_error]
322 self.errs[0] = inv_error
323 factor = self.errs[0] ** self.b1 * self.errs[1] ** self.b2 * self.errs[2] ** self.b3
324 factor = self.limiter(factor)
325 accept = factor >= self.accept_safety
326 if accept:
327 self.errs[2] = self.errs[1]
328 self.errs[1] = self.errs[0]
329 self.h *= factor
330 return accept
331
332
333class DPMSolver(nn.Module):

Callers 1

dpm_solver_adaptiveMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected