我有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
答案 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中也有正确的解决方案。
因此,在您认为求解器写错解之前,您需要检查模型,目标函数,方程和约束,并尝试用约束替换结果值以获得满意的方程或尝试解决双重问题。
下次我尝试找到目标功能的特殊人员。可能它可以帮助某人。