PATHSolver.jl was completely re-written between v0.6 and v1.0. It now uses PATH v5.0 binaries, and integrates directly into JuMP.
To revert to the old API, use:
import Pkg
Pkg.add(Pkg.PackageSpec(name = "PATHSolver", version = v"0.6.2"))
Then restart Julia for the change to take effect. The old documentation and source code is available on the path-solver-v0 branch.
PATHSolver.jl
A Julia interface to the PATH solver.
Installation
Install PATHSolver.jl
as follows:
import Pkg; Pkg.add("PATHSolver")
By default, PATHSolver.jl
will download a copy of the underlying PATH solver.
To use a different version of PATH, see the Manual Installation section below.
License
Without a license, the PATH Solver can solve problem instances up to with up to 300 variables and 2000 non-zeros. For larger problems, this web page provides a temporary license that is valid for a year.
You can either store the license in the PATH_LICENSE_STRING
environment
variable, or you can use the PATHSolver.c_api_License_SetString
function
immediately after importing the PATHSolver
package:
using PATHSolver
PATHSolver.c_api_License_SetString("<LICENSE STRING>")
where <LICENSE STRING>
is replaced by the current license string.
Example usage
julia> using JuMP, PATHSolver
julia> M = [
0 0 -1 -1
0 0 1 -2
1 -1 2 -2
1 2 -2 4
]
4×4 Array{Int64,2}:
0 0 -1 -1
0 0 1 -2
1 -1 2 -2
1 2 -2 4
julia> q = [2, 2, -2, -6]
4-element Array{Int64,1}:
2
2
-2
-6
julia> model = Model(PATHSolver.Optimizer)
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: EMPTY_OPTIMIZER
Solver name: Path 5.0.00
julia> set_optimizer_attribute(model, "output", "no")
julia> @variable(model, x[1:4] >= 0)
4-element Array{VariableRef,1}:
x[1]
x[2]
x[3]
x[4]
julia> @constraint(model, M * x .+ q ⟂ x)
[-x[3] - x[4] + 2, x[3] - 2 x[4] + 2, x[1] - x[2] + 2 x[3] - 2 x[4] - 2, x[1] + 2 x[2] - 2 x[3] + 4 x[4] - 6, x[1], x[2], x[3], x[4]] ∈ MOI.Complements(4)
julia> optimize!(model)
Reading options file /var/folders/bg/dzq_hhvx1dxgy6gb5510pxj80000gn/T/tmpiSsCRO
Read of options file complete.
Path 5.0.00 (Mon Aug 19 10:57:18 2019)
Written by Todd Munson, Steven Dirkse, Youngdae Kim, and Michael Ferris
julia> value.(x)
4-element Array{Float64,1}:
2.8
0.0
0.7999999999999998
1.2
julia> termination_status(model)
LOCALLY_SOLVED::TerminationStatusCode = 4
Factorization methods
By default, PATHSolver.jl
will download the LUSOL
shared library. To use LUSOL, set the following options:
model = Model(PATHSolver.Optimizer)
set_optimizer_attribute(model, "factorization_method", "blu_lusol")
set_optimizer_attribute(model, "factorization_library_name", PATHSolver.LUSOL_LIBRARY_PATH)
To use factorization_method umfpack
you will need the umfpack shared lib that
is available directly from the developers of that code for academic use.
Manual installation
By default PATHSolver.jl
will download a copy of the libpath
library. If you
already have one installed and want to use that, set the PATH_JL_LOCATION
environment variable to point to the libpath50.xx
library, then run
Pkg.build("PATHSolver")
.