Skip to content
Open
6 changes: 6 additions & 0 deletions src/OCTHaGOn.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
include("check_solvers.jl")
module OCTHaGOn
using Combinatorics
using CPLEX
Expand All @@ -21,6 +22,11 @@ module OCTHaGOn
const SOLVER = CPLEX.Optimizer
const SOLVER_SILENT = with_optimizer(SOLVER, CPX_PARAM_SCRIND = 0)

# function silenced_solver(solver::MOI.AbstractOptimizer)
# return with_optimizer(solver, CPX_PARAM_SCRIND = 0)
# end
# const SOLVER_SILENT = silenced_solver(SOLVER)

const PROJECT_ROOT = dirname(dirname(@__FILE__))
const DATA_DIR = PROJECT_ROOT * "\\data\\"
const BARON_DIR = PROJECT_ROOT * "\\data\\baron\\"
Expand Down
22 changes: 22 additions & 0 deletions src/check_solvers.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
valid_optimizers = [:Cbc, :CPLEX, :Gurobi, :GLPK, :Mosek, :SCIP]
if !haskey(ENV, "OCTHaGOn_SOLVER")
loadedModules(m::Module = Main) = filter(x -> eval(x) isa Module && x ≠ Symbol(m), names(m, imported = true))
pkgs = loadedModules()

optims = intersect(pkgs, valid_optimizers)

if isempty(optims)
throw(ErrorException("OCTHaGOn found no valid mixed-integer optimizers. " *
"Please choose an optimizer among $(valid_optimizers), and call `Pkg.add(*); using *` " *
"before calling OCTHaGOn."))
elseif length(optims) == 1
ENV["OCTHaGOn_SOLVER"] = String(optims[1])
@info "OCTHaGOn is using " * ENV["OCTHaGOn_SOLVER"] * " as its mixed-integer optimizer."
elseif :CPLEX in optims
ENV["OCTHaGOn_SOLVER"] = "CPLEX"
@info "OCTHaGOn found multiple mixed-integer optimizers. Using CPLEX by default. "
else
ENV["OCTHaGOn_SOLVER"] = String(optims[1])
@info "OCTHaGOn found multiple mixed-integer optimizers. Using " * ENV["OCTHaGOn_SOLVER"] * ", the first available."
end
end
2 changes: 1 addition & 1 deletion src/constraintify.jl
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ Creates a set of MIO constraints from a OptimalTreeClassifier that thresholds a
Arguments:
- m: JuMP.Model
- x:: independent JuMP.Variables (features of learner)
- y:: dependent JuMP.Variables
- y:: dependent JuMP.Variable
- lnr:: A fitted OptimalTreeLearner
- ul_data:: Upper and lower bounding hyperplanes for data in leaves of lnr (empty by default)
- symbs:: The varkeys corresponding to the lnr.
Expand Down