-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
can Coluna decompose a general large scale MILP model? #539
Comments
Hi, Yes Coluna can decompose a large MILP model as long as you provide an axis to decompose it. This is the line : @axis(M, 1:nb_machines) in the documentation. In a very near future, BlockDecomposition will provide automatic decomposition (atoptima/BlockDecomposition.jl#31). What do you mean by a more general MILP model ? |
Thank you for your prompt reply. For example, my MILP model has some integer and continuous variables, So as you said, can I decompose any of my integer varaible sets simultaneously? I find |
And one more problem of the expression of Coluna.
if I use
is it equal to?
|
It means that in the optimal solution, all the variables of a subproblem may equal 0 (as if the subproblem block disappears). If you are not sure you leave with default value (lower_multiplicity = 1 & upper_multiplicity = 1)
Yes you can just define
Both won't work because you declare anonymous constraints (without name and indices). These constraints will go to the master. new_gen_set = []
for i in gen_set1 # always use axis to perform decomposition
if i in gen_set2
push!(new_gen_set, i)
end
end
@constraint(model, constraint1[i in new_gen_set, t in 1:NT], uon[i,t] + uoff[i,t]<=1)
@constraint(model, constraint2[i in new_gen_set, t in 1:NT], ug[i,t] >= uon[i,t]) I'll add this information in the documentation :
Moreover, you can check to what subproblem a variable or a constraint belongs with method |
If I run |
Hi, Sorry, I forgot to tell you that you can check the annotations only after the call to You have to declare the model as a BlockModel : using JuMP, BlockDecomposition
model = BlockModel() then you have to call try
JuMP.optimize!(model)
catch e
println("ok")
end then, you can check the annotations : julia> BlockDecomposition.annotation(model, constraint1[2,1])
Annotation(BlockDecomposition.DwPricingSp, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 4)
julia> BlockDecomposition.annotation(model, ug[1,1])
Annotation(BlockDecomposition.DwPricingSp, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 3) And you can see that the constraints and variables are in pricing problems. Edit: you can print the julia> decomposition
Root - Annotation(BlockDecomposition.Master, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 2) with 5 subproblems :
5 => Annotation(BlockDecomposition.DwPricingSp, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 7)
4 => Annotation(BlockDecomposition.DwPricingSp, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 6)
2 => Annotation(BlockDecomposition.DwPricingSp, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 4)
3 => Annotation(BlockDecomposition.DwPricingSp, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 5)
1 => Annotation(BlockDecomposition.DwPricingSp, BlockDecomposition.DantzigWolfe, lm = 1.0, um = 1.0, id = 3) |
Many thanks again for this reply.
If I want to assign a variable to the specified block ,e.g. 1
But I think it looks a little complex. |
In the meantime, you can do |
Hello,
I find the Coluna document gives a decomposable model of the Generalized Assignment,which the machine set can be seen as a partitionable set. If I have a more general MILP model(large scale), which consists of the integer and continuous variables, can I use Coluna with branch and price decomposition algorithm? A given example would be better.
Thanks in advance!
The text was updated successfully, but these errors were encountered: