using JuMP
using GLPK
# Données du problème
poids_max = 15
poids_articles = [12, 4, 2, 2]
profits_articles = [14, 10, 3, 5]
nb_max_articles = 3
cout_elasticite = 0.7
volume_max = 5
volume_articles = [1, 1, 1, 1]
cout_elasticite_volume = 2.3
# Définition du modèle
model = Model([Link])
@variable(model, 0 <= x[1:length(poids_articles)] <= nb_max_articles) # Variable
continue pour la relaxation linéaire
@variable(model, z >= 0, Int) # Variable pour le dépassement de poids
@variable(model, t >= 0) # Variable pour le dépassement de volume
@variable(model, w[1:length(poids_articles)] >= 0) # Variables auxiliaires pour
linéariser les contraintes non linéaires
# Contrainte de poids maximal avec coût élastique
@constraint(model, sum(poids_articles[i] * x[i] for i in 1:length(poids_articles))
+ z <= poids_max)
# Contrainte de volume maximal avec coût élastique de volume
@constraint(model, sum(volume_articles[i] * x[i] for i in
1:length(volume_articles)) + t <= volume_max)
# Linéarisation de la contrainte non linéaire |z - t| <= 1
@constraint(model, z - t <= 1)
@constraint(model, t - z <= 1)
# Fonction objective à maximiser avec coûts élastiques
@objective(model, Max, sum(profits_articles[i] * x[i] for i in
1:length(profits_articles)) -
cout_elasticite * z - cout_elasticite_volume * t)
# Résolution du modèle
optimize!(model)
# Affichage des résultats
println("Nouvelle valeur optimale obtenue avec élasticité : ",
objective_value(model))
println("Quantités optimales d'articles : ", value.(x))
println("Dépassement de poids : ", value(z))
println("Dépassement de volume : ", value(t))