// test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include "glpk.h" int __cdecl main(int argc,char *argv[]) { // a = b + b > b = c + c > c = d + d > d = e + e > e = f + f > f = g + g > g = h + h > h = i + j > i = k + q > j = m + n > k = l + p > l = o + o > m > n > o > p > q > 0 int ia[] = { 0,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16,17,17,18,18,18,19,19,20,20,20,21,21,22,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30 }; int ja[] = { 0,1,1,2,1,2,2,3,2,3,3,4,3,4,4,5,4,5,5,6,5,6,6,7,6,7,7,8,7,8,8,9,10,8,9,9,11,17,9,10,10,13,14,10,11,11,12,16,11,12,12,15,12,13,13,14,14,15,15,16,16,17,17 }; double ar[] = { 0.0,1.0,1.0,-2.0,1.0,-1.0,1.0,-2.0,1.0,-1.0,1.0,-2.0,1.0,-1.0,1.0,-2.0,1.0,-1.0,1.0,-2.0,1.0,-1.0,1.0,-2.0,1.0,-1.0,1.0,-2.0,1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,-2.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.000000 }; glp_prob* lp = glp_create_prob(); glp_set_prob_name(lp, "Addition Chain"); glp_set_obj_dir(lp, GLP_MIN); glp_add_rows(lp, 30); glp_add_cols(lp, 17); glp_set_row_bnds(lp, 1, GLP_FR, 0.0, 0.000000); glp_set_row_bnds(lp, 2, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 3, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 4, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 5, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 6, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 7, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 8, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 9, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 10, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 11, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 12, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 13, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 14, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 15, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 16, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 17, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 18, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 19, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 20, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 21, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 22, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 23, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 24, GLP_FX, 0.0, 0.0); glp_set_row_bnds(lp, 25, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 26, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 27, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 28, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 29, GLP_LO, 1.0, 0.0); glp_set_row_bnds(lp, 30, GLP_LO, 1.0, 0.0); glp_set_col_bnds(lp, 1, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 1, GLP_IV); glp_set_col_bnds(lp, 2, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 2, GLP_IV); glp_set_col_bnds(lp, 3, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 3, GLP_IV); glp_set_col_bnds(lp, 4, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 4, GLP_IV); glp_set_col_bnds(lp, 5, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 5, GLP_IV); glp_set_col_bnds(lp, 6, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 6, GLP_IV); glp_set_col_bnds(lp, 7, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 7, GLP_IV); glp_set_col_bnds(lp, 8, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 8, GLP_IV); glp_set_col_bnds(lp, 9, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 9, GLP_IV); glp_set_col_bnds(lp, 10, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 10, GLP_IV); glp_set_col_bnds(lp, 11, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 11, GLP_IV); glp_set_col_bnds(lp, 12, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 12, GLP_IV); glp_set_col_bnds(lp, 13, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 13, GLP_IV); glp_set_col_bnds(lp, 14, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 14, GLP_IV); glp_set_col_bnds(lp, 15, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 15, GLP_IV); glp_set_col_bnds(lp, 16, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 16, GLP_IV); glp_set_col_bnds(lp, 17, GLP_LO, 1.0, 0.0); glp_set_col_kind(lp, 17, GLP_IV); //glp_term_out(GLP_OFF); glp_load_matrix(lp, 62, ia, ja, ar); glp_simplex(lp, NULL); if (glp_get_status(lp) != GLP_OPT) { if (glp_get_status(lp) != GLP_NOFEAS) { printf("%d\n", glp_get_status(lp)); } } else { glp_iocp param; glp_init_iocp(¶m); param.presolve = GLP_ON; int intopt = glp_intopt(lp, ¶m); if (intopt == 0) { int mipstatus = glp_mip_status(lp); if (mipstatus == GLP_NOFEAS) { } else if (mipstatus != GLP_FEAS && mipstatus != GLP_OPT) { printf("glp_mip_status failed %d\n", mipstatus); exit(0); } } else { printf("glp_intopt failed %d\n", intopt); exit(0); } } glp_delete_prob(lp); }