测试Simplex(线性规划)计算输出的方法

时间:2017-03-29 17:25:29

标签: c++ testing linear-programming data-integrity simplex-algorithm

我的任务是创建一个基于网络的机器,使用线性编程技术解决实际问题,特别是目前,Danzig的Simplex方法。考虑到这一点,我发现了一个相当漂亮的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年恰好是我的出生年份,但现在可能并不重要。)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

相关问题