📄 mysimplex.h
字号:
#ifndef mySimplex_h__
#define mySimplex_h__
#include<iostream>
#include<fstream>
#include<math.h>
#include<iomanip>
#define BOUND 100
using namespace std;
class MySimplex
{
public:
MySimplex();
void compute();
void initial();
~MySimplex();
private:
void printMatrix(void);
void jckxj();//基础可行解
int rj();//规划模型的系数是否没有负数
int Min();
int JustArtificial();//检查人工变量是否有正,确定原问题有无最优解
int Check(int in);//选取出基变量之前的检验
int SearchOut(int *temp,int in);//出基变量
void Mto(int in,int temp);
void JustUpper();
void ChangeForm();
void Be(int temp,int in);//初等变换。出基变量的行数temp,入基变量的列数in
void Achange(int in,int out);//出基入基转换in--入基列数,out--出基列数
void JudgeNegative();
void Result();
void PrintResult();
void Merge(double nget[][BOUND],double nlet[][BOUND],double net[][BOUND],double b[]);
void ProcessA();//初始a[]
void InputFile();
void Input(double b[],int code[]);
void Xartificial();//消去人工变量
void Process(double c[][BOUND],int row,int vol);
void Start(double b[],int code[]);
int Simplix();//单纯形法
long gcd (long m,long n);
double gcd (double m,double n);
double lcm (double m,double n);
long lcm (long m,long n);
int AllInt(double *x);
void DeleteArtificial(void);
int SelectUnint(void);
void AdjustIt(int unInt,double *just);
//matrix--矩阵方程,其中最后一行是规划模型;x--解向量
double matrix[BOUND][BOUND],x[BOUND];
int code[BOUND];//输入不等式符号标记(0:<=,1:=,2:>=)
double b[BOUND];//表示限制条进的常数项
int a[BOUND];//a--前面m个是非基础的解变量表示为0,后面是基础的解变量表示为1
int m,n,s,type;//m--添加变量之前的原始变量个数,n--矩阵行界,s--矩阵列界也就是添加变量之后的变量个数解变量的个数,type--1为最大0为最小
//indexe--剩余变量的个数,x[j]从m到m+indexe是剩余变量;indexl--松弛变量的个数,x[i]从m+indexe到m+indexe+indexl是松弛变量;indexg--人工变量的个数x[i]从m+indexe+indexl到s是人工变量;
int indexe;//剩余变量个数
int indexl;//人工变量个数
int indexg;//人工变量个数
int indexe2;//割平面法迭代时的新增剩余变量个数
int selectinput;//刚开始输入提示选项
/////////////////////////////////
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -