我是LPSolve和工具包的新手。我尝试使用LPSolve IDE缝合4张图像1024x1024图块。为了简化任务,我只使用了瓷砖的x坐标。
-------------------------------
| 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移动一个像素
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;
LPSolve响应&#34;模型是不可能的&#34;,而我认为响应应该是
d1=1
d2=0
d3=0.900000000000091
d4=1
我做错了什么?
答案 0 :(得分:0)
您正在遇到扩展问题。 lpsolve
有很多。
如果你做了一个小小的改动,你可以自己看看: 我在最后两个约束中替换了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告诉你发生了什么。
从最后一行引用:
结论。你应该总是做一些缩放。它开始的时候 你设计模型。额外的缩放可以由其中一个完成 lp_solve的缩放选项。
希望有所帮助。