计算机算法设计与分析:线性规划问题和单纯形算法

第1关:单纯性算法解一般线性方程组

任务描述
本关任务:编写一个利用两阶段单纯性算法求一般线性规划的程序。

相关知识
单纯形算法的第1步:选出使目标函数增加的非基本变量作为入基变量。
查看单纯形表的第 1 行(也称之为z行)中标有非基本变量的各列中的值。
选出使目标函数增加的非基本变量作为入基变量。

单纯形算法的第2步:选取离基变量。
在单纯形表中考察由第 1 步选出的入基变量所相应的列。
在一个基本变量变为负值之前,入基变量可以增到多大。
如果入基变量所在的列与基本变量所在行交叉处的表元素为负数,那么该元素将不受任何限制,相应的基本变量只会越变越大。
如果入基变量所在列的所有元素都是负值,则目标函数无界,已经得到了问题的无界解。
如果选出的列中有一个或多个元素为正数,要弄清是哪个数限制了入基变量值的增加。
受限的增加量可以用入基变量所在列的元素(称为主元素)来除主元素所在行的“常数列”(最左边的列)中元素而得到。所得到数值越小说明受到限制越多。
应该选取受到限制最多的基本变量作为离基变量,才能保证将入基变量与离基变量互调位置后,仍满足约束条件。

单纯形算法的第3步:转轴变换。
转轴变换的目的是将入基变量与离基变量互调位置。
给入基变量一个增值,使之成为基本变量;
修改离基变量,让入基变量所在列中,离基变量所在行的元素值减为零,而使之成为非基本变量。

单纯形算法的第4步:转回并重复第1步,进一步改进目标函数值。
不断重复上述过程,直到z行的所有非基本变量系数都变成负值为止。

编程要求

你可能感兴趣的:(Educoder实训,c++)