help-glpk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-glpk] [Fwd: is there a dll edition of glpk mip solver?]


From: Heinrich Schuchardt
Subject: Re: [Help-glpk] [Fwd: is there a dll edition of glpk mip solver?]
Date: Thu, 7 Dec 2017 07:46:40 +0100

Have a look at the chapter on glp_intopt.

Best regards

Heinrich
--
Diese Nachricht wurde von meinem Android Mobiltelefon mit GMX Mail gesendet.
Am 07.12.17, 07:11, "Liujianxin (Jason)" <address@hidden> schrieb:

Dear Heinrich,

 

Thank you very much for the help document recommended. It helped me a lot.

Right now I’m trying to use ctypes library of Python 3.5.4 to load glpk_4_64.dll to solve lp and mip problems.

 

Test lp problem:

I tried to call the glpk_4_64.dll to solve this problem and succeeded. The following is my code:

from ctypes import *

solver = windll.LoadLibrary('./solver/glpk/w64/glpk_4_64.dll')

lp = solver.glp_create_prob()

solver.glp_set_prob_name(lp, c_wchar_p("short"))

solver.glp_set_obj_dir(lp, c_int(2))

solver.glp_add_rows(lp, c_int(2))

solver.glp_set_row_name(lp, c_int(1), c_wchar_p("p"))

solver.glp_set_row_bnds(lp, c_int(1), c_int(3), c_double(0.0), c_double(1.0))

solver.glp_set_row_name(lp, c_int(2), c_wchar_p("q"))

solver.glp_set_row_bnds(lp, c_int(2), c_int(3), c_double(0.0), c_double(2.0))

solver.glp_add_cols(lp, c_int(2))

solver.glp_set_col_name(lp, c_int(1), c_wchar_p("x1"))

solver.glp_set_col_bnds(lp, c_int(1), c_int(2), c_double(0.0), c_double(0.0))

solver.glp_set_obj_coef(lp, c_int(1), c_double(0.6))

solver.glp_set_col_name(lp, c_int(2), c_wchar_p("x2"))

solver.glp_set_col_bnds(lp, c_int(2), c_int(2), c_double(0.0), c_double(0.0))

solver.glp_set_obj_coef(lp, c_int(2), c_double(0.5))

ia = (c_int*5)()

ja = (c_int*5)()

ar = (c_double*5)()

ia[1]=1; ia[2]=1; ia[3]=2; ia[4]=2

ja[1]=1; ja[2]=2; ja[3]=1; ja[4]=2

ar[1]=1.0; ar[2]=2.0; ar[3]=3.0; ar[4]=1.0

solver.glp_load_matrix(lp, c_int(4), ia, ja, ar)

solver.glp_simplex(lp, None);

solver.glp_get_obj_val.restype = c_double

solver.glp_get_col_prim.restype = c_double

z = solver.glp_get_obj_val(lp)

x1 = solver.glp_get_col_prim(lp, c_int(1))

x2 = solver.glp_get_col_prim(lp, c_int(2))

print("z = %g; x1 = %g; x2 = %g\n"%(z, x1, x2))

solver.glp_delete_prob(lp)

solver.glp_free_env()

the script works fine, and right answer output: z = 0.46; x1 = 0.6; x2 = 0.2.

 

But when I tried to constrain x2 as an integer variable, the original problem was changed into a mip problem, the following script cannot output right answer:

from ctypes import *

solver = windll.LoadLibrary('./solver/glpk/w64/glpk_4_64.dll')

lp = solver.glp_create_prob()

solver.glp_set_prob_name(lp, c_wchar_p("short"))

solver.glp_set_obj_dir(lp, c_int(2))

solver.glp_add_rows(lp, c_int(2))

solver.glp_set_row_name(lp, c_int(1), c_wchar_p("p"))

solver.glp_set_row_bnds(lp, c_int(1), c_int(3), c_double(0.0), c_double(1.0))

solver.glp_set_row_name(lp, c_int(2), c_wchar_p("q"))

solver.glp_set_row_bnds(lp, c_int(2), c_int(3), c_double(0.0), c_double(2.0))

solver.glp_add_cols(lp, c_int(2))

solver.glp_set_col_name(lp, c_int(1), c_wchar_p("x1"))

solver.glp_set_col_bnds(lp, c_int(1), c_int(2), c_double(0.0), c_double(0.0))

solver.glp_set_obj_coef(lp, c_int(1), c_double(0.6))

solver.glp_set_col_name(lp, c_int(2), c_wchar_p("x2"))

solver.glp_set_col_bnds(lp, c_int(2), c_int(2), c_double(0.0), c_double(0.0))

solver.glp_set_obj_coef(lp, c_int(2), c_double(0.5))

solver.glp_set_col_kind(lp, c_int(2), c_int(2))

ia = (c_int*5)()

ja = (c_int*5)()

ar = (c_double*5)()

ia[1]=1; ia[2]=1; ia[3]=2; ia[4]=2

ja[1]=1; ja[2]=2; ja[3]=1; ja[4]=2

ar[1]=1.0; ar[2]=2.0; ar[3]=3.0; ar[4]=1.0

solver.glp_load_matrix(lp, c_int(4), ia, ja, ar);

solver.glp_intopt(lp, None)

solver.glp_mip_obj_val.restype = c_double

solver.glp_mip_col_val.restype = c_double

z = solver.glp_mip_obj_val(lp)

x1 = solver.glp_mip_col_val(lp, c_int(1))

x2 = solver.glp_mip_col_val(lp, c_int(2))

print("z = %g; x1 = %g; x2 = %g\n"%(z, x1, x2))

solver.glp_delete_prob(lp)

solver.glp_free_env()

the script ran without exceptions but I got all zero output: z = 0; x1 = 0; x2 = 0. It seems the solver didn’t work.

 

I don’t know why, could you give me some clue? Thx in advance.

 

B.R.

 

Jason

 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]