使用C语言实现单纯形法求解线性规划问题.docx

上传人:b****4 文档编号:5000675 上传时间:2022-12-12 格式:DOCX 页数:13 大小:78.74KB
下载 相关 举报
使用C语言实现单纯形法求解线性规划问题.docx_第1页
第1页 / 共13页
使用C语言实现单纯形法求解线性规划问题.docx_第2页
第2页 / 共13页
使用C语言实现单纯形法求解线性规划问题.docx_第3页
第3页 / 共13页
使用C语言实现单纯形法求解线性规划问题.docx_第4页
第4页 / 共13页
使用C语言实现单纯形法求解线性规划问题.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

使用C语言实现单纯形法求解线性规划问题.docx

《使用C语言实现单纯形法求解线性规划问题.docx》由会员分享,可在线阅读,更多相关《使用C语言实现单纯形法求解线性规划问题.docx(13页珍藏版)》请在冰豆网上搜索。

使用C语言实现单纯形法求解线性规划问题.docx

使用C语言实现单纯形法求解线性规划问题

上机实验报告

班级:

自动化班

专业/方向:

自动化

姓名:

实验成绩

(10分制)

学号:

上机实验名称:

使用C语言实现单纯形法求解线性规划问题

上机时间:

2015年5月20日

上机地点:

信自234

一、实验目的和要求

1、目的:

掌握单纯形算法的计算步骤,并能熟练使用该方法求解线性规划问题。

了解算法程序实现的过程和方法。

2、要求:

使用熟悉的编程语言编制单纯形算法的程序。

独立编程,完成实验,撰写实验报告并总结。

二、实验内容和结果

1、单纯形算法的步骤及程序流程图

(1)、算法步骤

(1)将线性规划化为标准形。

(2)用最快的方法确定一个初始基本可行解X(0)。

当s•t均为“w”形式时,以松驰变量做初始基本变量最快。

(3)求X(0)中非基本变量Xj的检验数g。

若-c0,则停止运算,X(0)=X*(表示最优解),否则转下一步。

(4)①由二k=max{;「j0确定xk进基;

2由xk=min{|aik>0}=—确定x1出基,其中aik称为主兀素;

iaikalk

3利用初等变换将aik化为1,并利用aik将同列中其它元素化为0,得新解X

(1)0

(5)返回(3),直至求得最优解为止。

(2)、程序图

各段代码功能描述:

(1)、定义程序中使用的变量

#include

#include

#definem3/*定义约束条件方程组的个数*/

#definen5/*定义未知量的个数*/

floatM=1000000.0;

floatA[m][n];/*用于记录方程组的数目和系数;*/

floatC[n];/*用于存储目标函数中各个变量的系数*/

floatb[m];/*用于存储常约束条件中的常数*/

floatCB[m];/*用于存储基变量的系数*/

floatseta[m];/*存放出基与入基的变化情况*/

floatdelta]n];/*存储检验数矩阵*/

floatx[n];/*存储决策变量*/

intnum[m];/*用于存放出基与进基变量的情况*/

floatZB=0;/*记录目标函数值*/

(2)、定义程序中使用的函数

voidinput();

voidprint();

intdanchunxing1();

intdanchunxing2(inta);

voiddanchunxing3(inta,intb);

(3)、确定入基变量,对于所有校验数均小于等于0,则当前解为最优解。

intdanchunxing1()

{

inti,k=0;

intflag=0;

floatmax=0;

for(i=0;i

if(delta[i]<=0)

flag=1;

else{flag=0;break;}

if(flag==1)

return-1;

for(i=0;i

if(max

{max=delta[i];k=i;}

}

returnk;

}

(4)、确定出基变量,如果某个大于0的校验数,对应的列向量中所有元素小于等于0,则

线性规划问题无解。

intdanchunxing2(inta)

{

inti,k,j;

intflag=0;

floatmin;

k=a;

for(i=0;i

if(A[i][k]<=0)

flag=1;

else{flag=0;break;}

if(flag==1)

{printf("\n该线性规划无最优解!

\n");return-1;}

for(i=0;i

{

if(A[i][k]>0)

seta[i]=b[i]/A[i][k];

elseseta[i]=M;

}

min=M;

for(i=0;i

{

if(min>=seta[i])

{min=seta[i];j=i;}

}

num[j]=k+1;

CB[j]=C[k];

returnj;

}

(5)、迭代运算,计算新的单纯形表。

voiddanchunxing3(intp,intq)

{

inti,j,c,l;

floattemp1,temp2,temp3;

c=p;/*行号*/

l=q;/*列号*/

temp1=A[c][l];

b[c]=b[c]/temp1;

for(j=0;j

A[c][j]=A[c][j]/temp1;

for(i=0;i

{

if(i!

=c)

if(A[i][l]!

=0)

{

temp2=A[i][l];

b[i]=b[i]-b[c]*temp2;

for(j=0;j

A[i][j]=A[i][j]-A[c][j]*temp2;

}

}

temp3=delta[l];

for(i=0;i

delta[i]=delta[i]-A[c][i]*temp3;

}

(6)、输入函数,输入方程组的系数矩阵、初始基变量的数字代码、方程组右边的值矩阵、目标函数各个变量的系数所构成的系数阵。

voidprint()

{

inti,j=0;

printf("\n

for(i=0;i

{

printf("%8.2f\tX(%d)%8.2f",CB[i],num[i],b[i]);for(j=0;j

printf("%8.2f",A[i][j]);

printf("\n");

}

printf("\n

printf("\t\t\t");

for(i=0;i

printf("\n

}

voidinput()

{

inti,j;/*循环变量*/

intk;

printf("请输入方程组的系数矩阵A(%d行%d列):

\n",m,n);for(i=0;i

printf("\n请输入初始基变量的数字代码num矩阵:

\n");for(i=0;i

printf("\n请输入方程组右边的值矩阵b:

\n");for(i=0;i

seanf("%f",&b[i]);

printf("\n请输入目标函数各个变量的系数所构成的系数阵for(i=0;i

seanf("%f",&C[i]);

for(i=0;i

{

k=num[i]-1;

CB[i]=C[k];

}}

(7)、主函数,调用前面定义的函数。

main()

\n");

\n");

\n");

C:

\n");

{

inti,j=O;

intp,q,temp;

input();

printf("\n\n");

printf("\tCB\tXB\tb\t");

for(i=0;i

printf("X(%d)\t",i+1);

for(i=0;i

x[i]=0;

printf("\n");

while

(1)

{

q=danchunxing1();

if(q==-1)

{

print();

printf("\n所得解已经是最优解!

\n");

printf("\n最优解为:

\n");

for(j=0;j

{

temp=num[j]-1;

x[temp]=b[j];

}

for(i=0;i

{

printf("x%d=%.2f",i+1,x[i]);

ZB=ZB+x[i]*C[i];

}

printf("ZB=%.2f",ZB);

break;

}

print();

p=danchunxing2(q);

printf("\np=%d,q=%d",p,q);

if(q==-1)break;

danchunxing3(p,q);

}}

输入:

(1)、输入方程组的系数矩阵A(3行5列)

(2)、输入初始基变量的数字代码num矩阵

(3)、输入方程组右边的值矩阵b

(4)、输入目标函数各个变量的系数所构成的系数阵C输出:

(1)、输出是否为最优解

(2)、输出最优解为多少

3、使用所编程序求解如下LP问题并给出结果P26例5程序运行结果

丄士1*壬匚站口_占上1_方蛀虫匚二昭A/C七二T-

请输7入方程组的■系数矩阡行P列力

0.00-

■1.00

0.00-

0.20

22

1

0

0.000

4P

0

1

0

05

0

0

1

请输入初始基变量的数字代码num矩阵:

34

5

请输入方程组右边的值矩阵b:

1216

15

请输入目标函数各个变量的系数所构成的系数阵C:

23

0

0

0

CB

XB

b

X

(1)

X

(2)

X(3)

X⑷

X(5)

0.00

X(3)

12.00

2.00

2.00

1.00

0.00

0.00

0.00

X⑷

16.00

4.00

0.00

0.00

1.00

0.00

0.00

X⑸

15.00

0.00

5.00

0.00

0.00

1.00

2.00

3.00

0.00

0.00

0.00

P=2,q=1

0.00

X(3)

6.00

2.00

0.00

1.00

0.00

-0.40

0.00

X⑷

16.00

4.00

0.00

0.00

1.00

0.00

3.00

X

(2)

3.00

0.00

1.00

0.00

0.00

0.20

2.00

0.00

0.00

0.00

-0.60

p=0,q=0

2.00

X

(1)

3.00

1.00

0.00

0.50

0.00

-0.20

0.00

X⑷

4.00

0.00

0.00

-2.00

1.00

0.80

3.00

X

(2)

3.00

0.00

1.00

0.00

0.00

0.20

输出:

所得解已经是最优解!

最优解为:

x1=3.00x2=3.00x3=0.00x4=4.00x5=0.00ZB=15.00

P33例7程序运行结果

请输入方程组的系2数矩阵3.0A(3行50列0:

1.000.000.000.20

100.50-0.2

0-42Q-.-8

01000.0020.00-1.500.000.00

请输入初始基变量的数字代码num矩阵:

3p=1,q=445

请输入方程组右边的值矩阵

b:

oo

1.00

0.00

-0.00

0.25

0.00

30.004

3((5)

5.00

0.00

0.00

-2.50

1.25

1.00

3.00

X

(2)

2.00

0.00

1.00

0.50

-0.25

0.00

请输入目标函数各个变量的系数所构成的系数阵

C:

33-0--0--0

0.000.00-1.50-0.000.00

最优解为:

0.000.00

x1=4.00x2=2.00x3=0.00x4=0.0000=5.003ZB0=18.000

p=0,q=0

3.00

X

(1)

3.00

1.00

0.00

0.50

0.00

-0.20

0.00

X⑷

4.00

0.00

0.00

-2.00

1.00

0.80

输出:

0.00

X(3)

16.00

4.00

0.00

1.00

0.00

0.00

0.00

X(4)

0.00

0.00

0.00

0.00

0.00

0.00

0.00

X(5)

0.00

0.00

0.00

0.00

0.00

0.00

2.003.00

0.00

0.00

0.00

请输入方程组的系数矩阵A(3行5列):

该线性规划无最优解!

[00

00000p=01,q=10000

请输入初始基变量的数字代码

num°矩阵

.0.00

1.00

0.00

0.00

30.004X(4)50.00

0.00

0.00

0.00

0.00

0.00

0.00X(5)0.00

0.00

0.00

0.00

0.00

0.00

请输入方程组右边的值矩阵b:

00-

-1.#J-1.#J-1.#J-1.#J-1.#J

--请输大目标函数各个变量的系数所构成的系数阵C:

r-23000

所得解已经CBI优解XBbX

(1)X

(2)X(3)X(4)X(5)

最优解为:

x1=0.00x2=0.00x3=16.00x4=0.00x5=0.00ZB=-1.#

P34例8程序运行结果输出:

P35例9程序运行结果

请输入方程组的系数矩阵A(3

行5列):

2210

0

120-1

1

0000

0

请输入初始基变量的数字代码

num矩阵:

345

!

8请输入方7程组右边的值矩阵b:

第10页共

12140

请输入目标函数各个变量的系数

所构成的系数阵C:

23

0

0

-M

CB

XB

b

X

(1)

X

(2)

X(3)

X⑷

X(5)

0.00

X⑶

12.00

2.00

2.00

1.00

0.00

0.00

0.00

X⑷

14.00

1.00

2.00

0.00

-1.00

1.00

0.00

X⑸

0.00

0.00

0.00

0.00

0.00

0.00

2.00

3.00

0.00

0.00

0.00

p=0,q=1

3.00

X⑵

6.00

1.00

1.00

0.50

0.00

0.00

0.00

X⑷

2.00

-1.00

0.00

-1.00

-1.00

1.00

0.00

X⑸

0.00

0.00

0.00

0.00

0.00

0.00

-1.00

0.00-

■1.50

0.00

0.00

输出:

所得解已经是最优解!

最优解为:

x1=0.00x2=6.00x3=0.00x4=2.00x5=0.00ZB=18.00

三、实验总结

通过使用C语言实现单纯形法求解线性规划问题和用matlab优化工具箱求解LP问题,使得问题的求解更加简单和容易,而且也更加快速的求解问题,我们也对这两种方法有了更深刻的了解。

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

当前位置:首页 > 求职职场 > 简历

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

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