Skip to content

Better error message for invalid coefficients #19

@stumarcus314

Description

@stumarcus314

The code below causes an error. For some reason, the way the array dx is constructed causes a problem with:
log_x[i] = piecewiselinear(m,x[i],dx[i],log,method=method)

julia monroe4.jl
Capacity available on '10.60.129.38' - connecting...
Established 256-bit AES encrypted connection
Method: Logarithmic
ERROR: LoadError: Invalid coefficient -Inf on variable λ_1[1]
Stacktrace:
[1] assert_isfinite(::JuMP.GenericAffExpr{Float64,JuMP.Variable}) at /Users/a598124/.julia/v0.6/JuMP/src/affexpr.jl:95
[2] prepConstrMatrix(::JuMP.Model) at /Users/a598124/.julia/v0.6/JuMP/src/solvers.jl:554
[3] #build#119(::Bool, ::Bool, ::JuMP.ProblemTraits, ::Function, ::JuMP.Model) at /Users/a598124/.julia/v0.6/JuMP/src/solvers.jl:358
[4] (::JuMP.#kw##build)(::Array{Any,1}, ::JuMP.#build, ::JuMP.Model) at ./:0
[5] #solve#116(::Bool, ::Bool, ::Bool, ::Array{Any,1}, ::Function, ::JuMP.Model) at /Users/a598124/.julia/v0.6/JuMP/src/solvers.jl:168
[6] macro expansion at /Users/a598124/juliaCode/boxPacking1/monroe4.jl:71 [inlined]
[7] anonymous at ./:?
[8] include_from_node1(::String) at ./loading.jl:576
[9] include(::String) at ./sysimg.jl:14
[10] process_options(::Base.JLOptions) at ./client.jl:305
[11] _start() at ./client.jl:371
while loading /Users/a598124/juliaCode/boxPacking1/monroe4.jl, in expression starting on line 41

using PiecewiseLinearOpt
using JuMP, Cbc, Gurobi, CPLEX

Minimize volume = xyz by minimizing log(xyz) = log(x)+log(y)+log(z) through piecewise univariate linearization of log(x), log(y), and log(z).

#const solver = CbcSolver()
env = Gurobi.Env()
const solver = GurobiSolver(env,Threads=4)
#const solver = CplexSolver();
#methods_1D = (:CC,:MC,:Logarithmic,:LogarithmicIB,:ZigZag,:ZigZagInteger,:SOS2,:GeneralizedCelaya,:SymmetricCelaya,:Incremental,:DisaggLogarithmic)
#methods_1D = (:CC,:MC,:Logarithmic,:ZigZag,:ZigZagInteger,:SOS2,:GeneralizedCelaya,:SymmetricCelaya,:Incremental)
methods_1D = (:Logarithmic,:ZigZag,:ZigZagInteger)
#methods_1D = (:SOS2,:GeneralizedCelaya,:SymmetricCelaya,:Incremental)

dx2 = Array{Array{Float64}}(3)
dx2[1] = linspace(5,2π,8)
dx2[2] = linspace(4,2π,7)
dx2[3] = linspace(3,2π,9)

lb = Array{Float64}(3)
lb[1] = 0
lb[2] = 0
lb[3] = 0
ub = Array{Float64}(3)
ub[1] = 20
ub[2] = 20
ub[3] = 20

num_seg = Array{UInt8}(3)
num_seg[1] = 32
num_seg[2] = 32
num_seg[3] = 32

dx = Array{Array{Float64}}(3)
for i=1:3
dx[i] = linspace(lb[i],ub[i],num_seg[i])
#dx[i] = linspace(lb[i],9,num_seg[i])
#dx[i] = linspace(3,2π,9)
end

for method in methods_1D
println("Method: $method")

n = 4 # number of cartons
m = Model(solver=solver)

@variable(m,x[1:3]) # dimensions of minimum volume box containing all the cartons
setlowerbound(x[1],0)
setupperbound(x[1],20)
setlowerbound(x[2],0)
setupperbound(x[2],20)
setlowerbound(x[3],0)
setupperbound(x[3],20)
#dx = Array{Array{Float64}}(3)
#for i=1:3
  #dx[i] = linspace(getlowerbound(x[i]),getupperbound(x[i]),num_seg[i])
  #dx[i] = linspace(lb[i],ub[i],num_seg[i])
  #dx[i] = linspace(0,2π,9)
#end

@variable(m,X[1:3,1:n]) # coordinates of left-back-bottom corner of each carton
@variable(m,l[1:3,1:3,1:n],Bin) # binary variables encoding the orientation of each carton
@variable(m,a[1:6,i=1:n,(i+1):n],Bin) # binary variables enforcing non-overlapping of pairs of cartons
@variable(m,log_x[1:3]) # piecewise linear approximation of log(x)
for i=1:3
  #log_x[i] = piecewiselinear(m,x[i],dx2[i],log,method=method)
  log_x[i] = piecewiselinear(m,x[i],dx[i],log,method=method)
end

@objective(m,Min,sum(log_x))
solve(m) == :Optimal

println("volume = x*y*z = ",prod(getvalue(x)))
println("[x,y,z] = ",getvalue(x))

end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions