2014-05-23 7 views
2

저는 LPSolve 및 툴킷을 처음 사용합니다. LPSolve IDE를 사용하여 4 개의 이미지 1024x1024 타일을 스티치하려고합니다. 작업을 단순화하기 위해 타일의 x 좌표 만 사용합니다. 나는 다음과 같은 방법으로 관계를 정의하면 내가 다음에 모델을 변경하는 경우LPSolve로 2D 이미지 모자이크를 stich하는 방법

------------------------------- 
    | Tile1   |Tile2   | 
    |    |    | 
    |    |    | 
    |    |    | 
    -------------------------------- 
    | Tile3   | Tile4   | 
    |    |    | 
    |    |    | 
    |    |    | 
    -------------------------------- 

min: +d1 +d3 +d4 +d6; 

    -x1 +x2 -1024 +d1 <=0.1; 
    -x1 +x2 -1024 +d1 >=-0.1; 
    -x1 +x3 +1 +d2 <=0.1; 
    -x1 +x3 +1 +d2 >=-0.1; 
    -x2 +x4  +d3 <=0.1; 
    -x2 +x4  +d3 >=-0.1; 
    -x3 +x4 -1024 +d4 <=0.1; 
    -x3 +x4 -1024 +d4 >=-0.1; 
    x1=1024; 
    x2=2048; 
    x3=1023; 
    x4=2047; 

LPSolve는 올바른 결과

d1=0 
    d2=0 
    d3=0.900000000000091 
    d4=0 
    x1=1024 
    x2=2048 
    x3=1023 
    x4=2047 

을 생산, 즉하여 Tile4 이동 1 화소

min: +d1 +d2 +d3 +d4; 

    -x1 +x2 -1024 +d1 <=0.1; 
    -x1 +x2 -1024 +d1 >=-0.1; 
    -x1 +x3 +1 +d2 <=0.1; 
    -x1 +x3 +1 +d2 >=-0.1; 
    -x2 +x4  +d3 <=0.1; 
    -x2 +x4  +d3 >=-0.1; 
    -x3 +x4 -1024 +1 +d4 <=0.1; 
    -x3 +x4 -1024 +1 +d4 >=-0.1; 
    x1=1024; 
    x2=2048; 
    x3=1023; 
    x4=2047; 
, 나는 응답 내가 뭘 잘못

d1=1 
    d2=0 
    d3=0.900000000000091 
    d4=1 

해야한다고 생각하면서 0

LPSolve는 "모델은 불가능하다"로 응답?

답변

0

스케일링 문제가 발생했습니다. lpsolve에는 그 중 많은 수가 있습니다. 당신은 작은 변화를 만들 경우

당신은 자신을 위해 그것을 볼 수 있습니다 나는 지난 2 개 제약에 X3와 X4에 대한 값을 대체 :

min: +d1 +d3 +d4 +d2; 

    -x1 +x2 - 1024 +d1 <=0.1; 
    -x1 +x2 - 1024 +d1 >=-0.1; 
    -x1 +x3 +1 +d2 <=0.1; 
    -x1 +x3 +1 +d2 >=-0.1; 
    -x2 +x4  +d3 <=0.1; 
    -x2 +x4  +d3 >=-0.1; 
    -1023 + 2047 -1024 + 1 + d4 <= 0.1; 
    -1023 + x4 -1024 + 1 + d4 >=-0.1; 
    x1=1024; 
    x2=2048; 
    x3=1023; 
    x4=2047; 

이 경고/오류 얻을 :

initialize_solution: Invalid rebounding; variable 10 at refact 0, iter 0 
check_solution: Variable d4 =     0 is above its upper bound    -0.9 

Seriously low accuracy found ||*|| = 0.9 (rel. error 0.473684) 
lp_solve failed 

것은 나 자신을 대체하려고하면, 반면 :

min: +d1 +d3 +d4 +d2; 

    -x1 +x2 - 1024 +d1 <=0.1; 
    -x1 +x2 - 1024 +d1 >=-0.1; 
    -x1 +x3 +1 +d2 <=0.1; 
    -x1 +x3 +1 +d2 >=-0.1; 
    -x2 +x4  +d3 <=0.1; 
    -x2 +x4  +d3 >=-0.1; 
// -1023 + 2047 -1024 + 1 + d4 <= 0.1; 
// -1023 + x4 -1024 + 1 + d4 >=-0.1; 
    d4 <= 0.1; 
    d4 >-0.1; 
    x1=1024; 
    x2=2048; 
    x3=1023; 
    x4=2047; 

우리가 얻을

Actual values of the variables: 
d1        0 
d3       0.9 
d4       -0.1 
d2        0 
x1       1024 
x2       2048 
x3       1023 
x4       2047 

This link는 무슨 일이 일어나고 있는지를 알려줍니다 : 솔루션은 더 불가능 성이 없습니다.

이 마지막 줄에서 인용 : 도움이

Conclusion. You should always do some sort of scaling. It starts when you design the model. Extra scaling can be accomplished by one of the scaling options of lp_solve.

희망.