Skip to main content
Glama
highs_models.py7.52 kB
from enum import Enum from pydantic import BaseModel, Field class HiGHSSense(str, Enum): """Optimization sense for HiGHs problems.""" MINIMIZE = "minimize" MAXIMIZE = "maximize" class HiGHSVariableType(str, Enum): """Variable types in HiGHs.""" CONTINUOUS = "cont" INTEGER = "int" BINARY = "bin" class HiGHSConstraintSense(str, Enum): """Constraint directions in HiGHs.""" LESS_EQUAL = "<=" GREATER_EQUAL = ">=" EQUAL = "=" class HiGHSPresolve(str, Enum): """Presolve options for HiGHs.""" OFF = "off" CHOOSE = "choose" ON = "on" class HiGHSSolver(str, Enum): """Solver options for HiGHs.""" SIMPLEX = "simplex" CHOOSE = "choose" IPM = "ipm" PDLP = "pdlp" class HiGHSParallel(str, Enum): """Parallel options for HiGHs.""" OFF = "off" CHOOSE = "choose" ON = "on" class HiGHSStatus(str, Enum): """Solver status values for HiGHs.""" OPTIMAL = "optimal" INFEASIBLE = "infeasible" UNBOUNDED = "unbounded" TIME_LIMIT = "time_limit" ITERATION_LIMIT = "iteration_limit" ERROR = "error" UNKNOWN = "unknown" class HiGHSObjective(BaseModel): """Objective function specification for HiGHs.""" linear: list[float] = Field(..., description="Coefficients for each variable") class HiGHSVariable(BaseModel): """Variable specification for HiGHs.""" name: str | None = Field( None, description="Variable name (optional, defaults to x1, x2, etc.)" ) lb: float | None = Field(None, description="Lower bound (optional, defaults to 0)") ub: float | None = Field( None, description="Upper bound (optional, defaults to +∞, except binary gets 1)" ) type: HiGHSVariableType | None = Field( None, description="Variable type (optional, defaults to 'cont')" ) class HiGHSSparseMatrix(BaseModel): """Sparse matrix representation for constraints.""" rows: list[int] = Field( ..., description="Row indices of non-zero coefficients (0-indexed)" ) cols: list[int] = Field( ..., description="Column indices of non-zero coefficients (0-indexed)" ) values: list[float] = Field(..., description="Non-zero coefficient values") shape: tuple[int, int] = Field(..., description="[num_constraints, num_variables]") class HiGHSConstraints(BaseModel): """Constraint specification for HiGHs.""" # Dense format (for small problems) dense: list[list[float]] | None = Field( None, description="2D array where each row is a constraint" ) # OR Sparse format (for large problems with many zeros) sparse: HiGHSSparseMatrix | None = Field( None, description="Sparse matrix representation" ) sense: list[HiGHSConstraintSense] = Field(..., description="Constraint directions") rhs: list[float] = Field(..., description="Right-hand side values") class HiGHSOptions(BaseModel): """Options for HiGHs solver.""" # Solver Control time_limit: float | None = Field(None, description="Time limit in seconds") presolve: HiGHSPresolve | None = Field(None, description="Presolve option") solver: HiGHSSolver | None = Field(None, description="Solver algorithm") parallel: HiGHSParallel | None = Field(None, description="Parallel option") threads: int | None = Field(None, description="Number of threads (0=automatic)") random_seed: int | None = Field(None, description="Random seed for reproducibility") # Tolerances primal_feasibility_tolerance: float | None = Field( None, description="Default: 1e-7" ) dual_feasibility_tolerance: float | None = Field(None, description="Default: 1e-7") ipm_optimality_tolerance: float | None = Field(None, description="Default: 1e-8") infinite_cost: float | None = Field(None, description="Default: 1e20") infinite_bound: float | None = Field(None, description="Default: 1e20") # Simplex Options simplex_strategy: int | None = Field(None, description="0-4: algorithm strategy") simplex_scale_strategy: int | None = Field( None, description="0-5: scaling strategy" ) simplex_dual_edge_weight_strategy: int | None = Field( None, description="-1 to 2: pricing" ) simplex_iteration_limit: int | None = Field(None, description="Max iterations") # MIP Options mip_detect_symmetry: bool | None = Field(None, description="Detect symmetry") mip_max_nodes: int | None = Field(None, description="Max branch-and-bound nodes") mip_rel_gap: float | None = Field(None, description="Relative gap tolerance") mip_abs_gap: float | None = Field(None, description="Absolute gap tolerance") mip_feasibility_tolerance: float | None = Field( None, description="MIP feasibility tolerance" ) # Logging output_flag: bool | None = Field(None, description="Enable solver output") log_to_console: bool | None = Field(None, description="Console logging") highs_debug_level: int | None = Field(None, description="0-4: debug verbosity") # Algorithm-specific ipm_iteration_limit: int | None = Field(None, description="IPM max iterations") pdlp_scaling: bool | None = Field(None, description="PDLP scaling") pdlp_iteration_limit: int | None = Field(None, description="PDLP max iterations") # File I/O write_solution_to_file: bool | None = Field( None, description="Write solution to file" ) solution_file: str | None = Field(None, description="Solution file path") write_solution_style: int | None = Field(None, description="Solution format style") class HiGHSProblemSpec(BaseModel): """Problem specification for HiGHs.""" sense: HiGHSSense = Field(..., description="Optimization sense") objective: HiGHSObjective = Field(..., description="Objective function") variables: list[HiGHSVariable] = Field(..., description="Variable specifications") constraints: HiGHSConstraints = Field(..., description="Constraint specifications") class HiGHSProblem(BaseModel): """Complete HiGHS optimization problem.""" problem: HiGHSProblemSpec = Field(..., description="Problem specification") options: HiGHSOptions | None = Field(None, description="Solver options") class HiGHSOutput(BaseModel): """Standard output schema for HiGHs solver results.""" status: HiGHSStatus = Field(..., description="Solver status") objective_value: float = Field(..., description="Optimal objective value") solution: list[float] = Field(..., description="Solution values for each variable") dual_solution: list[float] = Field(..., description="Dual values for constraints") variable_duals: list[float] = Field(..., description="Reduced costs for variables") class HiGHSSolution(BaseModel): """Solution to a HiGHs problem.""" values: dict[str, float] = Field(..., description="Variable values") objective_value: float | None = Field(None, description="Optimal objective value") status: HiGHSStatus = Field(..., description="Solver status") is_optimal: bool = Field(..., description="Whether solution is optimal") solve_time: float | None = Field(None, description="Solve time in seconds") iterations: int | None = Field(None, description="Number of iterations") dual_values: list[float] | None = Field( None, description="Dual values for constraints" ) reduced_costs: list[float] | None = Field( None, description="Reduced costs for variables" )

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sdiehl/usolver'

If you have feedback or need assistance with the MCP directory API, please join our Discord server