I’m writing all constrained with a given name, as follows:
@constraint(m, constraint[j in 1:20], sum(A[j,i]*x[i] for i in 1:30) <= b[j])
after runing the model, it returns Infeasibility row 'c11': 0 = 1.
how can I find that row c11 is correnspond to which constraint? None of the name that I used for my constraint are in the format of c followd by number like c11
julia> using JuMP, CPLEX
julia> model = Model(CPLEX.Optimizer);
julia> set_optimizer_attribute(model, CPLEX.PassNames(), true)
julia> @constraint(model, my_constraint, 0 == 1)
my_constraint : 0 = 1.0
julia> optimize!(model)
CPLEX Error 3003: Not a mixed-integer problem.
Version identifier: 12.10.0.0 | 2019-11-26 | 843d4de
Infeasibility row 'my_constraint': 0 = 1.
Presolve time = 0.00 sec. (0.00 ticks)
See the documentation in the CPLEX.Optimizer object:
help?> CPLEX.Optimizer
Optimizer(env::Union{Nothing, Env} = nothing)
Create a new Optimizer object.
You can share CPLEX Envs between models by passing an instance of Env as the first argument.
Set optimizer attributes using MOI.RawOptimizerAttribute or JuMP.set_optimizer_atttribute.
Example
=========
using JuMP, CPLEX
const env = CPLEX.Env()
model = JuMP.Model(() -> CPLEX.Optimizer(env)
set_optimizer_attribute(model, "CPXPARAM_ScreenOutput", 0)
CPLEX.PassNames
=================
By default, variable and constraint names are stored in the MOI wrapper, but are not passed to
the inner CPLEX model object because doing so can lead to a large performance degradation. The
downside of not passing names is that various log messages from CPLEX will report names like
constraint "R1" and variable "C2" instead of their actual names. You can change this behavior
using CPLEX.PassNames to force CPLEX.jl to pass variable and constraint names to the inner CPLEX
model object:
using JuMP, CPLEX
model = JuMP.Model(CPLEX.Optimizer)
set_optimizer_attribute(model, CPLEX.PassNames(), true)