我正在研究一些非常大规模的线性规划问题。(矩阵目前约为1000x1000,这些是“迷你”矩阵。)
我以为我的程序运行成功了,但我意识到我得到了一些非常不直观的答案例如,假设我最大化x+y+z受一组约束x+y<10和y+z<5。我运行这个并得到一个最优的解决方案然后,我运行相同的方程,但有不同的约束条件:x+y我已经苦心经营,并保证自己的约束加载正确。
有人知道问题出在哪里吗?
我在关于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解算器进行求解。