나는 매우 큰 규모의 선형 프로그래밍 문제를 연구 중이다. (매트릭스는 현재 대략 1000x1000이고 이것들은 '미니'입니다.)GLPK 선형 프로그래밍
나는 프로그램을 성공적으로 실행했다고 생각했지만, 나는 매우 직관적이지 않은 해답을 얻고 있다는 것을 깨달았습니다. 예를 들어, x + y + z를 최대화하고 x + y가 < 10이고 y + z가 < 인 경우를 가정 해 봅니다. 5 이것을 실행하고 최적의 솔루션을 얻습니다. 그런 다음 같은 방정식을 실행하지만 다른 제약 조건을 사용합니다. x + y < 20 및 y + z < 5. 두 번째 반복에서 내 최대화가 감소합니다!
제약 조건이 올바르게로드되고 있음을 확인하는 데 어려움이 있습니다.
문제가 무엇인지 아는 사람이 있습니까?
lpx_check_kkt에 대한 설명서에서 해결책이 정확하거나 높은 신뢰성 (또는 그 신뢰도가 낮을 수 있음)에 대해 알게되었지만 사용 방법을 모르겠습니다.
lpx_check_kkt 정의되지 않은 오류 메시지가 표시됩니다.
누군가가 오류를 찾을 수 있기를 바라며 부록으로 일부 코드를 추가하려고합니다. 이 결과는 최적의 솔루션이 발견되었다고 주장합니다. 그리고 제가 상한을 올릴 때마다, 그것은 덜 최적이됩니다.
나는 나의 경계가 올라가고 있고 아래로 내려 오지 않았 음을 확인했다. 다른 해법으로 문제 인스턴스를 해결하고 목적 함수 값을 확인하여
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)
객관적인 방향을 최대화로 설정 했습니까? 기본값은 최소화이며, 말하지 않은 것처럼 보입니다. 그렇지 않으면 최소한 목표가 왜 감소하는지 설명 할 수 있습니다. – Ali
나는 알고있다 - 나는 같은 것을 생각했다! 하지만 나는 체크하고 트리플 체크했다. 그것은 나에게 너무 기괴합니다. 코드는 다소 번거롭기 때문에 게시하지 않은 이유는 무엇입니까? 나는 틀린 일을해야한다고 느낍니다. 유용한 코드 조각을 게시 할 수 있는지 확인합니다. –