Hello help-glpk,

I can't find a mailing list for the python-glpk binding[1], so I
figured I could ask my question here since this library makes the code
look very much like C.

I want to formulate a small LP problem (3 variables, 3 constraints)
and to write it on disk. Attached as "expected.lp" is what I want, as
"obtained.lp" is what my code produces, and as "glpk_mip.py" is the
code itself. At line 18, I use glp_set_col_kind(prob, 3, GLP_IV) to
make the variable z an integer variable. However, this variable is
reported as "general" in obtained.lp. Should you read this code as C,
would I be missing something?

[1]: http://www.dcc.fc.up.pt/~jpp/code/python-glpk/

Regards,
Christophe-Marie

Attachment: expected.lp
Description: Binary data

Attachment: obtained.lp
Description: Binary data

import glpk.glpkpi as glpk

# PROBLEM
prob = glpk.glp_create_prob()
glpk.glp_set_prob_name(prob, "mip")

# VARIABLES
glpk.glp_add_cols(prob, 3)
# 0 <= x <= 4, continuous
glpk.glp_set_col_name(prob, 1, "x")
glpk.glp_set_col_bnds(prob, 1, glpk.GLP_DB, 0.0, 4.0)
# -1 <= y <= 1, continuous
glpk.glp_set_col_name(prob, 2, "y")
glpk.glp_set_col_bnds(prob, 2, glpk.GLP_DB, -1.0, 1.0)
# 0 <= z, integer
glpk.glp_set_col_name(prob, 3, "z")
glpk.glp_set_col_bnds(prob, 3, glpk.GLP_LO, 0.0, 0.0)
glpk.glp_set_col_kind(prob, 3, glpk.GLP_IV)

# OBJECTIVE
glpk.glp_set_obj_coef(prob, 1, 1.0)
glpk.glp_set_obj_coef(prob, 2, 4.0)
glpk.glp_set_obj_coef(prob, 3, 9.0)

# CONSTRAINTS
glpk.glp_add_rows(prob, 3)
# c1: x + y <= 5
l = 2
ind = glpk.intArray(l + 1)
val = glpk.doubleArray(l + 1)
ind[1] = 1; ind[2] = 2;
val[1] = 1.0; val[2] = 1.0;
glpk.glp_set_mat_row(prob, 1, l, ind, val)
glpk.glp_set_row_bnds(prob, 1, glpk.GLP_UP, 0.0, 5.0)
glpk.glp_set_row_name(prob, 1, "c1")
# c2: x + z >= 10
l = 2
ind = glpk.intArray(l + 1)
val = glpk.doubleArray(l + 1)
ind[1] = 1; ind[2] = 3;
val[1] = 1.0; val[2] = 1.0;
glpk.glp_set_mat_row(prob, 2, l, ind, val)
glpk.glp_set_row_bnds(prob, 2, glpk.GLP_LO, 10.0, 0.0)
glpk.glp_set_row_name(prob, 2, "c2")
# c3: -y + z == 7.5
l = 2
ind = glpk.intArray(l + 1)
val = glpk.doubleArray(l + 1)
ind[1] = 2; ind[2] = 3;
val[1] = -1.0; val[2] = 1.0;
glpk.glp_set_mat_row(prob, 3, l, ind, val)
glpk.glp_set_row_bnds(prob, 3, glpk.GLP_FX, 7.5, 7.5)
glpk.glp_set_row_name(prob, 3, "c3")

#write problem
glpk.glp_write_lp(prob, None, "obtained.lp")

# delete it
del prob
_______________________________________________
Help-glpk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to