运筹学实验单纯形法上机报告Word格式文档下载.docx

上传人:b****1 文档编号:15214482 上传时间:2022-10-28 格式:DOCX 页数:31 大小:1.70MB
下载 相关 举报
运筹学实验单纯形法上机报告Word格式文档下载.docx_第1页
第1页 / 共31页
运筹学实验单纯形法上机报告Word格式文档下载.docx_第2页
第2页 / 共31页
运筹学实验单纯形法上机报告Word格式文档下载.docx_第3页
第3页 / 共31页
运筹学实验单纯形法上机报告Word格式文档下载.docx_第4页
第4页 / 共31页
运筹学实验单纯形法上机报告Word格式文档下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

运筹学实验单纯形法上机报告Word格式文档下载.docx

《运筹学实验单纯形法上机报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《运筹学实验单纯形法上机报告Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。

运筹学实验单纯形法上机报告Word格式文档下载.docx

2.大M法

(1)方法:

在约束条件中,加入人工变量后,要求目标函数不受影响,目标函数中人工变量的系数取–M(M为系统所能表示范围内的一个非常大的值本程序取1000000),其运算过程同单纯形法。

(2)理由:

目标函数实现最大化,就必须将人工变量从基变量中换出,否则目标函数就不可能取得最大化。

三、数据结构及模块设计

1.程序中用到的数据结构:

#defineM20//最大20个变量

#defineN40//40个约束方程

#defineMax1000000//大M

doubleD[M][N];

//系数矩阵

doubleC[M];

//目标函数系数

doubleCb[M];

//基向量系数

doubleB[M];

//约束常数

doubleValue[N];

//检验数

intXb[M];

//基向量

doubleX0[M];

//可行解

intop[M];

//约束方程符号0---"

<

"

、1---"

="

、2---"

>

intm,n;

//矩阵行数、列数

intbegin_n;

//初始变量数

intIn_BaseX=-1;

//进基变量

intin_n=-1;

//进基列标示

intout_m=-1;

//出基行标示

intOut_BaseX=-1;

//出基变量

intbest;

//最优函数返回值

charname[30];

//文件名

intManX_num=0;

//人工变量数目

intManX_list[M];

//人工变量存放数组

2.模块设计:

voidread();

//读取方程子函数

voidprint();

//显示单纯表子函数

voidinit_change();

//初始变换子函数

voidcompute_value();

//计算检验数子函数

intbest_Result();

//判断是否得到最优解子函数

voidin_base();

//进基选子函数

voidout_base();

//出基选择子函数

voidrow_change();

//行变换子函数

四、详细设计

1.文件格式定义

格式:

(行数/约束方程数:

列数/变量数:

mn

(约束矩阵:

符号:

0小于,1等于,2大于B值)

D11D12D13…Dn1op1b1

D21D22D23…Dn2op2b2

….

Dm1D2mDm3…Dnmopmbm

(最大值/最小值:

1最大,2最小)

max/min

目标函数的变量系数:

C1C2C3….Cn

例:

32

0.60.5012000

0.40.104000

00.406000

1

2510

2.voidread()读取约束矩阵、目标函数

voidread(){

FILE*fp;

//文件

inti=0,j=0,k;

fp=fopen(name,"

r"

);

if(fp!

=NULL){//读变量数目和约束方程个数m,n

fscanf(fp,"

%d"

&

m);

n);

}

begin_n=n;

//初始(未经过标准化)变量数置为n,

for(i=0;

i<

m;

i++){//按行读取约束矩阵,约束方程符号,常数值

for(j=0;

j<

n;

j++)//读取约束矩阵

if(fp!

=NULL)

fscanf(fp,"

%lf"

D[i][j]);

else

printf("

error"

if(fp!

=NULL)//读约束方程符号

fscanf(fp,"

op[i]);

else

printf("

=NULL)//读取常数值

B[i]);

=NULL)//读取目标函数类型

Type);

for(k=0;

k<

k++)//读取目标函数变量系数

C[k]);

fclose(fp);

}//voidread()

3.voidprint()单纯形表显示函数

voidprint(){

inti=0,j=0;

voidline_V(int);

//竖线子函数

voidline_R(int);

//横线子函数

voidln();

//换行子函数

voidspace();

//空格子函数

ln();

//第1条直线

line_R(15+n*5);

//显示第1行“C|C1C2C3...”

space(6);

printf("

C"

space(7);

line_V

(1);

i++)

if(C[i]==-Max)

-M"

%5.1lf"

C[i]);

//第2条直线

//显示第2行“CbXbB|X1X2X3...”

CbXbB"

printf("

X%-2d"

i+1);

//第3条直线

//显示第3部分“Cb1Xb1B1|D11D12D13...”

//“Cb2Xb2B2|D21D22D23...”

//“Cb3Xb3B3|D31D32D33...”

//“...”

i++){

if(Cb[i]==-Max)

-M"

%-5.0lf"

Cb[i]);

X%-2d"

Xb[i]+1);

%5.0lf"

B[i]);

line_V

(1);

j++)

D[i][j]);

ln();

//第4条直线

//显示第4行“Value|Value1Value2Value3...”

space(5);

Value"

space(4);

if(Value[i]>

Max/2){//当Value值达到M数量级时,用aM+b表示

intk=(int)(Value[i]/Max);

doublel=Value[i]-k*Max;

if(l>

Max/2){

k++;

l-=Max;

}

if(k==0)

"

elseif(k==1)

M"

%dM"

k);

if(l==0)

elseif(l>

0)

+%-1.0lf"

l);

%-2.0lf"

}

elseif(Value[i]<

-Max/2){//当Value值达到M数量级时,用aM+b表示

if(l<

-Max/2){

k--;

l+=Max;

elseif(k==-1)

elseif(l<

else//正常显示

%4.1lf"

Value[i]);

//第5条直线

//显示第5行“X(0)=(X1,X2,X3...)”

space

(1);

X(0)=("

n-1;

%.2lf,"

X0[i]);

%.1lf"

)"

//第6条直线

}

//**************横线***************

voidline_R(intn){

inti;

-"

//**************竖线***************

voidline_V(intn){

|"

//**************空格***************

voidspace(intn){

//**************换行***************

vo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1