单纯形算法的c语言实现
利用五一的假期,把运筹学中的单纯形算法写了一下,有些粗略,但基本可用,只对几个确定有解的简单样本进行了试算,没有对无解的情况进行测试。
本程序把迭代时入基变量,出基变量,出基变量所在的行都作了打印输出,实施行变换后的矩阵也进了输出,适合学生拿来练手,或教师做教案时用。
文章的最后,有输入文件的说明。
闲话少说,直接上代码。
samplex.c
#include <stdio.h>
#include <stdlib.h>
#define BUFFSIZE 8192
FILE * file,*fileOut;
int m,n;
double *A; //m*(n+1)matrix,Constraint Equation Matrix
int* baseVariableOrder ;//m个
double *objectiveFunctionCoefficient; //n个
double *augmentFeasibleSolution;
char buff[BUFFSIZE];
double *checkData;
int inVariable,outRow,outVariable;
double *checkRatio;
double maxCheckData;
void printObjctiveFunction();
void adjust();
int main(){
file = fopen("input.txt","r");
if (file==NULL){
printf("Can't find input file!");
exit(1);
}
fileOut = fopen("output.txt","w");
if (file==NULL){
printf("Can't Create output file!");
exit(1);
}
for ( int i = 0; i < BUFFSIZE; i++ ){
buff[i] = 0;
}
fgets( buff , BUFFSIZE , file );
sscanf( buff , "%d %d", &m, &n );
printf( "\nconstraint equation rows are %d, the variables are %d\n", m , n );
fprintf(fileOut,"\nconstraint equation rows are %d, the variables are %d\n", m , n );
A = (double *)calloc(sizeof(double),m*(n+1));
objectiveFunctionCoefficient = (double *)calloc(sizeof(double),n);
baseVariableOrder = (int *)calloc(sizeof(int),m);
augmentFeasibleSolution = (double *)calloc(sizeof(double),n);
checkData = (double *)calloc(sizeof(double),n);
checkRatio = (double *)calloc(sizeof(double),m);
//objectiveFunctionCoefficient
fgets( buff , BUFFSIZE , file );
char *start,*endptr ;
start = buff;
for ( int i = 0; i < n; i ++ ){
objectiveFunctionCoefficient[i] = strtod( start,&endptr);
start = endptr;
}
printObjctiveFunction();
//baseVariableOrder
//asign intial base variabbles and give the sequence
//the base matrix must be identity matrix!
fgets( buff , BUFFSIZE , file );
start = buff;
endptr = NULL;
for ( int i = 0; i < m; i ++ ){
baseVariableOrder[i] = strtod( start,&endptr);
start = endptr;
}
//A-constraint Matix
for</