Hello,
Here is my code:
using XLSX
using JuMP
using Gurobi
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")
println("Eleves prioritaire")
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"]
println()
println(ws.name)
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(Gurobi.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]," attribué à ",ws2[j+1,2])
end
end
println("Pénalités totales: ", objective_value(TB))
It’s about assigning students to courses, based on their preferences. The data comes from an excel document.
Could someone tell me how I could display, for each student, the course assigned to them, in an excel document?
Thanks in advance for your help.