TensionCompressionSpringFunction#
- class TensionCompressionSpringFunction(objective: str = 'minimize', modifiers: List[BaseModifier] | None = None, memory: bool = False, collect_data: bool = True, callbacks=None, catch_errors=None, penalty_coefficient: float = 1000000.0)[source]#
Tension/compression spring design optimization problem.
This mechanical engineering problem involves designing a helical compression spring to minimize weight while satisfying constraints on minimum deflection, shear stress, surge frequency, and geometric limits.
Problem Description
A helical compression spring must be designed to carry a given load. The spring is characterized by wire diameter, mean coil diameter, and number of active coils.
|<-- D -->| .----.----. / / /| / / / | | | | | <- d (wire diameter) \ \ \ | \ \ \| '----'----' . . N active coils . .----.----. / / / / / /
The objective is to minimize the spring weight, which is proportional to the wire length (N * pi * D * d^2).
Design Variables
- dfloat
Wire diameter. Bounds: [0.05, 2.0] inches
- Dfloat
Mean coil diameter (center of wire to center). Bounds: [0.25, 1.3] inches
- Nfloat
Number of active coils. Bounds: [2.0, 15.0]
Objective Function
Minimize spring weight:
\[f(d, D, N) = (N + 2) D d^2\]This is proportional to the total wire volume (and thus weight).
Constraints
Minimum deflection constraint
Shear stress constraint
Surge frequency constraint
Outer diameter constraint (D + d <= D_max)
- Parameters:
Notes
This problem has a small feasible region relative to the search space, making it challenging for many optimization algorithms. The optimal solution lies at the boundary of multiple active constraints.
References
Examples
>>> from surfaces.test_functions.engineering import TensionCompressionSpringFunction >>> func = TensionCompressionSpringFunction() >>> # Evaluate at a point >>> result = func({"d": 0.05, "D": 0.35, "N": 11.0}) >>> # Check feasibility >>> func.is_feasible({"d": 0.05169, "D": 0.35673, "N": 11.2885}) True
- __call__(params: Dict[str, Any] | ndarray | list | tuple | None = None, **kwargs)[source]#
Evaluate the objective function.
- Args:
params: Parameter values as dict, array, list, or tuple **kwargs: Parameters as keyword arguments (only with dict input)
- Returns:
The objective function value
- batch(X: ArrayLike) ArrayLike[source]#
Evaluate multiple parameter sets in a single call.
- Parameters:
X (ArrayLike) – 2D array of shape (n_points, n_dim) where each row is a parameter set.
- Returns:
1D array of shape (n_points,) with evaluation results.
- Return type:
ArrayLike
- Raises:
NotImplementedError – If the function does not implement _batch_objective.
ValueError – If X has wrong number of dimensions or wrong n_dim.
- constraint_violations(params: Dict[str, Any]) List[float][source]#
Calculate constraint violations (positive values only).
- pure(params: Dict[str, Any] | ndarray | list | tuple | None = None, **kwargs)[source]#
Evaluate the function without modifiers.
Returns the true (deterministic) function value, bypassing any configured modifiers. Does not update search_data, n_evaluations, or callbacks. Ignores memory caching.
- raw_objective(params: Dict[str, Any]) float[source]#
Public API: evaluate raw objective without penalties.