/* provaglpk.c */
/* Written in C by Raniere Silva
*/
#include
#include
#include
int main(void){
int n = 96, i, ir, j, jc;
double c1=1.0;
double c2=1.0;
double c3=1.0;
double c5=1.0;
double c4[97];
for(j = 1; j <= n; j++){
c4[j] = 1.0;
}
glp_prob *lp;
lp = glp_create_prob();
glp_set_prob_name(lp, "provaglpk");
glp_set_obj_dir(lp, GLP_MIN);
char col_name[10];
for(j = 1; j <= n; j++){
jc = glp_add_cols(lp, 1);
sprintf(col_name, "x1-%d", j);
glp_set_col_name(lp, jc, col_name);
glp_set_col_bnds(lp, jc, GLP_UP, 0.0, 5.0); // Column Bound
glp_set_obj_coef(lp, jc, c1); // Objective Coeficient
}
jc = glp_add_cols(lp, 1);
glp_set_col_name(lp, jc, "x2");
glp_set_col_kind(lp, jc, GLP_BV); // Binary variable
glp_set_obj_coef(lp, jc, c2); // Objective Coeficient
for(j = 1; j <= n; j++){
jc = glp_add_cols(lp, 1);
sprintf(col_name, "x3-%d", j);
glp_set_col_name(lp, jc, col_name);
glp_set_col_bnds(lp, jc, GLP_DB, 0.0, 100.0); // Column Bound
glp_set_obj_coef(lp, jc, c3); // Objective Coeficient
}
char row_name[10];
int *ind;
ind = (int *) malloc((n + 1) * sizeof(int));
double *val;
val = (double *) malloc((n + 1) * sizeof(double));
for(i = 1; i <= n; i++){
ir = glp_add_rows(lp, 1);
sprintf(row_name, "c4-%d", i);
glp_set_row_name(lp, ir, row_name);
sprintf(col_name, "x1-%d", i);
ind[1] = glp_find_col(lp, col_name);
val[1] = 1.0;
ind[2] = glp_find_col(lp, "x2");
val[2] = 1.0;
sprintf(col_name, "x3-%d", i);
ind[3] = glp_find_col(lp, col_name);
val[3] = 1.0;
glp_set_mat_row(lp, ir, 3, ind, val);
glp_set_row_bnds(lp, ir, GLP_FX, c4[i], c4[i]);
}
for(i = 1; i <= n; i++){
ir = glp_add_rows(lp, 1);
sprintf(row_name, "c5-%d", i);
glp_set_row_name(lp, ir, row_name);
sprintf(col_name, "x1-%d", i);
ind[1] = glp_find_col(lp, col_name);
val[1] = 1.0;
sprintf(col_name, "x3-%d", i);
ind[2] = glp_find_col(lp, col_name);
val[2] = 1.0;
glp_set_mat_row(lp, ir, 2, ind, val);
glp_set_row_bnds(lp, ir, GLP_FX, c5, c5);
}
glp_simplex(lp, NULL);
double z = glp_get_obj_val(lp);
double x1[97], x3[97];
for(i = 1; i <= n; i++){
sprintf(col_name, "x1-%d", i);
x1[i] = glp_get_col_prim(lp, glp_find_col(lp, col_name));
sprintf(col_name, "x3-%d", i);
x3[i] = glp_get_col_prim(lp, glp_find_col(lp, col_name));
}
double x2 = glp_get_col_prim(lp, glp_find_col(lp, "x2"));
printf("\nz = %g\n", z);
glp_delete_prob(lp);
return 0;
}
/* eof */