/* 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 */