文章目录
利用c++实现单纯形表算法
0.背景
对于线性规划问题,使用单纯形法进行表上作业所得到的表格。直接用公式进行单纯形法的迭代计算是很不方便的,其中最复杂的是进行基变换,但施行基变换所用的实际上是消元法。由线性代数知道,用消元法解线性方程组可在增广矩阵上利用行初等变换进行计算。因此,我们可以将单纯形法的全部计算过程在一个类似增广矩阵的数表上进行,这种表格称为单纯形表(simplex table)。
1.原理
略(不是重点)
2.具体代码
由于写代码的时候打算顺便复习一下 面向对象的编程,所以就写了个类,来实现单纯形法。实际上不用类,写几个函数也是完全可以实现的。
还有就是因为核心是算法,就没有在输入上过多纠结,直接提前在代码中设定好行和列了。
#include<iostream>
using namespace std;
typedef long double ld;
const int ROW = 4;
const int COLUMN = 6;
class dan_chun_xing_table
{
private:
ld table[ROW][COLUMN];
int row;
int column;
public:
bool if_best;
bool if_gg;
dan_chun_xing_table();
bool best_judge();
bool gg_judge();
int row_judge(int column);
int column_judge();
void change(int row, int column);
void show();
~dan_chun_xing_table();
};
int main()
{
bool Continue = 1;
while(Continue)
{
dan_chun_xing_table table1;
int times = 0;
while(!(table1.if_best))
{
times++;
cout<<"迭代次数"<<times<<endl;
if(table1.if_gg)
{
cout<<"无界"<<endl;
goto lable1;
}
int column = table1.column_judge();
int row;
if (column != -1