单纯性算法的大M法实现程序代码单纯性算法的大M法实现程序代码
单纯性算法的大M法实现 注意:本程序需要一个输入数据的TXT文档,本例中为InputFile.txt,你可以根据需要改一下;
另外,文档格式如下
假如经过松弛变量后的方程为AX=b;求min f=CX=? A为系数矩阵,X 为变量列向量,b为常数列向量
则文档格式为
变量个数
方程个数
F=CX中的C行向量
系数矩阵
常数向量
如:
7
3
0 0 0 -0.75 20 -0.5 6
1 0 0 0.25 -8 -1 9
0 1 0 0.5 -12 -0.5 3
0...
单纯性算法的大M法实现程序代码
单纯性算法的大M法实现 注意:本程序需要一个输入数据的TXT文档,本例中为InputFile.txt,你可以根据需要改一下;
另外,文档格式如下
假如经过松弛变量后的方程为AX=b;求min f=CX=? A为系数矩阵,X 为变量列向量,b为常数列向量
则文档格式为
变量个数
方程个数
F=CX中的C行向量
系数矩阵
常数向量
如:
7
3
0 0 0 -0.75 20 -0.5 6
1 0 0 0.25 -8 -1 9
0 1 0 0.5 -12 -0.5 3
0 0 1 0 0 1 0
0 0 1
本程序采用的是大M法做的
#include
#include
#include
#include
class CSimplex
{
public:
int m_uiConstraintNum; //约束等式数目
int m_uiVariableNum; //记录变量个数
int count; //记录次数
int AddVariableNum; //添加的人工变量个数
double m_dObjectiveValue; //记录目标函数值
double m_vMatrixA[50][20]; //记录系数矩阵A的值
double m_vRightB[20]; //记录等式右边b向量的值
double m_vObjCoffi[50]; //记录从第一个变量开始的所有变量对应的在优
化目标中的系数
double m_vReducedCost[50]; //判别系数
double m_vTheta[20]; //记录Theta
int m_vBaseVariableIndex[20]; //记录基变量的编号
double Solution[50]; //记录解向量
int InPutProblem(); //从文件读入数据
void CalculateReducedCost(); //计算判别系数
void CalculateZ(); //计算目标函数值
int FindIn(); //寻找入基变量编号
void CalculateTheta(); //计算Theta
int FindOut(); //寻找出基变量编号
void RotaTrans(); //以主元旋转变换,进行相应的入基出基操作
int JudgeA(); //判断有无最优解
int JudgeB(); //判断是否为无穷多组解
int JudgeC(); //判断单纯性算法结束
int JudgeD(); //判断有无可行解
int Solve(); //求解
};
int CSimplex::InPutProblem() //从文件读入数据 {
fstream file;
count=1;
AddVariableNum=0;
float i;
int j,k,t,temp1,temp2,temp3;
file.open("InputFile.txt",ios::in,0);
if(!file) return 0;
file>>i;
m_uiVariableNum=(int)i;
file>>i;
m_uiConstraintNum=(int)i;
for(j=0;j>i;
m_vObjCoffi[j]=i;
}
for(j=0;j>i;
m_vMatrixA[j][k]=i;
}
}
for(j=0;j>i;
m_vRightB[j]=i;
m_vBaseVariableIndex[j]=-1;
}
for(j=0;jin))
{
in=i;
}
}
return(in);
}
int CSimplex::FindOut() //寻找出基变量编号
{
int i,out=-1,flag=0;
double temp=10000;
for(i=0;i0)&&(m_vTheta[i]!=1000))
flag++;
if(flag!=0)
{
for(i=0;i0)&&(m_vTheta[i]m_vBaseVariableIndex[out]))
out=i;
}
}
}
if(flag==0)
{
for(i=0;im_uiConstraintNum)
flag=1;
return(flag);
}
int CSimplex::JudgeC() //判断单纯性算法结束 {
int i;
for(i=0;i>i;
return 1;
}
本文档为【单纯性算法的大M法实现程序代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。