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

tol_gap_abs/rel

Lower = more accurate objective

tol_feas

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,
)