Hi,

 

I am using the current version of GLPK and have been referencing the
sodoku_odbc.mod example for my own project. I recently changed my setup
of reading each set of data from a different excel workbook to one
workbook where each set has a sheet. The sheets are populated from a
template sheet. I wrote some macros to transfer the data from the
template to the appropriate sheet. I now have a problem with the ODBC
handler. It will not accept the *.xlsm extension. Does anyone have any
suggestions for fixing this? I get an error from the first table
statement.

Thank you for your help.

 

Christina Cignarale

Industrial & Systems Engineer

Rochester Institute of Technology

 

set P;
#set of all patients

set PA within P;
#subset of patients admitted until the day before

set PN within P;
#subset of incoming patients requiring admission in the unit

set ISOLATION;
#set of isolation needs

set GENDER;
#set of genders


set R;
#set of available rooms

 

param filepath symbolic := 'C:\glpk445\examples\RGHPatient'; #
text-parameter used to represent the path where the table files are
stored

param B {j in R};
# number of beds available in each room j in R   

param G {i in P};# in GENDER ;
# gender of each patient i in P

param I {i in P};# in ISOLATION;
# isolation requirement of patient i in P

param c {i in P};
# current relative criticality of patient i in P compared with all other


 
#  patients in the unit

param y {i in P, j in R} binary, default 0;
# binary parameter that is 1 if patient i was in room j the day before,
and 0 o.w.

param flag {i in P} binary;
# binary parameter that is 1 if patient i cannot be moved from its room,
and 0 o.w.

 

 

table patient IN "ODBC"

                'DRIVER={Microsoft Excel Driver (*.xlsm)};
dbq=RGHtemplate.xlsm'

                'SELECT * FROM [patient$]':

                P <- [P], G, I, c, flag;

table pa IN "ODBC" 

                'DRIVER={Microsoft Excel Driver (*.xlsm)};
dbq=RGHtemplate.xlsm'

                'SELECT * FROM [patest$]':

                PA <- [PA];

table pn IN "ODBC" 

                'DRIVER={Microsoft Excel Driver (*.xlsm)};
dbq=RGHtemplate.xlsm'

                'SELECT * FROM [pntest$]':

                PN <- [PN];

table iso IN "ODBC" 

                'DRIVER={Microsoft Excel Driver (*.xlsm)};
dbq=RGHtemplate.xlsm'

                'SELECT * FROM [iso$]':

                ISOLATION <- [iso];

table gender IN "ODBC" 

                'DRIVER={Microsoft Excel Driver (*.xlsm)};
dbq=RGHtemplate.xlsm'

                'SELECT * FROM [gender$]':

                GENDER <- [gender]; 

table rooms IN "ODBC" 

                'DRIVER={Microsoft Excel Driver (*.xlsm)};
dbq=RGHtemplate.xlsm'

                'SELECT * FROM [rooms$]':

                 R <-[R],B;

table yparam IN "ODBC" 

                'DRIVER={Microsoft Excel Driver (*.xlsm)};
dbq=RGHtemplate.xlsm'

                'SELECT * FROM [y$]':

                [P, R], y;

 

var x        {i in P, j in R} binary;
# binary variable: 1 if patient i is moved to room j, and 0 o.w.

var delta {g in GENDER, j in R: B[j] <> 1} binary;
# binary variable : 1 if there is at least one patient with gender g in
room j, and 0 o.w.

var gamma {i in ISOLATION, j in R: B[j] <> 1} binary;
# binary variable: 1 if there is at least one patient with isolation i
in room j, and 0 o.w.

 

 

var splus{ i in P, j in R} >=0;

var sminus{i in P, j in R} >=0;

 

 

 

#minimize PatientMoves1: sum {i in PA, j in R} c[i]*(x[i,j]-y[i,j])  -
sum { i in PN,j in R:B[j] <> 0 and B[j] <> 99 and B[j] <>1 }
c[i]*x[i,j]; 

 

minimize PatientMoves2: sum {i in P, j in R}
c[i]*(splus[i,j]+sminus[i,j]);

 

subject to const0 {i in P, j in R}:x[i,j]-y[i,j] =
splus[i,j]-sminus[i,j];

 

subject to const1{i in P}: sum {j in R} x[i,j] =1; 

 

subject to const2 {i in P, j in R: B[j] <> 0 and B[j] <> 99 and B[j]
<>1}: x[i,j] <= delta[G[i],j]; 

 

subject to const3 {i in P, j in R: B[j] <> 0 and B[j] <> 99 and B[j]
<>1}: x[i,j] <= gamma[I[i],j];

 

subject to const4{j in R: B[j] <> 0 and B[j] <> 99 and B[j] <>1}: sum {g
in GENDER} delta[g,j] <=1;      

 

subject to const5 {j in R: B[j] <> 0 and B[j] <> 99 and B[j] <>1}: sum
{i in ISOLATION} gamma[i,j] <=1;

                

subject to const6 {j in R:B[j] <> 0 and B[j] <> 99 }: sum {i in P}
x[i,j] <= B[j];                                            

 

subject to const7 {i in PA,j in R: B[j]=0}: x[i,j] = 0;

 

subject to const8 {i in PN,j in R: B[j]= 99 }: x[i,j] =0;

 

subject to const9 {i in P, j1 in R: B[j1]=1 and y[i, j1]=1}:sum {j2 in
R: B[j2] = 1 and j1 <>j2} x[i,j2]=0;

 

subject to const10 {i in P}: sum{j in R: B[j] <> 0 and B[j] <> 99}
x[i,j] <= 1 - flag[i];

 

 

solve;

 

display x, y;

 

table results {i in P, j in R: x[i,j]=1} OUT "ODBC" 

                'DRIVER={Microsoft Excel Driver
(*.xlsm)};READONLY=FALSE; dbq=RGHtemplate.xlsm'

                'UPDATE [result$] set P = '''';'

                'UPDATE [result$] set R = '''';'

                'UPDATE [result$] set y = '''';'

                'UPDATE [result$] set x = '''';'

                'INSERT INTO [result$]'

                '(P, R, y,x)'

                'VALUES(?,?,?,?);':

                i ~ P, j ~ R, y[i,j]~Y, x[i,j]~X ;         # outputting
results to table

 

printf "%16s%16s%16s%16s\n", "PATIENT","STATUS", "INITIAL_ROOM",
"NEW_ROOM" > "RGHPatient_results.txt";                      # printing
results to a text file

 

for {i in PA}{

                printf "%16i%16s", i, "PA">>"RGHPatient_results.txt";

                printf{r in R: y[i,r]=1} "%16s", r >> filepath
&"RGHPatient_results.txt";

                printf{r in R:x[i,r]=1}"%16s\n", r >> filepath
&"RGHPatient_results.txt";

}

for {i in PN}{

                printf "%16i%16s", i, "PN">>"RGHPatient_results.txt";

                printf{r in R: y[i,r]=1} "%16s", r >>filepath
&"RGHPatient_results.txt";

                printf{r in R: x[i,r]=1}"%16s\n", r >> filepath
&"RGHPatient_results.txt";

}

 

 

end;

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

Reply via email to