DynamicPolynomialPenalty

class DynamicPolynomialPenalty(val basePenalty: Double = 100.0, val iterationExponent: Double = 1.0, val violationExponent: Double = 1.0, constraint: PenalizableConstraint? = null) : PenaltyFunction(source)

A dynamic polynomial penalty that scales with both the magnitude of the constraint violation and the current iteration of the solver:

P(v, k) = basePenalty * k^iterationExponent * v^violationExponent

With the default violationExponent = 1.0 this is the "naive penalty" of Park and Kim (2015): an increasing sequence M_k = basePenalty * k^iterationExponent multiplying the (raw) violation. It applies uniformly to deterministic (linear, functional) and stochastic (response) constraints; the violation is obtained from the bound constraint.

Parameters

basePenalty

The scaling coefficient (M_0). Default is 100.0. Must be > 0.

iterationExponent

The power applied to the iteration counter. Default is 1.0.

violationExponent

The power applied to the violation magnitude. Default is 1.0 (linear). Linear is preferred: squaring a sub-unit violation (such as a fill-rate gap) collapses the penalty toward zero.

constraint

The bound constraint, or null for an unbound default template.

Constructors

Link copied to clipboard
constructor(basePenalty: Double = 100.0, iterationExponent: Double = 1.0, violationExponent: Double = 1.0, constraint: PenalizableConstraint? = null)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Functions

Link copied to clipboard

Returns a copy of this penalty bound to the supplied constraint. Used to resolve a default template into a per-constraint instance.

Link copied to clipboard
open override fun penalty(solution: Solution): Double

The penalty contribution for this penalty's constraint at the supplied solution. Must be a pure function of the solution (and this penalty's own state) so that the penalized objective is a stable, Solver-free property of an immutable solution. Called only on bound instances.