java - [GLPK][Java] 整数变量问题

标签 java linear-programming glpk

我正在使用 Glpk java,我必须解决这个问题(原始)

\* Problem: Branch and Bound Problem *\

Maximize
 z: + 0.5 x1 + 0.5 x2 + 0.333333333333333 x3 + 0.142857142857143 x4

Subject To
 c1: + 14 x4 + 31 x3 + 36 x2 + 45 x1 <= 100

Generals
 x1
 x2
 x3
 x4

End

我得到了这个结果

z = 1.3888888888888888
x1 = 0.0
x2 = 2.7777777777777777
x3 = 0.0
x4 = 0.0

但我只想要整数解决方案。 我所有的列都设置为

GLPK.glp_set_col_kind(lp, column, GLPKConstants.GLP_IV);

我用以下方法解决了这个问题:(编辑)

public void solve_prim(){ 
        GLPK.glp_write_lp(lp,
                null,
                "lp.txt");
    parm = new glp_smcp();
    GLPK.glp_init_smcp(parm);

    ret = GLPK.glp_simplex(lp, parm);

    // Retrieve solution
    if (ret == 0) {
        write_lp_solution_prim(lp);
    } else {
        System.out.println("The problem could not be solved");
    }

    // Free memory
    GLPK.glp_delete_prob(lp);
}

但我总是有分数解。 有人有什么想法吗?

最佳答案

ret = GLPK.glp_simplex(lp, parm);

这调用 LP 求解器。您将得到分数结果。要获得整数结果,您需要调用 MIP 求解器:

ret = GLPK.glp_intopt(lp, parm);

关于java - [GLPK][Java] 整数变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48672837/

相关文章:

java - Connection.setAutoCommit(true) 是否适用于 SQL 存储过程和函数?

java - 如何启用 Hibernate 自动 ddl 表创建?

java - ojAlgo 线性规划求解器的速度

binary - 在 GLPK 中添加二进制变量

java - 标签liferay-ui :include is missing on liferay 6. 2

python - 下面的 LP 代码哪里出错了?

algorithm - 资源配置-匹配

python - glpk.LPX 向后兼容性?

linear-programming - 如何在GLPK中为变量编写if条件?

java - 读取.txt文档并在Java中进行编辑时出现问题