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