Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
Expand all | Collapse all

Description Ressource Chemin d'accès Emplacement Type Erreur interne : unsupported array slot index à l'emplacement...

  • 1.  Description Ressource Chemin d'accès Emplacement Type Erreur interne : unsupported array slot index à l'emplacement...

    Posted 10/15/18 03:57 PM

    Originally posted by: SanaeB


    Hi, i got the error "unsupported array slot index à l'emplacement ..." in the red line. Do you know how to fix it? I want the boolean x c,i,j,k,l to take the value zero when ts c,i,j,=0 (calculated imput) . See the code below. Thank you in advance :

    //DONNEES
    int NE=...; // Nombre d'Employés
    float TH=...; // Taux horaire de chaque employé
    int NC=...; //Nombre de commandes
    setof(int) COMMANDES= asSet(1..NC); //Ensemble des commandes
    int NT[COMMANDES]=...;// Nombre de tâches pour chaque commande
    int NU[COMMANDES]=...;// Nombre d'unités par commande'
    int NTMax=max(c in COMMANDES) NT[c]; // permet de calculer le nombre maximal de tâches toutes commandes confondues
    setof(int) TASKS[c in COMMANDES]= asSet(1..NT[c]);// liste des tâches d'une commmande'
    float t[COMMANDES][1..NTMax]=...; // temps de la tâche i (i ayant une positiion 1 à NTmax) de la commande c ayant NT commandes
    assert forall(c in COMMANDES, i in 1..NTMax) (i>NT[c]=>t[c][i]==0);// s'assure que les tâches dont l'index depasse NT pour une commande ont un temps nul
    float ts [c in 1..NC][i in 1..NTMax][j in 1..NTMax]=sum (l in i..j)(t[c][l]);// temps entre deux taches d'une commande ts cij: doit être du même format que t

    // VARIABLES
    dvar float+ CT; // coût total à minimiser
    dvar float+ NEC[COMMANDES];// Le nombre d'employés affecté à chaque commande / à voir si ce n'Est pas pluutôt une variable d'expression
    dvar boolean X[c in COMMANDES][i in 1..NTMax][j in 2..NTMax+1][k in 1..NE-NC][l in 1..NE-NC];// déclaration des variables binaires Xcijkl
    //assert forall(c in COMMANDES, i in 1..NTMax, j in 2..NTMax+2, k in 1..NE-NC, l in 1..NE-NC) (j>=i=>X[c][i][j][k][l]==0);
    dvar float+ TCP[COMMANDES][1..NE-NC]; // Valider la formulation de la vriable TCPcl (temps de cycle partiel de la ligne de la commande c lorsque l emoloyés y sont affectés) est-il pertinent de créer un ensemble d'Employés (1..NE-NC)'
    dexpr float TC[c in COMMANDES] = sum(l in 1..NE-NC)TCP[c][l];// équivaut contrainte 15 // Calcul du temps de cycle (avec la solution retenue) d'une ligne a partir des temps de cycle de la ligne avec l employés (TCP)'
    dexpr int NS[c in COMMANDES]=sum (i in 1..NTMax, j in 2..NTMax+1, k in 1..NE-NC, l in k..NE-NC ) X[c][i][j][k][l]; // Calcul du nombre de station par commande // l commence à k (valider)
    dvar boolean Z[COMMANDES][1..NE-NC]; //Valider la formulation de la variable, est vrai lorsque l employés sont affectés à la commande c
    dvar float coutP[c in COMMANDES][l in 1..NE-NC]; // cout de la commande avec l employés qui y sont affectés, sera nul avec les nombres d'employés non retenus'
    dexpr float coutC[c in COMMANDES]=sum(l in 1..NE-NC) coutP[c][l]; // coût de la commande

    //FONCTION OBJECTIF
    minimize CT;

    // CONTRAINTES

    subject to {

    forall(c in COMMANDES, i in 1..NTMax, j in 2..NTMax+1, k in 1..NE-NC, l in 1..NE-NC) (i>=j=>X[c][i][j][k][l]==0); // contrainte ajoutée pour se débarasser des xcijkl=1 lorsque i supérieur ou égal à j
    forall(c in COMMANDES, i in 1..NTMax, j in 1..NTMax, k in 1..NE-NC, l in 1..NE-NC) (ts [c in COMMANDES][i in 1..NTMax][j in 1..NTMax]==0 =>X[c][i][j+1][k][l]==0);// empeche d'Avoir un xij =1 si toutes les taches opnt une valeur nulle'
    forall (c in COMMANDES) sum (j in 2..NTMax+1, k in 1..NE-NC, l in k..NE-NC)X[c][1][j][k][l]==1; // Contrainte 9

    forall (c in COMMANDES,i in asSet(2..NTMax), l in 1..NE-NC) sum (j in 1..(i-1)) sum (k in 1..l) X[c][j][i][k][l]==sum(j in (i+1)..(NTMax+1))sum(k in 1..l)X[c][i][j][k][l];// Contrainte 10 telle qu'écrite par raf'

    forall (c in COMMANDES) NEC[c]==sum(i in 1..NTMax, j in i+1..NTMax+1, k in 1..NE-NC, l in k..NE-NC) k*X[c][i][j][k][l]; // premiere moitié de la contrainte 11

    forall (c in COMMANDES) NEC[c]== sum(j in 2..NTMax+1, k in 1..NE-NC, l in k..NE-NC) l*X[c][1][j][k][l]; // 2ème  moitié de la contrainte 11

    sum (c in COMMANDES) NEC[c]<=NE; // Contrainte 12 // mettre NE-NEC? si une seule commande cette inegalité  n'Est plus valable' c pas plutot NE-NC+1?

    forall (c in COMMANDES, i in 1..NTMax, j in i+1..NTMax+1, k in 1..NE-NC, l in k..NE-NC) X[c][i][j][k][l]*ts[c][i][j-1]/k<=TCP[c][l]; // Contrainte 13

    forall (c in COMMANDES, l in 1..NE-NC) TCP[c][l]<=ts[c][1][NTMax]*sum(i in 1..NTMax, j in i+1..NTMax+1, k in 1..l)X[c][i][j][k][l]; // Contrainte 14. Voir contrainte 16 comme variable d'expression'

    forall (c in COMMANDES, i in 1..NTMax, j in i+1..NTMax+1) sum(k in 1..NE-NC, l in k..NE-NC)X[c][i][j][k][l]<=1; // Contrainte 16 telle qu'écrite initialement'

    forall (c in COMMANDES, l in 1..NE-NC) sum(k in 1..l, j in 2..NTMax+1)X[c][1][j][k][l]==Z[c][l]; // Contrainte 17, voir contrainte 18 comme variable d'Expression

    forall (c in COMMANDES, l in 1..NE-NC) coutP[c][l]<=Z[c][l]*ts[c][1][NTMax]*l*TH/360*NU[c]; // Contrainte 19

    forall (c in COMMANDES, l in 1..NE-NC) coutP[c][l]>=TCP[c][l]*l*TH/360*NU[c]; //Contrainte 20

    CT==sum (c in COMMANDES, l in 1..NE-NC)coutP[c][l]; // Contrainte 21
    //forall (c in COMMANDES) NS[c]<=NT[c]; // contrainte pour ne pas permettre des scenarios ou le nombre de taches est inférieur au nombre de stations

    forall (c in COMMANDES) NS[c]>=2; // Contrainte pour controle le nombre minimal de station par ligne


    }

     

    DATA file:

    NE=20; // Nombre d'Employés
    TH=1; // Taux horaire de chaque employé
    NC=5; //Nombre de commandes
    NT=[3,2,4,5,3]; // Nombre de tâches pour chaque commande
    NU=[1500,1500,1500,1500,1500];// Nombre d'unités par commande'
    t=[[2,2.5,2.2],[10,1.2],[10,5.5,6,2],[9.5,8,5.6,0.5,0.5],[1,2,3]]; // temps de taches pour toutes les commandes

     

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: Description Ressource Chemin d'accès Emplacement Type Erreur interne : unsupported array slot index à l'emplacement...

    Posted 10/16/18 03:08 AM

    Hi,

    instead of

    forall(c in COMMANDES, i in 1..NTMax, j in 1..NTMax, k in 1..NE-NC, l in 1..NE-NC) (ts [c in COMMANDES][i in 1..NTMax][j in 1..NTMax]==0 =>X[c][i][j+1][k][l]==0);// empeche d'Avoir un xij =1 si toutes les taches opnt une valeur nulle'

    can you write

    forall(c in COMMANDES, i in 1..NTMax, j in 1..NTMax, k in 1..NE-NC, l in 1..NE-NC)  (ts [c][i ][j ]==0 =>X[c][i][j+1][k][l]==0);// empeche d'Avoir un xij =1 si toutes les taches opnt une valeur nulle'

    ?

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 3.  Re: Description Ressource Chemin d'accès Emplacement Type Erreur interne : unsupported array slot index à l'emplacement...

    Posted 10/16/18 12:49 PM

    Originally posted by: SanaeB


    Indeed... that was the mistake! Thanks again!


    #DecisionOptimization
    #OPLusingCPLEXOptimizer