LPSolve C++源码库和IDE给出了不同的LP任务求解结果

LPSolve C++ source library and IDE gives different LP task solution results

我有LP任务。问题突然出现了。我使用自动代码从节点和线的两个向量创建 objective 函数、方程和约束,我还使用该方法以 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

在某些论坛上,我读到最好使用 "1E-5" 而不是 "0"" 1000" 而不是 "1.0" 作为我的 objective 函数中的系数。我尝试这样做,并且在求解器 IDE 和我的程序中得到了相同的结果,但是任务中的随机值没有改变结果。
所以,我需要得到像 LPSolve IDE 中的结果(写在最后)但是使用我的程序。如果可能的话,请帮助我。
使用的版本 LPSolve v-5.5.2.3、v-5.5.2.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,程序等。 在这种情况下,当 Y 是负载,X 是发电,Z 是流量时,当负载生成较少时,我们不需要流量到平衡系统,在程序中我有示例中的解决方案,但在 IDE 中也有正确的解决方案.

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

下次我尝试在 objective 函数中找到特殊的constrians。可能对某人有帮助。