Exercice AMPL, optimisation, horaire lycée
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Exercice AMPL, optimisation, horaire lycée



  1. #1
    invite500b4dc5

    Exercice AMPL, optimisation, horaire lycée


    ------

    Bonjour à tous,

    Je me casse la tête sur un exercice que je dois réussir à modéliser. Malgré tous mes essais, je n'arrive à faire fonctionner le programme (sous GUSEK).

    Pourriez-vous peut-être me donner un coup de main?

    Exercice :

    P10_emploiDuTempsLycee.pdf

    Programme AMPL (personnel)

    Code:
    /* Travail Rercherche OP */
    /* Horaire de Cours */
    /* Ensemble d'objets indices */
    
    set Professeurs := {1..9};
    set Classes := {1..2};
    set Coursjournaliers := {4};
    set Jours := {5};
    set Creneaux := {Coursjournaliers cross Jours};
    
    /*Paramètres*/
    
    param Cours{i in Professeurs, j in Classes} in {1,0}; #cours par jours et par professeurs
    
    
    /* Variables */
    
    var X {i in Professeurs, j in Classes, k in Coursjournaliers} binary; # =1 si le professeur t donne cours à la classe c pendant la période k
    
    /* Fonction objectif */
    
    minimize Trous : sum {p in Professeurs, c in Classes, l in 0..4-1, t in Creneaux} X[p,c,t+1]+ X[p,c,(t+t)];
    
    /* Contraintes */
    
    #planifier tous les cours : 
    s.t. forall{p in Professeurs,c in Classes}:
    sum {l in Coursjournaliers} X[p,c,l] = Cours[t,c];
    
    #seul un cour peut être donné par classe par 2heures
    s.t. forall{p in Professeurs, l in Coursjournaliers}:
    sum {p in Professeurs} X[p,c,l] <= 1;
    
    #Un prof donne un cours à la fois
    s.t. forall{p in Professeurs, l in Coursjournaliers}:
    sum {j in 1..C} X[i,j,k] <=1;
    
    #Une seule fois une matière par jours
    s.t. forall{p in Professeurs, c in Classes, d in 0..Coursjournaliers-1}:
    sum {l in d*Jours+1..(d+1)*Jours) X[p,c,l] <=1;
    
    #Sport le jeudi après midi = creneau 15, dans les deux classes
    s.t. {i = 8,9,j = 1,2,k = 15}:
    X[8,1,15] = 1;
    X[9,2,15];
    
    #Pas de cours en première heure du lundi
    s.t. forall{p in Professeurs, c in Classes}:
    X[p,c,l] = 0;
    
    #Mr Efdehicks absent le lundi matin
    s.t. forall{l in 1..2}: 
    X[4,2,l]=0;
    
    #Pas de cours de Biologie Mercredi
    s.t. forall{c in Classes, l in Jours+1..3*Jours}:
    X[ 2,c,l] = 0;
    
    s.t. forall{p in Professeurs, c in Classes, l in Coursjournaliers} 
    X[p,c,l] in {0,1};
    
    /* Données */
    
    
    
    data;
    
    param Cours : 1 2 :=
    
    1 1 1
    
    2 3 3 
    
    3 2 2
    
    4 0 4
    
    5 4 0
    
    6 3 3 
    
    7 1 1
    
    8 1 0 
    
    9 0 1
    
    end;
    Merci d'avance

    -----

  2. #2
    invite500b4dc5

    Re : Exercice AMPL, optimisation, horaire lycée

    Bon, j'ai envoyé le problème à mon assistant qui m'a répondu avec ceci :

    Tout d'abord, votre modèle n'est pas le modèle de l'énoncé. Je vous conseille
    de vous en tenir aux équations qui vous sont données.
    Ensuite, vous semblez confondre paramètre et indice.
    Enfin, vous définissez les valeurs de vos paramètres (p, c, d, t) dans la
    partie modèle. Cela ne cause pas d'erreurs en soi mais vous devriez les définir
    indépendamment dans la partie data.

    J'ai donc modifié mon fichier comme ceci :

    Code:
    /* Travail Rercherche OP */
    /* Horaire de Cours */
    /* Ensemble d'objets indices */
    
    set Professeurs;
    set Classes;
    set Coursjournaliers;
    set Jours;
    set Creneaux;
    
    /*Paramètres*/
    
    param Cours{i in Professeurs, j in Classes} in {1,0}; #cours par jours et par professeurs
    param NbC{i in Professeurs, j in Classes}; #Nombre de cours que le prof i doit donner à la classe j
    
    
    /* Variables */
    
    var X {i in Professeurs, j in Classes, k in Coursjournaliers} binary; # =1 si le professeur t donne cours à la classe c pendant la période k
    
    /* Fonction objectif */
    
    minimize trous: sum{p in Professeurs, c in Classes, d-1 in Jours} X[i,j,(l*t+1)] + X [i,j,(l*t+t)];
    
    /* Contraintes */
    
    #1 planifier tous les cours : 
    s.t. forall{i in Professeurs,j in Classes}:
    sum {d*t} X[i,j,k] = NbC[i,j];
    
    #2 seul un cour peut être donné par classe par 2heures
    s.t. forall{p in Professeurs, t in Coursjournaliers}:
    sum {p in Professeurs} X[i,j,k] <= 1;
    
    #3 une classe ne peut suivre plus d'un cours à la fois
    s.t. forall{j in Classes, k in Creneaux} : 
    sum {p in Professeurs} X[i,j,k]<= 1;
    
    #4 Un prof donne un cours à la fois
    s.t. forall{i in Professeurs, k in Creneaux}:
    sum {c in Classes} X[i,j,k] <=1;
    
    #5 Une seule fois une matière par jours
    s.t. forall{p in Professeurs, c in Classes, l in Jours}:
    sum {k in ((l-1)*(t+1))..(l*t)} X[i,j,k] <=1;
    
    #6 Sport le jeudi après midi classe 1
    s.t. {i = 8,j = 1,k = 15}:
    X[8,1,15] = 1;
    
    #7 Sport le jeudi après midi classe 2
    s.t. {i=9, j=2, j=15}:
    X[9,2,15] = 1;
    
    #8 Pas de cours en première heure du lundi
    s.t. forall{p in Professeurs, c in Classes}:
    X[i,j,1] = 0;
    
    #9 Mr Efdehicks absent le lundi matin
    s.t. forall{c in Classes}: 
    X[4,2,k]=0;
    
    #10 Pas de cours de Biologie Mercredi
    s.t. forall{c in Classes, d in 9..12}:
    X[ 2,j,k] = 0;
    
    #11 Les variables sont booléennes
    s.t. forall{p in Professeurs, c in Classes, t in Coursjournaliers} 
    X[i,j,k] in {0,1};
    
    /* Données */
    
    
    
    data;
    
    set Professeurs := {1..9};
    set Classes := {1..2};
    set Coursjournaliers := {4};
    set Jours := {5};
    set Creneaux := {Coursjournaliers cross Jours};
    
    param Cours : 1 2 :=
    
    1 1 1
    2 3 3
    3 2 2
    4 0 4
    5 4 0
    6 3 3 
    7 1 1
    8 1 0 
    9 0 1
    
    end;
    Mais je n'y arrive toujours pas.

    Ma fonction objectif n'est pas correcte et je sèche...

  3. #3
    invite500b4dc5

    Re : Exercice AMPL, optimisation, horaire lycée

    J'ai demandé de l'aide et ai reçu un exemple qui m'a un peu aidé

    guer12-4.pdf

    Voici donc mon fichier :

    Code:
    /* Travail Rercherche OP */
    /* Horaire de Cours */
    /* Ensemble d'objets indices */
    
    set p; #ensemble des professeurs
    set c; #nombre de classes
    set td; #créneaux
    
    /*Paramètres*/
    
    param t := 4; #nombre de créneaux par jours
    param d := 5; #nombre de jours 
    param NbC{i in p, j in c}; #Nombre de cours que le prof i doit donner à la classe j
    
    
    /* Variables */
    
    var X {i in p, j in c, k in td} binary; # =1 si le professeur t donne cours à la classe c pendant la période t
    
    /* Fonction objectif */
    
    
    minimize Trou :
    sum {i in p, j in c, k in 0..4} (X[i,j,(k+1)]+X[i,j,(k+k)]);
    
    /* Contraintes */
    
    #2 planifier tous les cours : 
    s.t. forall{i in p,j in c}:
    sum {k in td} X[i,j,k] = NbC[i,j];
    
    #3 une classe ne peut suivre plus d'un cours à la fois
    s.t. forall{j in c,k in td}: 
    sum {i in p} X[i,j,k] <= 1;
    
    #4 Un prof donne un cours à la fois
    s.t. forall{i in p, k in td}:
    sum {c in c} X[i,j,k] <=1;
    
    #5 Une seule fois une matière par jours
    s.t. forall{i in p, j in c, l in d}:
    sum {k in ((l-1)*(t+1))..(l*t)} X[i,j,k] <=1;
    
    #6 Sport le jeudi après midi classe 1
    s.t. {i = 8,j = 1,k = 15}:
    X[8,1,15] = 1;
    
    #7 Sport le jeudi après midi classe 2
    s.t. {i=9, j=2, j=15}:
    X[9,2,15] = 1;
    
    #8 Pas de cours en première heure du lundi
    s.t. forall{i in p, j in c}:
    X[i,j,1] = 0;
    
    #9 Mr Efdehicks absent le lundi matin
    s.t. forall{k in c}: 
    X[4,2,k]=0;
    
    #10 Pas de cours de Biologie Mercredi
    s.t. forall{j in c, k in 9..12}:
    X[ 2,j,k] = 0;
    
    #11 Les variables sont booléennes
    s.t. forall{i in p, j in c, k in td}: X[i,j,k] in {0,1};
    
    /* Données */
    
    
    data;
    
    set p := {1..9};
    set c := {1..2};
    set td := {1..20};
    set NbC{i in p, j in c};
    
    param NbC : 1 2 :=
    
    1 1 1
    2 3 3 
    3 2 2
    4 0 4
    5 4 0
    6 3 3 
    7 1 1
    8 1 0 
    9 0 1
    
    end;
    Mais j'ai un message d'erreur ligne 33 :

    Code:
    forall multiply declared

  4. #4
    invite500b4dc5

    Re : Exercice AMPL, optimisation, horaire lycée

    Réponse de mon collègue, ne pas utiliser de forall,

    Donc, j'avance

    Code:
    /* Travail Rercherche OP */
    /* Horaire de Cours */
    /* Ensemble d'objets indices */
    
    set p; #ensemble des professeurs
    set c; #nombre de classes
    set td; #créneaux
    
    /*Paramètres*/
    
    param t := 4; #nombre de créneaux par jours
    param d := 5; #nombre de jours 
    param NbC{i in p, j in c}; #Nombre de cours que le prof i doit donner à la classe j
    
    
    /* Variables */
    
    var X {i in p, j in c, k in td} binary; # =1 si le professeur t donne cours à la classe c pendant la période t
    
    /* Fonction objectif */
    
    
    minimize Trou :
    sum {i in p, j in c, k in 0..4} (X[i,j,(k+1)]+X[i,j,(k+k)]);
    
    /* Contraintes */
    
    #2 planifier tous les cours : 
    s.t. Touslescours{i in p,j in c}:
    sum {k in td} X[i,j,k] = NbC[i,j];
    
    #3 une classe ne peut suivre plus d'un cours à la fois
    s.t. Unparcoup{j in c,k in td}: 
    sum {i in p} X[i,j,k] <= 1;
    
    #4 Un prof donne un cours à la fois
    s.t. Unparprof{i in p, k in td}:
    sum {j in c} X[i,j,k] <=1;
    
    #5 Une seule fois une matière par jours
    s.t. UneParJour{i in p, j in c, l in d}:
    sum {k in ((l-1)*t+1)..(l cross t)} X[i,j,k] <=1;
    
    #6 Sport le jeudi après midi classe 1
    s.t. Sport1{i = 8,j = 1,k = 15}:
    X[8,1,15] = 1;
    
    #7 Sport le jeudi après midi classe 2
    s.t. Sport2{i=9, j=2, j=15}:
    X[9,2,15] = 1;
    
    #8 Pas de cours en première heure du lundi
    s.t. Devoirs{i in p, j in c}:
    X[i,j,1] = 0;
    
    #9 Mr Efdehicks absent le lundi matin
    s.t. Efdehicks{k in c}: 
    X[4,2,k]=0;
    
    #10 Pas de cours de Biologie Mercredi
    s.t. Nobiology{j in c, k in 9..12}:
    X[ 2,j,k] = 0;
    
    #11 Les variables sont booléennes
    s.t. Variablesbol{i in p, j in c, k in td}:
    X[i,j,k] in {0,1};
    
    /* Données */
    
    
    data;
    
    set p := {1..9};
    set c := {1..2};
    set td := {1..20};
    set NbC{i in p, j in c};
    
    param NbC : 1 2 :=
    
    1 1 1
    2 3 3 
    3 2 2
    4 0 4
    5 4 0
    6 3 3 
    7 1 1
    8 1 0 
    9 0 1
    
    end;
    J'ai par contre un problème :

    Code:
    domain expression has invalid type

  5. A voir en vidéo sur Futura
  6. #5
    invite500b4dc5

    Re : Exercice AMPL, optimisation, horaire lycée

    Je vois la bout du tunnel mais ce n'est pas encore ça.

    Voici le fichier de modélisation final-1 :

    Code:
    /* Travail Rercherche OP */
    /* Horaire de Cours */
    /* Ensemble d'objets indices */
    
    set p; #ensemble des professeurs
    set c; #nombre de classes
    set td; #créneaux
    
    /*Paramètres*/
    
    param t := 4; #nombre de créneaux par jours
    param d := 5; #nombre de jours 
    param NbC{i in p, j in c}; #Nombre de cours que le prof i doit donner à la classe j
    
    
    /* Variables */
    
    var X {i in p, j in c, k in td} binary; # =1 si le professeur t donne cours à la classe c pendant la période t
    
    /* Fonction objectif */
    
    
    minimize Trou :
    sum {i in p, j in c, k in 0..4} (X[i,j,(k+1)]+X[i,j,(k+k)]);
    
    /* Contraintes */
    
    #2 planifier tous les cours : 
    s.t. Touslescours{i in p,j in c}:
    sum {k in td} X[i,j,k] = NbC[i,j];
    
    #3 une classe ne peut suivre plus d'un cours à la fois
    s.t. Unparcoup{j in c,k in td}: 
    sum {i in p} X[i,j,k] <= 1;
    
    #4 Un prof donne un cours à la fois
    s.t. Unparprof{i in p, k in td}:
    sum {j in c} X[i,j,k] <=1;
    
    #5 Une seule fois une matière par jours
    s.t. UneParJour{i in p, j in c, l in 1..5}:
    sum {k in ((l-1)*t+1)..(l*t)} X[i,j,k] <=1;
    
    #6 Sport le jeudi après midi classe 1
    s.t. Sport1{8,1,15}:
    X[8,1,15] = 1;
    
    #7 Sport le jeudi après midi classe 2
    s.t. Sport2{9,2,15}:
    X[9,2,15] = 1;
    
    #8 Pas de cours en première heure du lundi
    s.t. Devoirs{i in p, j in c}:
    X[i,j,1] = 0;
    
    #9 Mr Efdehicks absent le lundi matin
    s.t. Efdehicks{k in c}: 
    X[4,2,k]=0;
    
    #10 Pas de cours de Biologie Mercredi
    s.t. Nobiology{j in c, k in 9..12}:
    X[ 2,j,k] = 0;
    
    /* Données */
    data;
    
    set p:= 1..9;
    set c:= 1..2;
    set td:= 1..20;
    
    param NbC : 1 2 :=
    1 			1 1
    2 			3 3 
    3 			2 2
    4 			0 4
    5 			4 0
    6 			3 3 
    7 			1 1
    8 			1 0 
    9 			0 1;
    
    end;
    J'ai encore une erreur au niveau de ma fonction objectif :
    Code:
    travail2_4.mod:23: X['1..9','1..2',0] out of domain
    C'est pourtant bien ce qui est marqué sur l'exo. Please?

Discussions similaires

  1. Diode(s) de roue libre pour moteur sens Horaire/Anti-Horaire ?
    Par invite20f901d9 dans le forum Électronique
    Réponses: 7
    Dernier message: 16/01/2012, 10h18
  2. probleme programmation AMPL
    Par MANTA.. dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 23/11/2011, 09h16
  3. Exercice optimisation
    Par invite9fbfd350 dans le forum Mathématiques du collège et du lycée
    Réponses: 12
    Dernier message: 22/04/2011, 18h07
  4. Exercice optimisation
    Par invite5badeddb dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 22/01/2007, 08h37
  5. Optimisation Horaire
    Par invited2e9dd9d dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 31/05/2005, 12h57