我的任务是创建一个基于 Web 的机器,用于使用线性规划技术解决现实世界的问题,特别是目前,Danzig 的单纯形法。考虑到这一点,我发现了一段相当漂亮的 C++ 代码来计算结果,即使在这台特别低端的机器上也有相当大的速度。
但是,我目前只有控制台输出本身证明结果接近给定问题的正确解决方案。如果人们被要求相信结果表明任何比某些数字可以在计算机屏幕上闪烁更重要的东西,那么这是一个问题。
整个程序的全部细节我就不说了,因为它相当长,但这里是负责获取数据的函数,仅供参考:
void Data() {
double R1, R2;
char R;
int I, J;
printf("\n LINEAR PROGRAMMING\n\n");
printf(" MAXIMIZE (Y/N) ? "); scanf("%c", &R);
printf("\n NUMBER OF VARIABLES OF ECONOMIC FUNCTION ? "); scanf("%d", &NV);
printf("\n NUMBER OF CONSTRAINTS ? "); scanf("%d", &NC);
if (R == 'Y' || R == 'y')
R1 = 1.0;
else
R1 = -1.0;
printf("\n INPUT COEFFICIENTS OF ECONOMIC FUNCTION:\n");
for (J = 1; J <= NV; J++) {
printf(" #%d ? ", J); scanf("%lf", &R2);
TS[1][J + 1] = R2 * R1;
}
printf(" Right hand side ? "); scanf("%lf", &R2);
TS[1][1] = R2 * R1;
for (I = 1; I <= NC; I++) {
printf("\n CONSTRAINT #%d:\n", I);
for (J = 1; J <= NV; J++) {
printf(" #%d ? ", J); scanf("%lf", &R2);
TS[I + 1][J + 1] = -R2;
}
printf(" Right hand side ? "); scanf("%lf", &TS[I + 1][1]);
}
printf("\n\n RESULTS:\n\n");
for (J = 1; J <= NV; J++) TS[0][J + 1] = J;
for (I = NV + 1; I <= NV + NC; I++) TS[I - NV + 1][0] = I;
}
如果需要,我还可以包括数据透视表、公式化和优化函数。
我想询问可以采用的具体技术,以确保在给定一组系数和约束的情况下,C++ 程序正确返回经济函数(稍后当数据输出到网络,但当我来到它时,我会越过那座桥)。
(出于归属原因,我注意到上面的代码是让-皮埃尔·莫罗(Jean-Pierre Moreau)在 1982 年创建的。巧合的是,1982 年恰好是我的出生年份,但现在这可能并不重要。)