0

我的任务是创建一个基于 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 年恰好是我的出生年份,但现在这可能并不重要。)

4

2 回答 2

0

证明线性规划问题的解决方案的最优性实际上相当容易。您需要检查解决方案的原始可行性和双重可行性。这种对偶概念在任何有关单纯形法或一般线性规划的工作中都有解释。对于初学者:https ://en.wikipedia.org/wiki/Linear_programming

于 2017-03-30T09:21:03.950 回答
0

要检查结果,您可以使用任何非线性优化方法(例如具有边界约束的准牛顿)。有很多数学包(Octave、MathLab、MathCAD、SciLab 等)可以为您提供帮助。如果您想通过程序代码获得解决方案,请尝试查看MINPACK(https://en.wikipedia.org/wiki/MINPACK

于 2017-03-29T17:59:11.210 回答