from glpk.glpkpi import * def bus_heu() : #Faco uma busca por solucoes inteiras factiveis via heuristica #Por simplicidade ja estou informando uma solucao size = 1000+1 sol = doubleArray(size) sol[1] = 1.0 sol[2] = 6.0 return sol def foo(tree, info) : #Modifica o funcionamento da GLPK para utilizar a solucao encontrar por heuristica if glp_ios_reason(tree) == GLP_IHEUR and glp_ios_curr_node(tree) == 1 : print "Introduzindo solucao" glp_ios_heur_sol(tree, info) return #Aqui inicia a funcao principal size = 1000+1 ia = intArray(size) ja = intArray(size) ar = doubleArray(size) prob = glp_create_prob() #Criacao do problema glp_set_obj_dir(prob, GLP_MIN) glp_add_rows(prob, 2) glp_set_row_name(prob, 1, "p") glp_set_row_bnds(prob, 1, GLP_UP, 0.0, 40.0) glp_set_row_name(prob, 2, "q") glp_set_row_bnds(prob, 2, GLP_UP, 0.0, 200.0) glp_add_cols(prob, 2) glp_set_col_name(prob, 1, "x1") glp_set_col_kind(prob, 1, GLP_IV) glp_set_col_bnds(prob, 1, GLP_LO, 0.0, 0.0) glp_set_obj_coef(prob, 1, -10.0) glp_set_col_name(prob, 2, "x2") glp_set_col_kind(prob, 2, GLP_IV) glp_set_col_bnds(prob, 2, GLP_LO, 0.0, 0.0) glp_set_obj_coef(prob, 2, -15.0) ia[1] = 1; ja[1] = 1; ar[1] = 8.0 # /* a[1,1] = 8 */ ia[2] = 1; ja[2] = 2; ar[2] = 4.0 # /* a[1,2] = 4 */ ia[3] = 2; ja[3] = 1; ar[3] = 15.0 # /* a[2,1] = 15 */ ia[4] = 2; ja[4] = 2; ar[4] = 30.0 # /* a[2,2] = 30 */ #Processo de solucao glp_load_matrix(prob, 4, ia, ja, ar) solve_lp = glp_simplex(prob, None) if solve_lp == 0 and glp_get_status(prob) == GLP_OPT : sol = bus_heu() parm = glp_iocp() glp_init_iocp(parm) parm.cb_func = foo parm.cb_info = sol solve_mip = glp_intopt(prob, parm) #Leitura da solucao Z = glp_mip_obj_val(prob) x1 = glp_mip_col_val(prob, 1) x2 = glp_mip_col_val(prob, 2) print "\nZ = %g; x1 = %g; x2 = %g\n" %(Z, x1, x2) del prob