Closed YP-Ye closed 4 years ago
I think you have to add the following method in the file src/Algorithm/solveipform.jl
function run!(alg::SolveIpForm, reform::Reformulation, input::NewOptimizationInput)
master = getmaster(reform)
ipforminput = SolveIpFormInput(ObjValues(master))
return run!(alg, master, ipforminput)
end
There is no bug in the tests because of the redefinition of the run! method... Would you like to PR this ?
I think you have to add the following method in the file
src/Algorithm/solveipform.jl
function run!(alg::SolveIpForm, reform::Reformulation, input::NewOptimizationInput) master = getmaster(reform) ipforminput = SolveIpFormInput(ObjValues(master)) return run!(alg, master, ipforminput) end
There is no bug in the tests because of the redefinition of the run! method... Would you like to PR this ?
Thank you! However, a new problem happens after adding the run! method:
MethodError: no method matching add_lp_dual_sol!(::Coluna.Algorithm.OptimizationState{Coluna.MathProg.Formulation{Coluna.MathProg.DwMaster},Coluna.MathProg.MinSense}, ::Nothing)
Closest candidates are:
add_lp_dual_sol!(::Coluna.Algorithm.OptimizationState{F,S}, !Matched::Coluna.Containers.Solution{F,Coluna.MathProg.Id{Coluna.MathProg.Constraint},Float64}) where {F, S} at C:\Users\Administrator\.juliapro\JuliaPro_v1.2.0-1\packages\Coluna\YZZg2\src\Algorithm\utilities\optimizationstate.jl:240
run!(::Coluna.Algorithm.SolveLpForm, ::Coluna.MathProg.Formulation{Coluna.MathProg.DwMaster}, ::Coluna.Algorithm.SolveLpFormInput) at solvelpform.jl:41
macro expansion at colgen.jl:321 [inlined]
macro expansion at util.jl:213 [inlined]
cg_main_loop!(::Coluna.Algorithm.ColumnGeneration, ::Coluna.Algorithm.ColGenRuntimeData, ::Coluna.MathProg.Reformulation) at colgen.jl:320
run!(::Coluna.Algorithm.ColumnGeneration, ::Coluna.MathProg.Reformulation, ::Coluna.Algorithm.NewOptimizationInput{Coluna.MathProg.Formulation{Coluna.MathProg.DwMaster},Coluna.MathProg.MinSense}) at colgen.jl:29
run!(::Coluna.Algorithm.ColGenConquer, ::Coluna.MathProg.Reformulation, ::Coluna.Algorithm.ConquerInput) at conquer.jl:148
apply_conquer_alg_to_node!(::Coluna.Algorithm.Node, ::Coluna.Algorithm.ColGenConquer, ::Coluna.MathProg.Reformulation, ::Coluna.Algorithm.OptimizationState{Coluna.MathProg.Formulation{Coluna.MathProg.DwMaster},Coluna.MathProg.MinSense}) at node.jl:180
prepare_and_run_conquer_algorithm!(::Coluna.Algorithm.TreeSearchRuntimeData, ::Coluna.Algorithm.ColGenConquer, ::Coluna.MathProg.Reformulation, ::Coluna.Algorithm.Node, ::Bool) at treesearch.jl:148
run!(::Coluna.Algorithm.TreeSearchAlgorithm, ::Coluna.MathProg.Reformulation, ::Coluna.Algorithm.NewOptimizationInput{Coluna.MathProg.Formulation{Coluna.MathProg.DwMaster},Coluna.MathProg.MinSense}) at treesearch.jl:236
optimize!(::Coluna.MathProg.Reformulation, ::Coluna.Algorithm.TreeSearchAlgorithm, ::Coluna.Containers.Bound{Coluna.MathProg.Primal,Coluna.MathProg.MinSense}, ::Coluna.Containers.Bound{Coluna.MathProg.Dual,Coluna.MathProg.MinSense}) at optimize.jl:99
macro expansion at optimize.jl:64 [inlined]
macro expansion at TimerOutput.jl:214 [inlined]
optimize!(::Coluna.MathProg.Problem, ::Coluna.MathProg.Annotations, ::Coluna.Params) at optimize.jl:63
optimize!(::Coluna.Optimizer) at MOIwrapper.jl:69
optimize!(::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.AbstractOptimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}) at cachingoptimizer.jl:189
#optimize!#97(::Bool, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(optimize!), ::Model, ::Nothing) at optimizer_interface.jl:131
#optimize! at none:0 [inlined]
#optimize! at none:0 [inlined]
optimize!(::Model) at BlockDecomposition.jl:32
#optimize!#97(::Bool, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(optimize!), ::Model, ::Nothing) at optimizer_interface.jl:121
optimize! at optimizer_interface.jl:107 [inlined]
optimize!(::Model) at optimizer_interface.jl:107
top-level scope at cuttingstock2.jl:54
When the LP restricted master is solved, CPLEX finds a solution. The primal solution is retrieved but the dual stays empty. I have to check what's going on...
Moreover, I would recommand to use multiplicity if your subproblems are identical. Example here : https://github.com/atoptima/ColunaDemos.jl/blob/master/src/CuttingStock/model.jl
Unfortunately, we don't have a good way to retrieve the solution for now.
Thank you. I try Coluna with different solvers today, it works well with Gurobi and GLPK. I think it may be a problem of CPLEX.
The last bug was in Cplex.jl. I close the issue. Thank you for the feedback !
It seems to converge to the global optimal solution. However an error appears at last. Here is my code:
It is the output.