LPSolve C ++源库和IDE提供不同的LP任务解决方案结果

时间:2016-06-30 08:36:29

标签: c++ lpsolve

我有LP任务。这个问题突然出现了。我使用自动代码从节点和线的两个向量创建目标函数,方程和约束,我也使用LPSolve格式创建我的tas代码的方法并将其写入文件。
例如:

/* Objective function */
max:  +y4 +y5 +y6;

/* Constraints */
n1: +x4 -y4 -z4_5_4 -z4_6_5 +z5_4_8 +z6_4_9 = 0;
n2: +x5 -y5 +z4_5_4 -z5_6_6 +z6_5_7 -z5_4_8 +z6_5_10 -z5_6_11 = 0;
n3: +x6 -y6 +z4_6_5 +z5_6_6 -z6_5_7 -z6_4_9 -z6_5_10 +z5_6_11 = 0;

/* Variable bounds */
x4 <= 16210;
x5 <= 16600;
x6 <= 17950;
y4 <= 15000;
y5 <= 15000;
y6 <= 15000;
z4_5_4 <= 2000;
z4_6_5 <= 2000;
z5_6_6 <= 1000;
z6_5_7 <= 1000;
z5_4_8 <= 2000;
z6_4_9 <= 2000;
z6_5_10 <= 1000;
z5_6_11 <= 1000;

在文件中创建和编写方程后,我执行求解器:

int result = solve(lp);

通常对于具有随机值的任务,我得到了这样的结果:

Var-s    Result
         45000
x4       15000
x5       15000
x6       15000
y4       15000
y5       15000
y6       15000
z4_5_4   0
z4_6_5   0
z5_4_8   0
z5_6_11  0
z5_6_6   0
z6_4_9   0
z6_5_10  0
z6_5_7   0

但是在LPSolve IDE中,我得到了这样的结果(我认为它的结果非常好):

Var-s    Result
         45000
x4       16210
x5       16600
x6       12190
y4       15000
y5       15000
y6       15000
z4_5_4   400
z4_6_5   810
z5_4_8   0
z5_6_11  1000
z5_6_6   1000
z6_4_9   0
z6_5_10  0
z6_5_7   0

在某些论坛上,我认为最好使用&#34; 1E-5&#34; 而不是&#34; 0&#34; &#34; 1000&#34; 而不是&#34; 1.0&#34; 作为我的目标函数中的系数。我尝试这样做,我在求解器IDE和我的程序中得到了相同的结果,但结果没有改变任务中的randome值。
所以,我需要得到像LPSolve IDE(最后的wroten)的结果,但使用我的程序。如果有可能,请帮助我。
已使用的版本LPSolve v-5.5.2.3,v-5.5.2.0

1 个答案:

答案 0 :(得分:0)

所以,我和一些人进行了交谈,他们多次使用LPSolve并且知道一些陷阱。在我的问题中,我有方程和约束,如果我们将x,y,z未知值替换为所得到的解,则方程式将满足。

/* Constraints */
n1: +x4 -y4 -z4_5_4 -z4_6_5 +z5_4_8 +z6_4_9 = 0;
n2: +x5 -y5 +z4_5_4 -z5_6_6 +z6_5_7 -z5_4_8 +z6_5_10 -z5_6_11 = 0;
n3: +x6 -y6 +z4_6_5 +z5_6_6 -z6_5_7 -z6_4_9 -z6_5_10 +z5_6_11 = 0;

/* satisfied equations */
n1: +15000 -15000 -0 -0 +0 +0 = 0;
n2: +15000 -15000 +0 -0 +0 -0 +0 -0 = 0;
n3: +15000 -15000 +0 +0 -0 -0 -0 +0 = 0;

LPSolve将找到最佳解决方案,并将在IDE,programm等中编写 几种不同的解决方案 。 在Y负载的情况下,X是生成,Z是流,当负载生成较少时,我们不需要流向平衡系统,在程序中我有解决方案,但在IDE中也有正确的解决方案。

因此,在您认为求解器写错解之前,您需要检查模型,目标函数,方程和约束,并尝试用约束替换结果值以获得满意的方程或尝试解决双重问题。

下次我尝试找到目标功能的特殊人员。可能它可以帮助某人。