Release notes

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Version 0.15.4 (October 11, 2026)

Added

  • Models that contain parameters but no decision variables are now solved by Optimizer itself instead of being sent to the inner optimizer, which usually rejects them. The new SolveWithoutVariables and NoVariablesFeasibilityTolerance attributes control this behavior (#241)

Other

  • Tighter SCS tolerances and exact expected values in tests (#243)

Version 0.15.3 (May 27, 2026)

Fixed

  • The bridging cost of quadratic constraints is transformed along with the constraints, which are converted to affine ones (#240)

Version 0.15.2 (March 15, 2026)

Fixed

  • MOI.VectorQuadraticFunction with no parameters properly handled (#231)
  • Fix ListOfParametricConstraintTypesPresent and compute_conflict! for VectorQuadraticFunctions (#235)
  • Fixes in cubic function handling and constraint interpretation (#234)

Other

  • More efficient cubic functions (#233)
  • More efficient VectorQuadraticFunctions (#235)
  • More homogeneous internal code (#232)
  • Add docs to internal functions (#236)
  • More unit tests (#237)

Version 0.15.1 (March 2, 2026)

Added

  • Uniformly expose terms getters (#229)

Fixed

  • Fix getter of MOI.VectorAffineFunction (#228)

Other

  • Code cleanup and minor performance improvements (#226) (#227) (#228)

Version 0.15.0 (February 24, 2026)

This breaking release removes a number of ParametricOptInterface-specific features in favor of the officially supported MathOptInterface functions for dealing with parameters.

Breaking

  • Removed QuadraticObjectiveCoef (#213), (#224), (#225)

    This breaking change removed QuadraticObjectiveCoef and all related functions.

    To represent a parameter multiplied by a quadratic term, you must now use MOI.ScalarNonlinearFunction to define a cubic polynomial:

    using JuMP, HiGHS
    import ParametricOptInterface as POI
    model = Model(() -> POI.Optimizer(HiGHS.Ootimizer))
    @variable(model, x)
    @variable(model, p in Parameter(1))
    @objective(model, Min, p * x^2)
  • Removed ParameterValue and ParameterDual (#219)

    This breaking change removed ParameterValue and ParameterDual and all related functions.

    In JuMP, follow these replacements:

    using JuMP
    model = Model()
    @variable(model, x)
    @variable(model, p in Parameter(1))
    # Replace MOI.get(model, POI.ParameterValue(), p) with
    p_value = parameter_value(p)
    # Replace MOI.set(model, POI.ParameterValue(), p, 2.0) with
    set_parameter_value(p, 2.0)
    # Replace MOI.get(model, POI.ParameterDual(), p) with
    p_dual = dual(ParameterRef(p))

    In MathOptInterface, follow these replacements:

    import MathOptInterface as MOI
    model = MOI.Utilities.Model{Float64}()
    p, cp in MOI.add_constrained_variable(model, MOI.Parameter(1.0))
    # Replace MOI.get(model, POI.ParameterValue(), p) with
    p_value = MOI.get(model, MOI.ConstraintSet(), cp).value
    # Replace MOI.set(model, POI.ParameterValue(), p, 2.0) with
    MOI.set(model, MOI.ConstraintSet(), cp, MOI.Parameter(2.0))
    # Replace MOI.get(model, POI.ParameterDual(), p) with
    p_dual = MOI.get(model, MOI.ConstraintDual(), cp)

Other

  • Various changes to improve code style (#214)
  • Make all of the test optimizers silent (#215)
  • Update tests for SCS.jl@2 (#216)
  • Make the explanation a separate page (#217)
  • Increase coverage (#218)
  • Run the benchmarks in CI to ensure they stay updated (#220)
  • Added this changelog (#221)
  • Added a cleanup action (#222)