Preference weight of staff

37 views
Skip to first unread message

Tong Wen Yi

unread,
Aug 30, 2021, 2:48:56 AM8/30/21
to AMPL Modeling Language
Hello AMPL Group:
I currently run a model with the objective function of maximize the overall of preference of employees towards work shifts and days off. 

#--------SETS
set index; #Index for staff
set shift;        #Types of shift
set wdays; #Weekday
param order {index, shift} >=0;

#--------PARAMETERS
param f_min{i in index}; #no of offday per week
param f_max{i in index}; #no of offday per week
param w{i in index, j in shift, wdays}; #preference weight of staff
param d{j in shift, k in wdays}; #no of staff required
param s{i in index, k in wdays}; #no of shift on a day
param r_min{i in index}; #no of working day per week
param r_max{i in index}; #no of working day per week

#---------- VARIABLES
var x{i in index, j in shift, k in wdays}>=0, integer;

#---------- OBJECTIVE AND CONSTRAINTS
maximize z: sum{i in index, j in shift, k in wdays} (w[i,j,k]*x[i,j,k]);
subject to c1{j in shift, k in wdays}: sum{i in index} (w[i,j,k]*x[i,j,k]) = d[j,k];
                c2{i in index, k in wdays}: sum{j in shift} (x[i,j,k]) <= s[i,k];
          c3{i in index}: sum{j in shift, k in wdays} (x[i,j,k]) >= f_min[i];
                c4{i in index}: sum{j in shift, k in wdays} (x[i,j,k]) <= f_max[i];
          c5{i in index}: sum{j in shift, k in wdays} (x[i,j,k]) >= r_min[i];
          c6{i in index}: sum{j in shift, k in wdays} (x[i,j,k]) <= r_max[i];

#---------- DATA
data;
set index:= S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16, S17, S18, S19, S20, S21, S22, S23, S24, S25, S26, S27, S28, S29;
set shift:= Morn, Eve, Night;
set wdays:= Mon, Tue, Wed, Thu, Fri, Sat, Sun;

#preference weight
param w:=
[*,*,Mon]:Morn  Eve   Night:=  
     S1   1.67  0.67  0.67
     S2   0.67  1.67  0.67
     S3   0.67  1.67  0.67
     S4   1.67  0.67  0.67
     S5   1.67  0.67  0.67   
     S6   0.67  0.67  1.67
     S7   1.67  0.67  0.67
     S8   0.67  1.67  0.67
     S9   1.67  0.67  0.67
    S10   1.67  0.67  0.67
    S11   0.67  1.67  0.67
    S12   0.67  1.67  0.67         
    S13   1.67  0.67  0.67   
    S14   0.67  1.67  0.67 
    S15   0.67  1.67  0.67       
    S16   0.67  1.67  0.67      
    S17   0.67  0.67  1.67       
    S18   0.67  0.67  1.67       
    S19   1.67  0.67  0.67 
    S20   0.67  0.67  1.67   
    S21   0.67  1.67  0.67
    S22   1.67  0.67  0.67 
    S23   0.67  1.67  0.67   
    S24   0.67  1.67  0.67
    S25   1.67  0.67  0.67 
    S26   0.67  0.67  1.67   
    S27   1.67  0.67  0.67
    S28   0.67  0.67  1.67
    S29   0.67  0.67  1.67

[*,*,Tue]:Morn  Eve   Night:=  
     S1   1.67  0.67  0.67
     S2   0.67  1.67  0.67
     S3   0.67  1.67  0.67
     S4   1.67  0.67  0.67
     S5   1.67  0.67  0.67   
     S6   0.67  0.67  1.67
     S7   1.67  0.67  0.67
     S8   0.67  1.67  0.67
     S9   1.67  0.67  0.67
    S10   1.67  0.67  0.67
    S11   0.67  1.67  0.67
    S12   0.67  1.67  0.67         
    S13   1.67  0.67  0.67   
    S14   0.67  1.67  0.67 
    S15   0.67  1.67  0.67       
    S16   0.67  1.67  0.67      
    S17   0.67  0.67  1.67       
    S18   0.67  0.67  1.67       
    S19   1.67  0.67  0.67 
    S20   0.67  0.67  1.67   
    S21   0.67  1.67  0.67
    S22   1.67  0.67  0.67 
    S23   0.67  1.67  0.67   
    S24   0.67  1.67  0.67
    S25   1.67  0.67  0.67 
    S26   0.67  0.67  1.67   
    S27   1.67  0.67  0.67
    S28   0.67  0.67  1.67
    S29   0.67  0.67  1.67

[*,*,Wed]:Morn  Eve   Night:=  
     S1   1.67  0.67  0.67
     S2   0.67  1.67  0.67
     S3   0.67  1.67  0.67
     S4   1.67  0.67  0.67
     S5   1.67  0.67  0.67   
     S6   0.67  0.67  1.67
     S7   1.67  0.67  0.67
     S8   0.67  1.67  0.67
     S9   1.67  0.67  0.67
    S10   1.67  0.67  0.67
    S11   0.67  1.67  0.67
    S12   0.67  1.67  0.67         
    S13   1.67  0.67  0.67   
    S14   0.67  1.67  0.67 
    S15   0.67  1.67  0.67       
    S16   0.67  1.67  0.67      
    S17   0.67  0.67  1.67       
    S18   0.67  0.67  1.67       
    S19   1.67  0.67  0.67 
    S20   0.67  0.67  1.67   
    S21   0.67  1.67  0.67
    S22   1.67  0.67  0.67 
    S23   0.67  1.67  0.67   
    S24   0.67  1.67  0.67
    S25   1.67  0.67  0.67 
    S26   0.67  0.67  1.67   
    S27   1.67  0.67  0.67
    S28   0.67  0.67  1.67
    S29   0.67  0.67  1.67

[*,*,Thu]:Morn  Eve   Night:=  
     S1   1.67  0.67  0.67
     S2   0.67  1.67  0.67
     S3   0.67  1.67  0.67
     S4   1.67  0.67  0.67
     S5   1.67  0.67  0.67   
     S6   0.67  0.67  1.67
     S7   1.67  0.67  0.67
     S8   0.67  1.67  0.67
     S9   1.67  0.67  0.67
    S10   1.67  0.67  0.67
    S11   0.67  1.67  0.67
    S12   0.67  1.67  0.67         
    S13   1.67  0.67  0.67   
    S14   0.67  1.67  0.67 
    S15   0.67  1.67  0.67       
    S16   0.67  1.67  0.67      
    S17   0.67  0.67  1.67       
    S18   0.67  0.67  1.67       
    S19   1.67  0.67  0.67 
    S20   0.67  0.67  1.67   
    S21   0.67  1.67  0.67
    S22   1.67  0.67  0.67 
    S23   0.67  1.67  0.67   
    S24   0.67  1.67  0.67
    S25   1.67  0.67  0.67 
    S26   0.67  0.67  1.67   
    S27   1.67  0.67  0.67
    S28   0.67  0.67  1.67
    S29   0.67  0.67  1.67

[*,*,Fri]:Morn  Eve   Night:=  
     S1   1.67  0.67  0.67
     S2   0.67  1.67  0.67
     S3   0.67  1.67  0.67
     S4   1.67  0.67  0.67
     S5   1.67  0.67  0.67   
     S6   0.67  0.67  1.67
     S7   1.67  0.67  0.67
     S8   0.67  1.67  0.67
     S9   1.67  0.67  0.67
    S10   1.67  0.67  0.67
    S11   0.67  1.67  0.67
    S12   0.67  1.67  0.67         
    S13   1.67  0.67  0.67   
    S14   0.67  1.67  0.67 
    S15   0.67  1.67  0.67       
    S16   0.67  1.67  0.67      
    S17   0.67  0.67  1.67       
    S18   0.67  0.67  1.67       
    S19   1.67  0.67  0.67 
    S20   0.67  0.67  1.67   
    S21   0.67  1.67  0.67
    S22   1.67  0.67  0.67 
    S23   0.67  1.67  0.67   
    S24   0.67  1.67  0.67
    S25   1.67  0.67  0.67 
    S26   0.67  0.67  1.67   
    S27   1.67  0.67  0.67
    S28   0.67  0.67  1.67
    S29   0.67  0.67  1.67

[*,*,Sat]:Morn  Eve   Night:=  
     S1   1.67  0.67  0.67
     S2   0.67  1.67  0.67
     S3   0.67  1.67  0.67
     S4   1.67  0.67  0.67
     S5   1.67  0.67  0.67   
     S6   0.67  0.67  1.67
     S7   1.67  0.67  0.67
     S8   0.67  1.67  0.67
     S9   1.67  0.67  0.67
    S10   1.67  0.67  0.67
    S11   0.67  1.67  0.67
    S12   0.67  1.67  0.67         
    S13   1.67  0.67  0.67   
    S14   0.67  1.67  0.67 
    S15   0.67  1.67  0.67       
    S16   0.67  1.67  0.67      
    S17   0.67  0.67  1.67       
    S18   0.67  0.67  1.67       
    S19   1.67  0.67  0.67 
    S20   0.67  0.67  1.67   
    S21   0.67  1.67  0.67
    S22   1.67  0.67  0.67 
    S23   0.67  1.67  0.67   
    S24   0.67  1.67  0.67
    S25   1.67  0.67  0.67 
    S26   0.67  0.67  1.67   
    S27   1.67  0.67  0.67
    S28   0.67  0.67  1.67
    S29   0.67  0.67  1.67

[*,*,Sun]:Morn  Eve   Night:=  
     S1   1.67  0.67  0.67
     S2   0.67  1.67  0.67
     S3   0.67  1.67  0.67
     S4   1.67  0.67  0.67
     S5   1.67  0.67  0.67   
     S6   0.67  0.67  1.67
     S7   1.67  0.67  0.67
     S8   0.67  1.67  0.67
     S9   1.67  0.67  0.67
    S10   1.67  0.67  0.67
    S11   0.67  1.67  0.67
    S12   0.67  1.67  0.67         
    S13   1.67  0.67  0.67   
    S14   0.67  1.67  0.67 
    S15   0.67  1.67  0.67       
    S16   0.67  1.67  0.67      
    S17   0.67  0.67  1.67       
    S18   0.67  0.67  1.67       
    S19   1.67  0.67  0.67 
    S20   0.67  0.67  1.67   
    S21   0.67  1.67  0.67
    S22   1.67  0.67  0.67 
    S23   0.67  1.67  0.67   
    S24   0.67  1.67  0.67
    S25   1.67  0.67  0.67 
    S26   0.67  0.67  1.67   
    S27   1.67  0.67  0.67
    S28   0.67  0.67  1.67
    S29   0.67  0.67  1.67

#no of staff required, d[j,k]
param d:   Mon  Tue  Wed  Thu  Fri  Sat  Sun:= 
    Morn    9    9    9    9    9    9    9
    Eve     8    8    8    8    8    8    8
    Night   6    6    6    6    6    6    6;

#no of shift, s[j]
param s: P1    P2    P3:=
     S1  1     1     1
     S2  1     1     1
     S3  1     1     1 
     S4  1     1     1
     S5  1     1     1         
     S6  1     1     1 
     S7  1     1     1   
     S8  1     1     1
     S9  1     1     1
    S10  1     1     1
    S11  1     1     1
    S12  1     1     1           
    S13  1     1     1     
    S14  1     1     1     
    S15  1     1     1        
    S16  1     1     1     
    S17  1     1     1          
    S18  1     1     1          
    S19  1     1     1     
    S20  1     1     1     
    S21  1     1     1
    S22  1     1     1     
    S23  1     1     1     
    S24  1     1     1
    S25  1     1     1     
    S26  1     1     1     
    S27  1     1     1 
    S28  1     1     1     
    S29  1     1     1;

#no of shift, f_min[i]
param f_min:= S1  1
              S2  1
              S3  1 
              S4  1
              S5  1  
              S6  1    
              S7  1
              S8  1    
              S9  1
             S10  1
             S11  1
             S12  1
             S13  1
             S14  1
             S15  1
             S16  1
             S17  1
             S18  1
     S19  1
     S20  1
     S21  1
     S22  1
     S23  1
     S24  1
     S25  1
     S26  1
     S27  1
     S28  1
     S29  1;

#no of shift, f_max[i]
param f_max:= S1  2
              S2  2
              S3  2 
              S4  2
              S5  2  
              S6  2     
              S7  2
              S8  2    
              S9  2
             S10  2
             S11  2
             S12  2
             S13  2
             S14  2
             S15  2
             S16  2
             S17  2
             S18  2
     S19  2
     S20  2
     S21  2
     S22  2
     S23  2
     S24  2
     S25  2
     S26  2
     S27  2
     S28  2
     S29  2;

#no of working days, r_min[i]
param r_min:= S1  5
              S2  5
              S3  5 
              S4  5
              S5  5   
              S6  5    
              S7  5 
              S8  5    
              S9  5
             S10  5
             S11  5
             S12  5
             S13  5
             S14  5
             S15  5
             S16  5
             S17  5
             S18  5
     S19  5
     S20  5
     S21  5
     S22  5
     S23  5
     S24  5
     S25  5
     S26  5
     S27  5
     S28  5
     S29  5;

#no of working days, r_max[i]
param r_max:= S1  6
              S2  6
              S3  6  
              S4  6 
              S5  6   
              S6  6    
              S7  6
              S8  6    
              S9  6
             S10  6
             S11  6
             S12  6
             S13  6
             S14  6
             S15  6
             S16  6
             S17  6
             S18  6
     S19  6
     S20  6
     S21  6
     S22  6
     S23  6
     S24  6
     S25  6
     S26  6
     S27  6
     S28  6
     S29  6;

#Part 4 Solver
option solver cplex;
solve;

#Part 5 Output
display z;
display {i in index, j in shift, k in wdays} x[i,j,k];

end;

This is the coding that I used to program in AMPL software. Can anyone help me? Thanks you so much.

Tong Wen Yi

unread,
Aug 30, 2021, 2:52:06 AM8/30/21
to AMPL Modeling Language
5.png

AMPL Google Group

unread,
Aug 30, 2021, 11:30:22 AM8/30/21
to AMPL Modeling Language
It appears that you are missing the ; character at the end of the previous statement:


S28 0.67 0.67 1.67
S29 0.67 0.67 1.67

#no of staff required, d[j,k]
param d: Mon Tue Wed Thu Fri Sat Sun:=
Morn 9 9 9 9 9 9 9
Eve 8 8 8 8 8 8 8
Night 6 6 6 6 6 6 6;


--
Robert Fourer
am...@googlegroups.com
{#HS:1615756772-106085#}
On Mon, Aug 30, 2021 at 6:52 AM UTC, AMPL Modeling Language <am...@googlegroups.com> wrote:
5.png

--
You received this message because you are subscribed to the Google Groups "AMPL Modeling Language" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ampl+uns...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ampl/85a99f20-c0c2-493d-9914-f90fffd8859an%40googlegroups.com.

Reply all
Reply to author
Forward
0 new messages