PressureVesselFunction#
- class PressureVesselFunction(min_volume: float = 750.0, 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]#
Cylindrical pressure vessel design optimization problem.
This problem involves designing a compressed air storage tank with a working pressure of 3000 psi and a minimum volume of 750 cubic feet. The vessel is cylindrical with hemispherical end caps.
Problem Description
The tank consists of a cylindrical shell with two hemispherical heads. Both the shell and heads are made from rolled steel plate, which is available in discrete thicknesses (multiples of 0.0625 inches).
|<-------- L -------->| _______________________ / \ ( ) <- hemispherical | | head (Th) | | | cylindrical | <- shell (Ts) | shell | | | | R | <- inner radius |<--------->| | ( ) \_______________________//
The objective is to minimize the total cost, which includes material cost, forming cost, and welding cost.
Design Variables
- Tsfloat
Shell thickness. Bounds: [0.0625, 6.1875] inches (integer multiples of 0.0625)
- Thfloat
Head thickness. Bounds: [0.0625, 6.1875] inches (integer multiples of 0.0625)
- Rfloat
Inner radius of the vessel. Bounds: [10.0, 200.0] inches
- Lfloat
Length of the cylindrical section (not including heads). Bounds: [10.0, 200.0] inches
Objective Function
Minimize total cost:
\[f(T_s, T_h, R, L) = 0.6224 T_s R L + 1.7781 T_h R^2 + 3.1661 T_s^2 L + 19.84 T_s^2 R\]The terms represent: - Cylindrical shell material and welding - Hemispherical head material - Shell forming cost - Head-to-shell welding cost
Constraints
Shell thickness must satisfy hoop stress requirement
Head thickness must satisfy stress requirement
Volume must meet minimum requirement (750 ft^3)
- Parameters:
Notes
In the original problem formulation, Ts and Th are constrained to be integer multiples of 0.0625 inches (standard plate thicknesses). This continuous relaxation allows any value within bounds.
References
Examples
>>> from surfaces.test_functions.engineering import PressureVesselFunction >>> func = PressureVesselFunction() >>> # Evaluate at a point >>> result = func({"Ts": 0.8, "Th": 0.4, "R": 42.0, "L": 180.0}) >>> # Check if design meets volume requirement >>> func.is_feasible({"Ts": 0.8125, "Th": 0.4375, "R": 42.0984, "L": 176.6366}) 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.