Cost Functions¶
Base Classes¶
- class ionworkspipeline.data_fits.objective_functions.costs.ObjectiveFunction(objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None)¶
Base class for all objective/cost functions.
Parameters¶
- objective_weightsdict[str, float], optional
Per-objective weights. Keys are objective names, values are weights. Missing objectives default to weight 1.0.
- variable_weightsdict[str, float], optional
Per-variable weights. Keys are variable names, values are weights. Missing variables default to weight 1.0.
Extends:
ionworkspipeline.controllers.ConfigMixin- __call__(**kwargs)¶
Call self as a function.
- combine(accumulator: ScalarAccumulator | ResidualAccumulator, other: ScalarAccumulator | ResidualAccumulator | float | ndarray[Any, dtype[_ScalarType_co]]) ScalarAccumulator | ResidualAccumulator¶
Combine accumulator values.
Parameters¶
- accumulator
The accumulator to add to.
- other
Another accumulator, or a raw value to add with weight 1.0.
Returns¶
- Accumulator
The updated accumulator (same object, mutated in place).
- finalize_output(accumulator: ScalarAccumulator | ResidualAccumulator) float | ndarray[Any, dtype[_ScalarType_co]]¶
Finalize an accumulator to its output value.
- property objective_names: list[str] | None¶
The configured objective names, or None to use all outputs.
- property residual_scale_factor: float¶
Scaling factor for regularizer residuals to match scalar semantics.
Regularizers contribute
w * f(x)²in scalar mode. In residual mode they outputsqrt(w) * f(x), which after scalarization becomesscalarize_factor * w * f(x)²wherescalarize_factoris 1.0 for most costs but 0.5 for GaussianLogLikelihood. To preserve the scalar contribution, regularizer residuals are scaled bysqrt(residual_scale_factor)before accumulation, whereresidual_scale_factor = 1 / scalarize_factor.
- scalarize(value: float | ndarray[Any, dtype[_ScalarType_co]], mode: Literal['scalar', 'residuals'] = 'scalar') float¶
Convert a cost value to a scalar.
For scalar mode, returns the value unchanged. For residual mode, computes the sum of squares.
- class ionworkspipeline.data_fits.objective_functions.costs.ErrorFunction(normalization: Normalization | str | float | None = None, nan_values=None, objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None, *, scale: str | float | None = None)¶
Base class for error-based cost functions.
Parameters¶
- normalizationNormalization | str | float, optional
How to normalize weights across variables with different magnitudes. Options: “mean” (default), “identity”, “range”, “sum_squares”, “mean_squares”, “root_mean_squares”, or a float constant. Legacy names “sse”, “mse”, “rmse” are mapped to new names.
- nan_valuesstr | float, optional
How to handle NaN values in model output. Defaults to 1e10. Options: float value, “mean”, “min”, or “raise”.
- objective_weightsdict[str, float], optional
Per-objective weights.
- variable_weightsdict[str, float], optional
Per-variable weights.
- scalestr | float, optional
Deprecated. Use
normalizationinstead.
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ObjectiveFunction
Error Functions¶
- class ionworkspipeline.data_fits.objective_functions.costs.Max(normalization: Normalization | str | float | None = None, nan_values=None, objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None, *, scale: str | float | None = None)¶
Maximum error cost function.
Returns the maximum absolute difference between model and data: Max = max|model - data|
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ErrorFunction
- class ionworkspipeline.data_fits.objective_functions.costs.SSE(normalization: Normalization | str | float | None = None, nan_values=None, objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None, *, scale: str | float | None = None)¶
Sum-of-squared-errors cost function.
Calculates the sum of squared differences between model and data: SSE = Σ(model - data)²
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ErrorFunction
- class ionworkspipeline.data_fits.objective_functions.costs.MSE(normalization: Normalization | str | float | None = None, nan_values=None, objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None, *, scale: str | float | None = None)¶
Mean-squared-error cost function.
Calculates the mean of squared differences: MSE = Σ(model - data)² / n
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ErrorFunction
- class ionworkspipeline.data_fits.objective_functions.costs.RMSE(normalization: Normalization | str | float | None = None, nan_values=None, objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None, *, scale: str | float | None = None)¶
Root-mean-squared-error cost function.
Calculates the square root of MSE: RMSE = √(Σ(model - data)² / n)
This cost function only supports scalar output.
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ErrorFunction
- class ionworkspipeline.data_fits.objective_functions.costs.MAE(normalization: Normalization | str | float | None = None, nan_values=None, objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None, *, scale: str | float | None = None)¶
Mean-absolute-error cost function.
Calculates the mean of absolute differences: MAE = Σ|model - data| / n
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ErrorFunction
- class ionworkspipeline.data_fits.objective_functions.costs.ChiSquare(variable_standard_deviations: dict[str, float], nan_values=None)¶
Chi-square cost function with per-variable standard deviations.
Calculates chi² = Σ((model - data) / σ)² where σ is the standard deviation for each variable.
Parameters¶
- variable_standard_deviationsdict[str, float]
Dictionary mapping variable names to their standard deviations.
- nan_valuesstr | float, optional
How to handle NaN values.
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ErrorFunction
Multi-Cost Functions¶
- class ionworkspipeline.data_fits.objective_functions.costs.MultiCost(costs: dict, normalization: Normalization | str | float | None = None, nan_values=None, objective_weights: dict[str, float] | None = None, variable_weights: dict[str, float] | None = None, *, scale: str | float | None = None)¶
Cost function combining multiple costs with weights.
Parameters¶
- costsdict[ObjectiveFunction, float]
Dictionary mapping cost functions to their weights.
- normalization, nan_values, objective_weights, variable_weights
Passed to ErrorFunction base class.
- scalestr | float, optional
Deprecated. Use
normalizationinstead.
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ErrorFunction- scalarize(value: float | ndarray[Any, dtype[_ScalarType_co]], mode: Literal['scalar', 'residuals'] = 'scalar') float¶
Convert the finalized cost value to a scalar.
Uses the passed-in value directly, which includes any regularization terms added after MultiCost.__call__ returns. This ensures Evaluation.value_scalarized reflects the true total cost.
Design Functions¶
- class ionworkspipeline.data_fits.objective_functions.costs.DesignFunction(objective_weights: dict[str, float] | None = None)¶
Cost function for design optimization problems.
Used for optimization objectives where the goal is to maximize or minimize design metrics (energy density, power density, etc.) rather than fit to data.
Parameters¶
- objective_weightsdict[str, float], optional
Per-objective weights.
Extends:
ionworkspipeline.data_fits.objective_functions.costs.costs.ObjectiveFunction