Hello everybody,

GLPK can solve the attached code in 360 sec. on my Laptop, which is very long 
time.
Is there any suggestion to expedite the solution process?
Is there anything wrong with this code than does not match with MathProg?
Shall I modify the MIP options to make the process faster? and how?

I want the solution process to be finish within 10-30 sec.

Anyone can help?

Thanks

set D;
set S;


# Parameters 

param PR {S};                           
param PO {D};                                           
param AC {S};           
param OI {S};                                           
param RI {S};                   
param OT {S};


# Variables 

var W {D,S} binary; 
var IL {S} integer >=1 <=3 ;  
var TF {S} ;            
var TA {S} ;                    


# Objective Function

minimize Z: sum {j in S} ( IL[j]*PO['L']*PR[j] + sum{i in D : i != 'L'} 
W[i,j]*PO[i]*PR[j]  );


subject to
 
############# L ###################

        Const_L1 {i in D, j in S : j < 1 or j > 24}:  W['L',j] = 0 ;

        Const_L2 { j in S : j >= 1 and j <= 24 }:  OI[j] + IL[j] >= RI[j] ;
                                        
############# A ########################

        Const_A1 {j in S : j = 1 } : TA[j]   = 20 ;

        Const_A2 {i in D, j in S: j < 1 or j > 24}:     W['A',j] = 0;

        Const_A3 {j in S: j >= 1 and j <= 24 } :         TA[j]  <= 23;

        Const_A4 {j in S: j >= 1 and j <= 24 } :         TA[j]  >= 13;

        Const_A5 {i in D, j in S : j!=1 }: (- 1.1) * TA[j] + TA[j-1] + 0.1 * 
AC[j] - 4 * W['A',j] + 0.1 * OT[j] + 2 = 0 ;

############# F ######################

        Const_F1 {j in S : j= 1} : TF[j] = (-18 ) ;

        Const_F2 {i in D, j in S : i = 'F' and (j < 1 or j > 24)}:  W['F',j] = 
0;

        Const_F3 {i in D, j in S : j > 1 and j <= 24}:    TF[j]  <= (-18);

        Const_F4 {i in D, j in S : j > 1 and j <= 24}:     TF[j]  >= (-22);

        Const_F5 {i in D, j in S: j!=1 }: - TF[j] + TF[j-1] + 0.1 * AC[j] - 2 * 
W['F',j] + 1 = 0;

############# S #######################

        Const_S1 {i in D, j in S : j < 7 or j > 19}: W['S',j] = 0;

        Const_S2 : sum {j in S} W['S',j] = 6 ;

        Const_S3 {i in D, j in S: j >= 7 and j <= 19} : sum {k in j-1..j+1} W 
['S',k] <= 2 ;
                

solve;


printf  "Z = %8d",sum {j in S} 
                ( IL[j]*PO['L']*PR[j] + sum{i in D : i != 'L'} 
W[i,j]*PO[i]*PR[j] ) ;

printf "\n";
printf " W(i,j) \n";

for {i in D}
{  for {j in S} printf " %s",if W[i,j] then "1" else ".";
   printf("\n");
}


# Data  

data;
        
set D := A  S  F  L ;   
   
param PO := A   2000  S   1500  F   250  L   150  ;                             
                                 

set S := 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24;

param PR := 1 4 2 4 3 4 4 4 5 4 6 4 7 7.2 8 7.2 9 7.2 10 7.2 11 8.8 12 8.8 13 
8.8 14 8.8 15 8.8 16 8.8 17 8.8 18 7.2 19 7.2 20 7.2 21 7.2 22 4 23 4 24 4 ;

param AC := 1 1.25 2 1.15 3 1.05 4 1.1 5 1.2 6 1.4 7 1.7 8 1.8 9 1.9 10 2 11 2 
12 2.1  13 2.2 14 2.3 15 2.4 16 2.7 17 2.8 18 3 19 3 20 3 21 3 22 4 23 2.4 24 
1.7;

param OI := 1 0 2 0 3 0 4 0 5 0 6 0.1 7 0.1 8 0.1 9 0.5 10 0.5 11 0.7 12 0.7 13 
0.7 14 0.7 15 0.7 16 0.5 17 0.1 18 0 19 0 20 0 21 0 22 0 23 0 24 0;

param RI := 1 0.1 2 0.1 3 0.1 4 0.1 5 0.1 6 1 7 1 8 1 9 2 10 2 11 2 12 2 13 2 
14 2 15 2 16 2 17 3 18 3 19 3 20 3 21 2 22 2 23 2 24 1;

param OT := 1 15 2 14 3 14 4 13 5 13 6 13 7 14 8 14 9 15 10 17 11 17 12 20 13 
24 14 25 15 27 16 26 17 25 18 24 19 24 20 20 21 18 22 16 23 16 24 15 ;


end;


      
set D;
set S;


# Parameters 

param PR {S};                           
param PO {D};                                           
param AC {S};           
param OI {S};                                           
param RI {S};                   
param OT {S};


# Variables 

var W {D,S} binary; 
var IL {S} integer >=1 <=3 ;  
var TF {S} ;            
var TA {S} ;                    


# Objective Function

minimize Z: sum {j in S} ( IL[j]*PO['L']*PR[j] + sum{i in D : i != 'L'} 
W[i,j]*PO[i]*PR[j]  );


subject to
 
############# L ###################

        Const_L1 {i in D, j in S : j < 1 or j > 24}:  W['L',j] = 0 ;

        Const_L2 { j in S : j >= 1 and j <= 24 }:  OI[j] + IL[j] >= RI[j] ;
                                        
############# A ########################

        Const_A1 {j in S : j = 1 } : TA[j]   = 20 ;

        Const_A2 {i in D, j in S: j < 1 or j > 24}:     W['A',j] = 0;

        Const_A3 {j in S: j >= 1 and j <= 24 } :         TA[j]  <= 23;

        Const_A4 {j in S: j >= 1 and j <= 24 } :         TA[j]  >= 13;

        Const_A5 {i in D, j in S : j!=1 }: (- 1.1) * TA[j] + TA[j-1] + 0.1 * 
AC[j] - 4 * W['A',j] + 0.1 * OT[j] + 2 = 0 ;

############# F ######################

        Const_F1 {j in S : j= 1} : TF[j] = (-18 ) ;

        Const_F2 {i in D, j in S : i = 'F' and (j < 1 or j > 24)}:  W['F',j] = 
0;

        Const_F3 {i in D, j in S : j > 1 and j <= 24}:    TF[j]  <= (-18);

        Const_F4 {i in D, j in S : j > 1 and j <= 24}:     TF[j]  >= (-22);

        Const_F5 {i in D, j in S: j!=1 }: - TF[j] + TF[j-1] + 0.1 * AC[j] - 2 * 
W['F',j] + 1 = 0;

############# S #######################

        Const_S1 {i in D, j in S : j < 7 or j > 19}: W['S',j] = 0;

        Const_S2 : sum {j in S} W['S',j] = 6 ;

        Const_S3 {i in D, j in S: j >= 7 and j <= 19} : sum {k in j-1..j+1} W 
['S',k] <= 2 ;
                

solve;


printf  "Z = %8d",sum {j in S} 
                ( IL[j]*PO['L']*PR[j] + sum{i in D : i != 'L'} 
W[i,j]*PO[i]*PR[j] ) ;

printf "\n";
printf " W(i,j) \n";

for {i in D}
{  for {j in S} printf " %s",if W[i,j] then "1" else ".";
   printf("\n");
}


# Data  

data;
        
set D := A  S  F  L ;   
   
param PO := A   2000  S   1500  F   250  L   150  ;                             
                                 

set S := 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24;

param PR := 1 4 2 4 3 4 4 4 5 4 6 4 7 7.2 8 7.2 9 7.2 10 7.2 11 8.8 12 8.8 13 
8.8 14 8.8 15 8.8 16 8.8 17 8.8 18 7.2 19 7.2 20 7.2 21 7.2 22 4 23 4 24 4 ;

param AC := 1 1.25 2 1.15 3 1.05 4 1.1 5 1.2 6 1.4 7 1.7 8 1.8 9 1.9 10 2 11 2 
12 2.1  13 2.2 14 2.3 15 2.4 16 2.7 17 2.8 18 3 19 3 20 3 21 3 22 4 23 2.4 24 
1.7;

param OI := 1 0 2 0 3 0 4 0 5 0 6 0.1 7 0.1 8 0.1 9 0.5 10 0.5 11 0.7 12 0.7 13 
0.7 14 0.7 15 0.7 16 0.5 17 0.1 18 0 19 0 20 0 21 0 22 0 23 0 24 0;

param RI := 1 0.1 2 0.1 3 0.1 4 0.1 5 0.1 6 1 7 1 8 1 9 2 10 2 11 2 12 2 13 2 
14 2 15 2 16 2 17 3 18 3 19 3 20 3 21 2 22 2 23 2 24 1;

param OT := 1 15 2 14 3 14 4 13 5 13 6 13 7 14 8 14 9 15 10 17 11 17 12 20 13 
24 14 25 15 27 16 26 17 25 18 24 19 24 20 20 21 18 22 16 23 16 24 15 ;


end;


                                


                        


 

_______________________________________________
Help-glpk mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to