maxEpochs

@set:KSLControl(controlType = ControlType.INTEGER, lowerBound = 1.0)
var maxEpochs: Int(source)

A cap on decisions per episode.

A @KSLControl, so simopt can search it through the path it already uses, with its bound chosen by R16's rule: lowerBound = 1.0 is the exact domain of a setter that requires > 0, so the clamp can only ever deliver a value the setter accepts.

It matters more than it used to. The caller now decides how often a decision is taken, so a runaway caller is bounded by nothing else.