python - GLPK线性规划

标签 python python-2.7 linear-programming glpk

我正在研究一些非常大规模的线性规划问题。 (矩阵目前大约为 1000x1000,这些是“迷你”矩阵。)

我以为我的程序运行成功了,只是我意识到我得到了一些非常不直观的答案。例如,假设我要根据一组约束 x+y<10 和 y+z <5 最大化 x+y+z。我运行它并获得最佳解决方案。然后,我运行相同的方程但具有不同的约束:x+y<20 和 y+z<5。然而在第二次迭代中,我的最大化减少了!

我已经煞费苦心地检查并确保约束正确加载。

有人知道问题出在哪里吗?

我在有关 lpx_check_kkt 的文档中找到了一些内容,它似乎可以告诉您您的解决方案何时可能是正确的或高置信度(或低置信度),但我不知道如何使用它。

我尝试并收到错误消息 lpx_check_kkt not defined。

我添加了一些代码作为附录,希望有人能发现错误。 这样做的结果是它声称已找到最佳解决方案。然而,每次我提高上限时,它都会变得不太理想。
我已经确认我的界限在上升而不是下降。

    size = 10000000+1
    ia = intArray(size)
    ja = intArray(size)
    ar = doubleArray(size)
    prob = glp_create_prob()

    glp_set_prob_name(prob, "sample")
    glp_set_obj_dir(prob, GLP_MAX)
    glp_add_rows(prob, Num_constraints)
    for x in range(Num_constraints):
            Variables.add_variables(Constraints_for_simplex)
            glp_set_row_name(prob, x+1, Variables.variers[x])
            glp_set_row_bnds(prob, x+1, GLP_UP, 0, Constraints_for_simplex[x][1])
            print 'we set the row_bnd for', x+1,' to ',Constraints_for_simplex[x][1]
    glp_add_cols(prob, len(All_Loops))
    for x in range(len(All_Loops)):
            glp_set_col_name(prob, x+1, "".join(["x",str(x)]))
            glp_set_col_bnds(prob,x+1,GLP_LO,0,0)
            glp_set_obj_coef(prob,x+1,1)
    for x in range(1,len(All_Loops)+1):
            z=Constraints_for_simplex[0][0][x-1]
            ia[x] = 1; ja[x] = x;  ar[x] = z
    x=len(All_Loops)+1
    while x<Num_constraints + len(All_Loops):
    for y in range(2, Num_constraints+1):
                    z=Constraints_for_simplex[y-1][0][0]
                    ia[x] = y; ja[x] =1 ; ar[x] = z
                    x+=1
    x=Num_constraints+len(All_Loops)
    while x <len(All_Loops)*(Num_constraints-1):
            for z in range(2,len(All_Loops)+1):
                    for y in range(2,Num_constraints+1):
                            if x<len(All_Loops)*Num_constraints+1:
                                    q = Constraints_for_simplex[y-1][0][z-1]
                                    ia[x] = y ; ja[x]=z; ar[x] = q
                                    x+=1


    glp_load_matrix(prob, len(All_Loops)*Num_constraints, ia, ja, ar)
    glp_exact(prob,None)
    Z = glp_get_obj_val(prob)

最佳答案

首先使用不同的求解器求解有问题的实例并检查目标函数值。如果您可以将模型导出为 .mps 格式(抱歉,我不知道如何使用 GLPK 执行此操作),则可以将 mps 文件上传到 http://www.neos-server.org/neos/solvers/index.html并用几种不同的 LP 求解器求解。

关于python - GLPK线性规划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982823/

相关文章:

python - TypeError : must be string or buffer, not int:执行 sqlAlchemy 查询时

python - 计算组中元素之间的差异

python - 有没有一种Python式的方法将基于范围的分段函数分组为单个函数?

接收和发出返回值的 Python 协程

matlab - 线性规划约束 : multiplication of optimization variables

python - Tensorflow:保留张量最大条目的 10%

python - 如何在 PySide 应用程序中隐藏 CMD 窗口

java - Gurobi 和 java 和 empty 解决方案

java - 整数线性规划 Java : Multiple Open Source and Commercial tools are available. 使用哪一个?

python - 使用列表列表中特定索引处的值进行操作