Does Coluna supports sos2 with gurobi, is there a way to implement its

                            coluna = optimizer_with_attributes(
                                Coluna.Optimizer,
                                "params" => Coluna.Params(
                                    solver = Coluna.Algorithm.TreeSearchAlgorithm() # default branch-cut-and-price
                                ),
                                "default_optimizer" =>  () -> Gurobi.Optimizer(env)
                                # "default_optimizer" => HiGHS.Optimizer # GLPK for the master & the subproblems
                            );
                            local mod3 = BlockModel(coluna)
                            println("===========================test================================================")
                            try
                                		
                                columns = [
                                    (cover = [1, 0, 1], load = 1.2),
                                    (cover = [0, 1, 1], load = 2.5),
                                    (cover = [1, 1, 0], load = 0.5),
                                ]  # each is a "schedule" with a certain load
                                @axis(pschedule_axis, 1:length(columns))
                                cost_breakpoints = [0.0, 1.0, 2.0, 3.0]  # x axis
                                cost_values = [0.0, 0.8, 1.2, 2.0]       # y axis

                                n_bp = length(cost_breakpoints)
                                    
                                # model = BlockModel(coluna)
                                # # λ interpolation weights for each column's load
                                # @variable(mod3, λ[1:length(columns), 1:n_bp] >= 0)
                                # @constraint(mod3,λ in SOS2())
                                # # @constraint(mod3, λsfbm_corrections in SOS2(),base_name = "λsfbm_corrections in sos2 ,$pc, $frameno")
                                # #@variable(model, z[1:length(columns), 1:n_bp - 1], Bin)  # SOS2-style selector
                                # @variable(mod3, select[1:length(columns)] >= 0)  # weight of each column

                                # # Task coverage constraints
                                # @constraint(mod3, [t = 1:3], sum(select[j] * columns[j].cover[t] for j in 1:length(columns)) == 1)

                                # # Each column's cost interpolated via SOS2-style convex combination
                                # @variable(mod3, cost[1:length(columns)])

                                # @constraint(mod3,sos[1:length(columns)],sum(λ[j, i] for i in 1:n_bp) == select[j]) 
                                # @constraint(mod3,sos_2[j in 1:length(columns)],cost[j] == sum(cost_values[i] * λ[j, i] for i in 1:n_bp))

                                # λ interpolation weights for each column's load
                                @variable(mod3, λ[1:length(columns), 1:n_bp],upper_bound=1,lower_bound=0)
                                @constraint(mod3,sos_sum[i in 1:length(columns)],sum(λ[i,j] for j in 1:n_bp)==1)
                             
                                println("999999")
                              #  @constraint(mod3,λ[:,:] in SOS2())
                                #for i in 1:length(columns)
    @constraint(mod3,constr123[i in 1:length(columns)], λ[i, :] in SOS2())
#end
                                println("99pppppppp")
                                # @variable(mod3, z[1:length(columns), 1:n_bp - 1], Bin)  # SOS2-style selector
                                @variable(mod3, select[1:length(columns)] >= 0)  # weight of each column
                                println("manoj45678")
                                # Task coverage constraints
                                @constraint(mod3, con1[t = 1:3], sum(select[j] * columns[j].cover[t] for j in 1:length(columns)) == 1)

                                # Each column's cost interpolated via SOS2-style convex combination
                                @variable(mod3, cost[1:length(columns)])



                                @constraint(mod3,sos78[j in 1:length(columns)],sum(λ[j, i] for i in 1:n_bp) == 1)
                                @constraint(mod3, sos_2899[j in 1:length(columns)],cost[j] == sum(cost_values[i] * λ[j, i] for i in 1:n_bp))
                                # @constraint(mod3,sos_3[j in 1:length(columns),i in 1:(n_bp - 1)],λ[j, i] <= z[j, i])
                                # @constraint(mod3,sos_4[j in 1:length(columns),i in 1:(n_bp - 1)],λ[j, i + 1] <= z[j, i])
                                # @constraint(mod3,sos_5[j in 1:length(columns)],sum(z[j, :]) <= 1)

                                @dantzig_wolfe_decomposition(mod3, decomposition, pschedule_axis)
                                
                                @objective(mod3, Min, sum(cost[j] for j in 1:length(columns)))

                                optimize!(mod3),


999999
99pppppppp
manoj45678
error in bcapm.jl
File: C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl, Line: 197, Function: _check_dec_constr
File: C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl, Line: 114, Function: _check_annotation      
File: C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl, Line: 76, Function: _check_annotations      
File: C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\decomposition.jl, Line: 21, Function: register_decomposition
File: C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\BlockDecomposition.jl, Line: 76, Function: optimize!    
File: C:\Users\manojkumar.ram\.julia\packages\JuMP\RGIK3\src\optimizer_interface.jl, Line: 575, Function: #optimize!#104
File: C:\Users\manojkumar.ram\.julia\packages\JuMP\RGIK3\src\optimizer_interface.jl, Line: 546, Function: optimize!
File: e:\G2_develop_19_05_2025\bcap_optimizer\bcapm_.jl, Line: 451, Function: #453
============================test_end==========================================
File: e:\G2_develop_19_05_2025\bcap_optimizer\bcapm_.jl, Line: 451, Function: #453
============================test_end==========================================

Hi @manoj.centura,

I can’t tell what the problem is from the code you have posted. Do you have a reproducible example? Or the full output of the error?

I see you have posted an issue: sos2 constraint not supported · Issue #105 · atoptima/BlockDecomposition.jl · GitHub

Dear @odow, here the working code and error. Thanks in advance for the help

using Coluna
using Gurobi
using JuMP
xx="solverlink"
env = Gurobi.Env(xx,"svm_compute_dev")
coluna = optimizer_with_attributes(
		Coluna.Optimizer,
		"params" => Coluna.Params(
			solver = Coluna.Algorithm.TreeSearchAlgorithm() 
		),"default_optimizer" =>  () -> Gurobi.Optimizer(env))
 
		
columns = [
    (cover = [1, 0, 1], load = 1.2),
    (cover = [0, 1, 1], load = 2.5),
    (cover = [1, 1, 0], load = 0.5),
]  # each is a "schedule" with a certain load
@axis(pschedule_axis, 1:length(columns))
cost_breakpoints = [0.0, 1.0, 2.0, 3.0]  # x axis
cost_values = [0.0, 0.8, 1.2, 2.0]       # y axis
 
n_bp = length(cost_breakpoints)
mod3 = BlockModel(coluna)
# λ interpolation weights for each column's load
@variable(mod3, λ[1:length(columns), 1:n_bp],upper_bound=1,lower_bound=0)
@constraint(mod3,sos_sum[i in 1:length(columns)],sum(λ[i,j] for j in 1:n_bp)==1)
@constraint(mod3,sos_dif[i in 1:length(columns)],λ[i,:] in SOS2())
# @variable(mod3, z[1:length(columns), 1:n_bp - 1], Bin)  # SOS2-style selector
@variable(mod3, select[1:length(columns)] >= 0)  # weight of each column
 
# Task coverage constraints
@constraint(mod3, con1[t = 1:3], sum(select[j] * columns[j].cover[t] for j in 1:length(columns)) == 1)
 
# Each column's cost interpolated via SOS2-style convex combination
@variable(mod3, cost[1:length(columns)])
 
@constraint(mod3,sos[j in 1:length(columns)],sum(λ[j, i] for i in 1:n_bp) == select[j])
@constraint(mod3, sos_2[j in 1:length(columns)],cost[j] == sum(cost_values[i] * λ[j, i] for i in 1:n_bp))
 
@dantzig_wolfe_decomposition(mod3, decomposition, pschedule_axis)
@objective(mod3, Min, sum(cost[j] for j in 1:length(columns)))
 
optimize!(mod3)

show(err)
 
# Show results
for j in 1:length(columns)
    println("Column $j selected: ", value(select[j]), ", Cost = ", value(cost[j]))
end

error trail is 
julia> optimize!(mod3)
ERROR: MethodError: no method matching _check_dec_constr(::Model, ::VariableRef, ::ConstraintRef{…}, ::BlockDecomposition.Annotation{…})

Closest candidates are:
  _check_dec_constr(::Model, ::Vector{A}, ::ConstraintRef, ::Any) where A<:AbstractJuMPScalar
   @ BlockDecomposition C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl:195
  _check_dec_constr(::Model, ::AffExpr, ::ConstraintRef, ::Any)
   @ BlockDecomposition C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl:187

Stacktrace:
 [1] _check_dec_constr
   @ C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl:197 [inlined]
 [2] _check_annotation
   @ C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl:114 [inlined]
 [3] _check_annotations(model::Model, container::Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{…}, VectorShape}})
   @ BlockDecomposition C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\checker.jl:76
 [4] register_decomposition(model::Model)
   @ BlockDecomposition C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\decomposition.jl:21
 [5] optimize!(m::Model)
   @ BlockDecomposition C:\Users\manojkumar.ram\.julia\packages\BlockDecomposition\xVj1Y\src\BlockDecomposition.jl:76
 [6] optimize!(model::Model; ignore_optimize_hook::Bool, _differentiation_backend::MathOptInterface.Nonlinear.SparseReverseMode, kwargs::@Kwargs{})
   @ JuMP C:\Users\manojkumar.ram\.julia\packages\JuMP\RGIK3\src\optimizer_interface.jl:575
 [7] optimize!(model::Model)
   @ JuMP C:\Users\manojkumar.ram\.julia\packages\JuMP\RGIK3\src\optimizer_interface.jl:546
 [8] top-level scope
   @ REPL[187]:1
Some type information was truncated. Use `show(err)` to see complete types.

This seems like a bug in BlockDecomposition.jl, but it probably means that SOS2 constraints are not tested or expected to work.

I’ve updated your issue with a reproducible example: