#include<stdio.h> #include"glpk.h" #define N 10 double sommeTab(double* t, int n) { if (n == 0) return 0.; return *t + sommeTab(t+1, n-1); } void question1(double *notesPartiel, double* notesCC1, double* notesCC2) { double coeffs[4]; int rows[4], cols[4]; LPX* lp; int k = 1; lp = lpx_create_prob(); lpx_set_obj_dir(lp, LPX_MAX); lpx_add_cols(lp, 3); lpx_set_obj_coef(lp, 1, sommeTab(notesPartiel, N)/N); lpx_set_obj_coef(lp, 2, sommeTab(notesCC1, N)/N); lpx_set_obj_coef(lp, 3, sommeTab(notesCC2, N)/N); for(k = 1 ; k <= 3 ; k++) lpx_set_col_bnds(lp, k, LPX_DB, 0.0, 1.0); lpx_add_rows(lp, 1); lpx_set_row_bnds(lp, 1, LPX_UP, 0.0, 1.0); for(k = 1 ; k <= 3 ; k++) { rows[k]=1; cols[k]=k; coeffs[k] = 1.0 ; } lpx_load_matrix(lp, 3, rows, cols, coeffs); lpx_simplex(lp); lpx_get_obj_val(lp); for(k = 1 ; k <= 3 ; k++) printf("coeff %d is %lf\n", k, lpx_get_col_prim(lp, k)); lpx_delete_prob(lp); } void question2(double *notesPartiel, double* notesCC1, double* notesCC2) { double coeffs[4]; int rows[4], cols[4]; LPX* lp; int k = 1; lp = lpx_create_prob(); lpx_set_obj_dir(lp, LPX_MAX); lpx_add_cols(lp, 3); lpx_set_obj_coef(lp, 1, sommeTab(notesPartiel, N)/N); lpx_set_obj_coef(lp, 2, sommeTab(notesCC1, N)/N); lpx_set_obj_coef(lp, 3, sommeTab(notesCC2, N)/N); lpx_set_col_bnds(lp, 1, LPX_DB, 0.5, 1.0); for(k = 2 ; k <= 3 ; k++) lpx_set_col_bnds(lp, k, LPX_DB, 0.1, 1.0); lpx_add_rows(lp, 1); lpx_set_row_bnds(lp, 1, LPX_UP, 0.0, 1.0); for(k = 1 ; k <= 3 ; k++) { rows[k]=1; cols[k]=k; coeffs[k] = 1.0 ; } lpx_load_matrix(lp, 3, rows, cols, coeffs); lpx_simplex(lp); lpx_get_obj_val(lp); for(k = 1 ; k <= 3 ; k++) printf("coeff %d is %lf\n", k, lpx_get_col_prim(lp, k)); lpx_delete_prob(lp); } void question3(double *notesPartiel, double* notesCC1, double* notesCC2) { double coeffs[4*(N+1) + 1]; int rows[4*(N+1) + 1], cols[4*(N+1) + 1]; LPX* lp; int eleveIndex, coeffIndex = 1, i; lp = lpx_create_prob(); lpx_set_obj_dir(lp, LPX_MAX); lpx_add_cols(lp, 4); lpx_set_obj_coef(lp, 1, 1.); lpx_set_col_bnds(lp, 1, LPX_FR, 0.0, 0.0); lpx_set_col_bnds(lp, 2, LPX_DB, 0.5, 1.); lpx_set_col_bnds(lp, 3, LPX_DB, 0.1, 1.); lpx_set_col_bnds(lp, 4, LPX_DB, 0.1, 1.); lpx_add_rows(lp, N+1); for(eleveIndex = 0 ; eleveIndex < N ; eleveIndex++) { rows[coeffIndex]=eleveIndex + 1; cols[coeffIndex]=1; coeffs[coeffIndex] = 1.0 ; coeffIndex++; rows[coeffIndex]=eleveIndex + 1; cols[coeffIndex]=2; coeffs[coeffIndex] = -*(notesPartiel + eleveIndex) ; coeffIndex++; rows[coeffIndex]=eleveIndex + 1; cols[coeffIndex]=3; coeffs[coeffIndex] = -*(notesCC1 + eleveIndex) ; coeffIndex++; rows[coeffIndex]=eleveIndex + 1; cols[coeffIndex]=4; coeffs[coeffIndex] = -*(notesCC2 + eleveIndex) ; coeffIndex++; lpx_set_row_bnds(lp, eleveIndex + 1, LPX_UP, 0.0, 0.0); } for(i = 2; i <= 4; i++) { rows[coeffIndex] = N+1 ; cols[coeffIndex] = i; coeffs[coeffIndex] = 1.0 ; coeffIndex++; } lpx_set_row_bnds(lp, N+1, LPX_DB, 0.0, 1.0); lpx_load_matrix(lp, coeffIndex - 1, rows, cols, coeffs); lpx_simplex(lp); lpx_get_obj_val(lp); for(i = 2 ; i <= 4 ; i++) printf("coeff %d is %lf\n", i-1, lpx_get_col_prim(lp, i)); lpx_print_prob(lp, "question3.lpx"); lpx_delete_prob(lp); } int main() { double notesPartiel[N] = {10, 13, 2, 4.5, 9, 12, 16, 8, 5, 12}; double notesCC1[N] = {11, 16, 11, 8, 10, 11, 11, 6, 4, 13}; double notesCC2[N] = { 9, 18, 7, 8, 11, 3, 13, 10, 7, 19}; printf("QUESTION 1\n----------\n"); question1(notesPartiel, notesCC1, notesCC2); printf("QUESTION 2\n----------\n"); question2(notesPartiel, notesCC1, notesCC2); printf("QUESTION 3\n----------\n"); question3(notesPartiel, notesCC1, notesCC2); return 0; }