Solver Settings¶
Configure solver behavior through the Settings and IPMSettings classes.
Settings Overview¶
import moreau
settings = moreau.Settings(
device='auto', # Device selection
batch_size=1, # Batch size for CompiledSolver
verbose=False, # Print solver progress
max_iter=200, # Maximum IPM iterations
enable_grad=False, # Enable gradient computation
ipm_settings=None, # Fine-grained IPM control
)
Device Settings¶
# Automatic device selection (default)
settings = moreau.Settings(device='auto')
# Force CPU
settings = moreau.Settings(device='cpu')
# Force CUDA GPU
settings = moreau.Settings(device='cuda')
See Device Selection for more details.
Batch Settings¶
For CompiledSolver, specify batch size:
settings = moreau.Settings(batch_size=64)
solver = moreau.CompiledSolver(
n=2, m=3,
P_row_offsets=[0, 1, 2], P_col_indices=[0, 1],
A_row_offsets=[0, 2, 3, 4], A_col_indices=[0, 1, 0, 1],
cones=cones,
settings=settings,
)
Iteration Control¶
settings = moreau.Settings(
max_iter=200, # Maximum iterations (default: 200)
verbose=True, # Print iteration progress
)
Gradient Settings¶
Enable gradients for differentiation through the solver:
# Core API (NumPy)
settings = moreau.Settings(enable_grad=True)
solver = moreau.CompiledSolver(..., settings=settings)
# PyTorch (enable_grad is True by default)
from moreau.torch import Solver
solver = Solver(...) # Gradients enabled automatically
IPM Settings¶
Fine-tune the interior-point method:
ipm_settings = moreau.IPMSettings(
# Convergence tolerances
tol_gap_abs=1e-8, # Absolute duality gap tolerance
tol_gap_rel=1e-8, # Relative duality gap tolerance
tol_feas=1e-8, # Primal/dual feasibility tolerance
tol_infeas_abs=1e-8, # Infeasibility detection tolerance
tol_infeas_rel=1e-8, # Relative infeasibility tolerance
tol_ktratio=1e-6, # KKT ratio tolerance
)
settings = moreau.Settings(ipm_settings=ipm_settings)
Tolerance Guidelines¶
Tolerance |
Effect |
|---|---|
|
Lower = more accurate objective |
|
Lower = stricter constraint satisfaction |
Higher tolerances |
Faster convergence, less accuracy |
Lower tolerances |
More iterations, higher accuracy |
Default tolerances (1e-8) are suitable for most applications.
Common Configurations¶
High Accuracy¶
ipm_settings = moreau.IPMSettings(
tol_gap_abs=1e-10,
tol_gap_rel=1e-10,
tol_feas=1e-10,
)
settings = moreau.Settings(
max_iter=500,
ipm_settings=ipm_settings,
)
Fast/Approximate¶
ipm_settings = moreau.IPMSettings(
tol_gap_abs=1e-6,
tol_gap_rel=1e-6,
tol_feas=1e-6,
)
settings = moreau.Settings(
max_iter=100,
ipm_settings=ipm_settings,
)
GPU Batched¶
settings = moreau.Settings(
device='cuda',
batch_size=1024,
enable_grad=True,
)