Constraints that do not work together

Hello,

I wrote a model about Julia which contains 3 constraints. If I test one constraint at a time, each one works. But if I run the whole program, I get the following error message:

Has anyone had this problem before and would know where it could be coming from?

Thanks in advance for your help!

Hey @Zizilabg, do you mind sharing your code?
It would definitely help to know which packages you use besides MathOptInterface

1 Like
using XLSX
using JuMP
using Cbc
using DataFrames

# change working directory to the one containing this file
cd(@__DIR__)


fichierDonnees=XLSX.readxlsx("choix élèves julia.xlsx")

ws=fichierDonnees["ELEVES"] # sélection de la feuille du fichier Excel (ws pour "Worksheet")

n=2
while !ismissing(ws[n,2]) # ismissing retourne true si la cellule est vide
    global e=ws[n,1]
    global n=n+1
end

ws2=fichierDonnees["SUJETS"]


l=2
while !ismissing(ws2[l,1]) # ismissing retourne true si la cellule est vide
    global s=ws2[l,1]
    global l=l+1
end


q = [0, 5, 20, 100, 1000]

p=zeros(e,s)
for i in 1:e, j in 1:s
   if j==ws[i+1,4]
        p[i,j]=q[1]
    elseif j==ws[i+1,6]
        p[i,j]= q[2]
    elseif j==ws[i+1,8]
        p[i,j]=q[3]
    elseif j==ws[i+1,10]
        p[i,j]= q[4]
    else
       p[i,j]= q[5]
    end
end

TB=Model(optimizer_with_attributes(Cbc.Optimizer))


@variable(TB,x[1:e, 1:s],Bin)

@objective(TB, Min,sum(sum(x[i,j]*p[i,j] for j in 1:s) for i in 1:e))

@constraint(TB, contraintebase[i=1:e], sum(x[i,j] for j in 1:s ) == 1)


@variable(TB, y1, Bin)
@variable(TB, y2, Bin)
@constraint(TB, contrainte1a, y1+y2 == 1)
@constraint(TB, contrainte1b[j=1:s], sum(x[i,j] for i in 1:e ) >= 3*y1)
@constraint(TB, contrainte1c[j=1:s], sum(x[i,j] for i in 1:e ) <= 1000*(1-y2))



#contrainte 2
for j in 1:s
    if ws2[j+1, 3] == 1
        @constraint(TB, sum(x[i, j] for i in 1:e) <= 8)
    else
        @constraint(TB, sum(x[i, j] for i in 1:e) <= 12)
    end
end



#contrainte 3
for i in 1:e, j in 1:s
    if (ws[i+1,3]==1)
    @constraint(TB, x[i,j]==1)
    end
end



JuMP.optimize!(TB)

println("Attribution des séminaires:")
println()


    for  i in 1:e, j in 1:s
        if JuMP.value.(x[i,j])==1
            println(ws[i+1,2]," est attribué à ",ws2[j+1,2])
        end
    end


println("Pénalités totales: ", objective_value(TB))

You need to check if the solver found a solution:
https://jump.dev/JuMP.jl/stable/manual/solutions/#Recommended-workflow

Your model might be infeasible.

Thank you for your answer.

I wrote this:

if termination_status(TB) == OPTIMAL
    println("Solution is optimal")
elseif termination_status(TB) == TIME_LIMIT && has_values(model)
    println("Solution is suboptimal due to a time limit, but a primal solution is available")
else
    error("The model was not solved correctly.")
end
println("  objective value = ", objective_value(TB))
if primal_status(TB) == FEASIBLE_POINT
    println("  primal solution: x = ", value(x))
end
if dual_status(TB) == FEASIBLE_POINT
    println("  dual solution: c1 = ", dual(c1))
end

But got this error message:

LoadError: The model was not solved correctly.

Yes, because your model doesn’t have a feasible solution. Read the debugging guide I posted in your other question: Result index of attribute - #2 by odow

1 Like