文档库 最新最全的文档下载
当前位置:文档库 › 使用C语言实现单纯形法求解线性规划问题

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

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

上机实验报告

一、实验目的和要求

1、目的:

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

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

2、要求:

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

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

二、实验内容和结果

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

(1)、算法步骤

(2)、程序图

2、单纯形算法程序的规格说明

各段代码功能描述:

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

#include

#include

#define m 3 /*定义约束条件方程组的个数*/ #define n 5 /*定义未知量的个数*/

float M=1000000.0;

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

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

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

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

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

float delta[n]; /*存储检验数矩阵*/

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

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

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

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

void input();

void print();

int danchunxing1();

int danchunxing2(int a);

void danchunxing3(int a,int b);

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

{

int i,k=0;

int flag=0;

float max=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;}

}

return k;

}

(4)、确定出基变量,如果某个大于0的校验数,对应的列向量中所有元素小于等于0,则线性规划问题无解。

int danchunxing2(int a)

{

int i,k,j;

int flag=0;

float min;

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];

else seta[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];

return j;

}

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

void danchunxing3(int p,int q)

{

int i,j,c,l;

float temp1,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)、输入函数,输入方程组的系数矩阵、初始基变量的数字代码、方程组右边的值矩阵、目标函数各个变量的系数所构成的系数阵。

void print()

{

int i,j=0;

printf("\n--------------------------------------------------------------------------\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--------------------------------------------------------------------------\n"); printf("\t\t\t");

for(i=0;i

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

printf("\n--------------------------------------------------------------------------\n"); }

void input()

{

int i,j; /*循环变量*/

int k;

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

for(i=0;i

for(j=0;j

scanf("%f",&A[i][j]);

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

for(i=0;i

scanf("%d",&num[i]);

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

for(i=0;i

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

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

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

for(i=0;i

delta[i]=C[i];

for(i=0;i

{

k=num[i]-1;

CB[i]=C[k];

}}

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

main()

{

int i,j=0;

int p,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问题并给出结果。

运行结果

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

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

上机实验报告 一、实验目的和要求 1、目的: ●掌握单纯形算法的计算步骤,并能熟练使用该方法求解线性规划问题。 ●了解算法→程序实现的过程和方法。 2、要求: ●使用熟悉的编程语言编制单纯形算法的程序。 ●独立编程,完成实验,撰写实验报告并总结。 二、实验内容和结果 1、单纯形算法的步骤及程序流程图。 (1)、算法步骤

(2)、程序图 各段代码功能描述: (1)、定义程序中使用的变量 #include #include #define m 3 /*定义约束条件方程组的个数*/ #define n 5 /*定义未知量的个数*/ float M=1000000.0; float A[m][n]; /*用于记录方程组的数目和系数;*/ float C[n]; /*用于存储目标函数中各个变量的系数*/

float b[m]; /*用于存储常约束条件中的常数*/ float CB[m]; /*用于存储基变量的系数*/ float seta[m]; /*存放出基与入基的变化情况*/ float delta[n]; /*存储检验数矩阵*/ float x[n]; /*存储决策变量*/ int num[m]; /*用于存放出基与进基变量的情况*/ float ZB=0; /*记录目标函数值*/ (2)、定义程序中使用的函数 void input(); void print(); int danchunxing1(); int danchunxing2(int a); void danchunxing3(int a,int b); (3)、确定入基变量,对于所有校验数均小于等于0,则当前解为最优解。 int danchunxing1() { int i,k=0; int flag=0; float max=0; for(i=0;i

最新单纯形法解线性规划问题

一、用单纯形第Ⅰ阶段和第Ⅱ阶段解下列问题 s.t. 解:1)、将该线性问题转为标准线性问题 一、第一阶段求解初始可行点 2)、引入人工变量修改约束集合 取人工变量为状态变量,问题变量和松弛变量为决策变量,得到如下单纯形表,并是所有决策变量的值为零,得到人工变量的非负值。 2 -2 -1 1 2 1 1 -1 -1 1 2 -1 -2 1 2 5 -2 -4 1 -1 1 5 0 0 0 0 0 3)、对上述单纯形表进行计算,是目标函数进一步减小,选为要改变的决策变量,计算改变的限值。 2 -2 -1 1 2 1 1 1 -1 -1 1 0 2 -1 -2 1 2 0 5 -2 -4 1 -1 1 5 1 0 0 0 0 0 0 1 0 0 0 4)、由于,为人工变量,当其到达零值时,将其从问题中拿掉保证其值不会再变。同时将以改变的决策变量转换为状态变量。增加的值使目标函数值更小。 1 -3 1 1 1 0 1 1 -1 1

1 -3 1 1 1 0 0 0 0 0 0 0 0 5)使所有人工变量为零的问题变量的值记为所求目标函数的初始可行点,本例为, 二、第二阶段用单纯形法求解最优解 -2 2 1 0 1 1 -1 0 -2 1 2 1 5 1 3 要使目标函数继续减小,需要减小或的值,由以上计算,已经有两个松弛变量为零,因此或不能再减小了,故该初始可行点即为最优解。

2、求解问题 s.t. 如果目标函数变成,确定使原解仍保持最优的c值范围,并把目标函数最 大值变达成c的函数。 解:先采用单纯形法求解最优解,再对保持最优解时C值的范围进行讨论。 1)将问题华为标准线性问题 s.t. 2)用单纯形表表示约束条件,同时在不引入人工变量的前提下,取松弛变量得初始值为零值,求解初始解和最优解 10 -1 -1 -1 10 -20 1 5 1 -20 -2 -1 -1 0 0 0 0 要使目标函数继续减小,可以增大,增大的限值是10。 10 -1 -1 -1 10 0 -20 1 5 1 -20 -10 -2 -1 -1 0 -20 0 0 0 10 0 0 3)转轴。将为零的松弛变量和决策变量交换进行转轴 10 -1 -1 -1 10 -10 4 0 -1 -10 0 -20 1 1 2 -20

16991-运筹学-习题答案选01_线性规划和单纯形法

运筹学教程(胡运权主编,清华第4版)部分习题答案(第一章)1.1 (1)无穷多解:α (6/5, 1/5) + (1- α) (3/2, 0),α∈ [0,1]。 (2)无可行解; (3)x* = (10,6),z* = 16; (4)最优解无界。 1.2 (1)max z’ = 3x1 - 4x2 + 2x3 - 5x’4 + 5x’’4 s.t. –4x1 + x2 – 2x3 + x’4– x’’4 = 2 x1 + x2 – x3 + 2x’4– 2x’’4 + x5 = 14 –2x1 + 3x2 + x3 – x’4+ x’’4– x6 = 2 x1, x2, x3, x’4, x’’4, x5, x6 ≥ 0 (2)max z’ = 2x’1 + 2x2 – 3x’3 + 3x’’3 s.t. x’1 + x2 + x’3 – x’’3 = 4 2x’1 + x2 – x’3 + x’’3 + x4 = 6 x’1, x2, x’3, x’’3, x4, ≥ 0 1.3 (1)基解:(0, 16/3, -7/6, 0, 0, 0); (0, 10, 0, -7, 0, 0); (0, 3, 0, 0, 7/2, 0),是基可行解,z = 3,是最优解; (7/4, -4, 0, 0, 0, 21/4); (0, 16/3, -7/6, 0, 0, 0); (0, 0, -5/2, 8, 0, 0); (1, 0, -1/2, 0, 0, 3); (0, 0, 0, 3, 5, 0),是基可行解,z = 0; (5/4, 0, 0, -2, 0, 15/4); (3/4, 0, 0, 0, 2, 9/4),是基可行解,z = 9/4; (0, 0, 3/2, 0, 8, 0),是基可行解,z = 3,是最优解。 (2)基解:(-4, 11/2, 0, 0); (2/5, 0, 11/5, 0),是基可行解,z = 43/5; (-1/3, 0, 0, 11/6); (0, 1/2, 2, 0),是基可行解,z = 5,是最优解;

单纯形法典型例题

科学出版社《运筹学》教材 第一章引言 第二章线性规划,姜林 第三章对偶规划,姜林 第四章运输问题,姜林 第五章整数规划,姜林 第六章非线性规划,姜林 第七章动态规划,姜林 第八章多目标规划,姜林 第九章图与网络分析,熊贵武 第十章排队论,熊贵武 第十一章库存论,王勇 第十二章完全信息博弈,王勇 第十三章不完全信息博弈,王勇 第十四章决策论与影响图 第十五章运筹学模型的计算机求解 成年人每天需要从食物中摄取的营养以及四种食品所含营养和价格见下表。问 如何选择食品才能在满足营养的前提下使购买食品的费用最小? 食品名称热量(kcal) 蛋白质(g) 钙(mg)价格(元)猪肉1000 50 400 14 鸡蛋800 60 200 6

大米900 20 300 3 白菜200 10 500 2 营养需求量 2000 55 800 解:设需猪肉、鸡蛋、大米和白菜各需 x1,x2,x3,x4斤。则热量的需求量为: 2000 20090080010004 3 2 1 x x x x 蛋白质 某工厂要做100套钢架,每套有长 3.5米、2.8米和2根2.4米的圆钢组成(如右图)已知原 料长12.3米,问应如何下料使需用的原材料最省。 解:假设从每根 12.3米的原材料上截取 3.5米、2.8米和2根2.4 米,则每根原材料需浪费 1.2米,做100套需浪费材料 120米,现 采用套裁的方法。 方案一二三四五六3.5 2.8 2.4 0 0 5 0 4 0 1 2 1 1 3 0 2 0 2 2 1 1 合计剩余 12 0.3 11.2 1.1 11.5 0.8 11.9 0.4 11.8 0.5 12.2 0.1 现在假设每种方案各下料x i (i=1、2、3、4、5、6),则可列出方程: minZ=0.3x 1+1.1x 2+0.8x 3+0.4x 4+0.5x 5+0.1x 6 约束条件: x 3+x 4+2x 5+2x 6=100 4x 2+2x 3+3x 4+x 6=100 5x 1+x 3+2x 5+x 6=200 ,,,800 50030020040055 102060503000 2009008001000. .23614min 4 3214 3 2 1 4 32 14 32 14321x x x x x x x x x x x x x x x x t s x x x x z

使用单纯形法解线性规划问题

使用单纯形法解线性规划问题 要求:目标函数为:123min 3z x x x =-- 约束条件为: 123123 1312321142321,,0 x x x x x x x x x x x -+≤??-++≥?? -+=??≥? 用单纯形法列表求解,写出计算过程。 解: 1) 将线性规划问题标准化如下: 目标函数为:123max max()3f z x x x =-=-++ s.t.: 123412356 1371234567211 42321,,,,,,0 x x x x x x x x x x x x x x x x x x x -++=??-++-+=??-++=??≥? 2) 找出初始基变量,为x 4、x 6、x 7,做出单纯形表如下: 表一:最初的单纯形表 变量 基变量 x 1 x 2 x 3 x 4 x 5 x 6 x 7 b i x 4 1 -2 1 1 0 0 0 11 x 6 -4 1 2 0 -1 1 0 3 x 7 -2 0 1 0 0 0 1 1 -f -3 1 1 3) 换入变量有两种取法,第一种取为x 2,相应的换出变量为x 6,进行第一次迭代。迭代后新的单纯形表为: 表二:第一种换入换出变量取法迭代后的单纯形表 变量 基变量 x 1 x 2 x 3 x 4 x 5 x 6 x 7 b i x 4 -7 5 1 -2 2 3

x2-4120-1103 x7-20100011 -f10-101-10-3 由于x1和x5对应的系数不是0就是负数,所以此时用单纯形法得不到最优解。 表一中也可以把换入变量取为x3,相应的换出变量为x7,进行一次迭代后的单纯形表为: 表三:第二种换入换出变量取法迭代后的单纯形表 变量 基变量x1x2x3x4x5x6x7 b i x43-20100-110 x60100-11-21 x3-20100011 -f-110000-1-1 4)表三中,取换入变量为x2,换出变量为x6,进行第二次迭代。之后的单纯形 表为: 表四:第二次迭代后的单纯形表 变量 基变量x1x2x3x4x5x6x7 b i x43001-22-512 x20100-11-21 x3-20100011 -f-10001-11-2 5)表四中,取换入变量为x7,换出变量为x3,进行第三次迭代。之后的单纯形 表为: 表五:第三次迭代后的单纯形表 变量 基变量x1x2x3x4x5x6x7 b i x4-7051-22017 x2-4120-1103 x7-20100011 -f10-101-10-3可以看出,此时x1,x5对应的系数全部非零即负,故迭代结束,没有最优解。 结论: 综上所述,本线性规划问题,使用单纯形法得不到最优解。

第1章线性规划及单纯形法

线性规划及单纯形法 一.选择 1. 运筹学应用分析、试验、(C )的方法,对经济管理系统中人、财、物等有限资源进行统筹安排,为决策者提供有依据的最优方案,以实现最有效的管理。 A 统筹 B 量化 C 优化 D 决策 2. 运筹学研究的基本手段是(A )。 A 建立数学模型 B 进行数学分析 C 进行决策分析 D 建立管理规范 3. 运筹学研究的基本特点是( C )。 A 进行系统局部独立分析 B 考虑系统局部优化 C 考虑系统的整体优化 D 进行系统的整体决策 4. 线性规划问题的数学模型包含三个组成要素:决策变量、目标函数、(B ) A 表达式 B 约束条件 C 方程变量 D 价值系数 5. 线性规划问题的基可行解X 对应线性规划问题可行域(凸集)的( C ) A 边 B 平面 C 顶点 D 内部 6. 目标函数取极小化(Z min )的线性规划问题可以转化为目标函数取极大化即(C )的线性规划问题求解 A Z min B )min(Z - C )max(Z - D Z max - 7. 标准形式的线性规划问题,最优解(C )是可行解 A 一定 B 一定不 C 不一定 D 无法确定 8. 在线性规划问题中,称满足所有约束条件方程和非负限制的解为( C )。 A 最优解 B 基可行解 C 可行解 D 基解 9. 生产和经营管理中经常提出任何合理安排,使人力、物力等各种资源得到充分利用,获得最大的效益,这就是所谓的(D ) A 管理问题 B 规划问题 C 决策问题 D 优化问题 10. 在线性规划问题中,图解法适合用于处理变量( B )个的线性规划问题 A 1 B 2 C 3 D 4 11. 求解线性规划问题时,解的情况有:唯一最优解、无穷多最优解、( C )、无可行解 A 无解B 无基解 C 无界解 D 无基可行解 12. 在用图解法求解的时,找不到满足约束条件的公共范围,这时问题有(D ),其原因是模型本身有错误,约束条件之间相互矛盾,应检查修正。 A 唯一最优解 B 无穷多最优解 C 无界解D 无可行解 13. 线性规划问题的基可行解()T n X X X ,,1 =为基可行解的充要条件是X 的正分量所对 应的系数列向量是(B ) A 线性相关 B 线性独立 C 非线性独立 D 无法判断 14. 线性规划问题进行最优性检验和解的判别时,如果当0≤j σ时,人工变量仍留在基本量中且不为零,(D ) A 唯一最优解 B 无穷多最优解 C 无界解 D 无可行解 15.如果集合C 中任意两个点21,X X 其连线上的所有点也都是集合C 中的点,称C 为(B )

线性规划及单纯形法习题

第一章 线性规划及单纯形法习题 1.用图解法求解下列线性规划问题,并指出问题具有唯一最优解、无穷最优解还是无可行解。 (1)??? ??≥≥+≥++=0,42266432min 2121212 1x x x x x x x x z (2) ??? ??≥≥+≥++=0,12432 223max 2 121212 1x x x x x x x x (3) ?? ? ??≤≤≤≤≤++=8 3105120 106max 21212 1x x x x x x z (4) ??? ??≥≤+-≥-+=0,2322 265max 1 2212121x x x x x x x x z 2.将下列线性规划问题化成标准形式。 (1)????? ? ?≥≥-++-≤+-+-=-+-+-+-=无约束 43214321432143214321,0,,2321422 245243min x x x x x x x x x x x x x x x x x x x x z (2) ????? ? ?≥≤≥-++-≤-+-=++-+-=无约束 32143213213213 21,0,023*******min x x x x x x x x x x x x x x x x z 3.对下列线性规划问题找出所有基本解,指出哪些是基可行解,并确定最优解。 (1) ??? ?? ? ?=≥=-=+-+=+++++=)6,,1(0231024893631223min 61432143213 21Λj x x x x x x x x x x x x x x z j (2) ??? ??=≥=+++=+++++-=)4,,1(0102227 4322325min 432143214321Λj x x x x x x x x x x x x x z j 4.分别用图解发法和单纯形法求解下述问题,并对照单纯形表中的各基本可行解对应图解法中可行域的哪一顶点。

《运筹学》习题线性规划部分练习题及答案

《运筹学》线性规划部分练习题 一、思考题 1.什么是线性规划模型,在模型中各系数的经济意义是什么? 2.线性规划问题的一般形式有何特征? 3.建立一个实际问题的数学模型一般要几步? 4.两个变量的线性规划问题的图解法的一般步骤是什么? 5.求解线性规划问题时可能出现几种结果,那种结果反映建模时有错误? 6.什么是线性规划的标准型,如何把一个非标准形式的线性规划问题转化成标准形式。 7.试述线性规划问题的可行解、基础解、基础可行解、最优解、最优基础解的概念及它们之间的相互关系。 8.试述单纯形法的计算步骤,如何在单纯形表上判别问题具有唯一最优解、有无穷多个最优解、无界解或无可行解。 9.在什么样的情况下采用人工变量法,人工变量法包括哪两种解法? 10.大M 法中,M 的作用是什么?对最小化问题,在目标函数中人工变量的系数取什么?最大化问题呢? 11.什么是单纯形法的两阶段法?两阶段法的第一段是为了解决什么问题?在怎样的情况下,继续第二阶段? 二、判断下列说法是否正确。 1.线性规划问题的最优解一定在可行域的顶点达到。 2.线性规划的可行解集是凸集。 3.如果一个线性规划问题有两个不同的最优解,则它有无穷多个最优解。 4.线性规划模型中增加一个约束条件,可行域的范围一般将缩小,减少一个约束条件,可行域的范围一般将扩大。 5.线性规划问题的每一个基本解对应可行域的一个顶点。 6.如果一个线性规划问题有可行解,那么它必有最优解。 7.用单纯形法求解标准形式(求最小值)的线性规划问题时,与 > j σ 对应的变量都 可以被选作换入变量。 8.单纯形法计算中,如不按最小非负比值原则选出换出变量,则在下一个解中至少有一个基变量的值是负的。 9.单纯形法计算中,选取最大正检验数k σ对应的变量k x作为换入变量,可使目标函数值得到最快的减少。 10.一旦一个人工变量在迭代中变为非基变量后,该变量及相应列的数字可以从单纯形表中删除,而不影响计算结果。 三、建立下面问题的数学模型 1.某公司计划在三年的计划期内,有四个建设项目可以投资:项目Ⅰ从第一年到 第三年年初都可以投资。预计每年年初投资,年末可收回本利120% ,每年又可以重新将所获本利纳入投资计划;项目Ⅱ需要在第一年初投资,经过两年可收回本利150% ,又可以重新将所获本利纳入投资计划,但用于该项目的最大投资额不得超过20万元;项目Ⅲ需要在第二年年初投资,经过两年可收回本利160% ,但用于该项目的最大投资额不得超过15万元;项目Ⅳ需要在第三年年初投资,年末可收回本利140% ,但用于该项目的最大投资额不得超过10万元。在这个计划期内,该公司第一年可供投资的资金有30万元。问怎样的投资方案,才能使该公司在这个计划期获得最大利润? 2.某饲养场饲养动物,设每头动物每天至少需要700克蛋白质、30克矿物质、100克维生素。现有五种饲料可供选用,各种饲料每公斤营养成分含量及单 价如下表2—1所示:

单纯形法求解线性规划的步骤

单纯形法求解线性规划的步骤 1>初始化 将给定的线性规划问题化成标准形式,并建立一个初始表格,它最右边的单元格都就是非负的(否则无解),接下来的m 列组成一个m*m的单元矩阵(目标行的单元格则不必满足这一条件),这m列确定了初始的基本可行解的基本变量,而表格中行用基本变量来表示 2>最优化测试 如果目标行的所有单元格都就是非负的(除了最右列中代表目标函数值的那个单元格),就可以停止了,该表格代表了一个最优解,它的基本变量的值在最右列中,而剩下的非基本变量都为0 3>确定输入变量 从目标行的前n个单元格中选择一个负的单元格(选择绝对值最大的那个)该单元格所在的列确定的输入变量及主元列 4>确定分离变量 对于主元列的每个正单元格,求出θ比率(如果主元格的单元格为负或为0,说明该问题就是无解的,算法终止),找出θ比率最小的列,改行确定了分离变量与主元行 5>建立下一张表格 将主元行的所有单元格除以主元得到新的主元行,包括主元行在内的每一行,要减去改行主元列单元格与新主元行的成绩(除主元行为1外,这一步将主元列的所有单元格变成0)、把主元列的变量名进行代换,得到新的单纯形表,返回第一步 为求简单 在本程序中,需要自己建立标准矩阵(比如加入松弛变量等工作需要用户自己完成),程序的输入有两种方式: 1:指定行与列,由用户自行输入每一个元素SimpleMatrix(introw=0,int col=0); 2:直接在主程序中初始化一个二维数组,然后利用构造函数SimpleMatrix(introw,int col,double **M) 来初始化与处理(本程序所用的实例用的就是这种方法) 程序中主要的函数以及说明 ~SimpleMatrix(); 销毁动态分配的数组、用于很难预先估计矩阵的行与列,所以在程序中才了动态的内存分配、需要重载析构函数bool Is_objectLine_All_Positive(); //判断目标行就是否全部为非负数,最后一列不作考虑 这个函数用来判断就是否已经存在最优解 bool Is_MainCol_All_Negative(int col);//判断主元列就是否全部为负数或零 这个函数用来判断线性规划就是否就是无解的 bool Is_column_all_Positive(int col); //判断col列中就是否全部为正(不包括目标行)

单纯形法求解线性规划的步骤

单纯形法求解线性规划的步骤

单纯形法求解线性规划的步骤 1>初始化 将给定的线性规划问题化成标准形式,并建立一个初始表格,它最右边的单元格都是非负的(否则无解),接下来的m列组成一个m*m的单元矩阵(目标行的单元格则不必满足这一条件),这m列确定了初始的基本可行解的基本变量,而表格中行用基本变量来表示 2>最优化测试 如果目标行的所有单元格都是非负的(除了最右列中代表目标函数值的那个单元格),就可以停止了,该表格代表了一个最优解,它的基本变量的值在最右列中,而剩下的非基本变量都为0 3>确定输入变量 从目标行的前n个单元格中选择一个负的单元格(选择绝对值最大的那个)该单元格所在的列确定的输入变量及主元列 4>确定分离变量 对于主元列的每个正单元格,求出θ比率(如果主元格的单元格为负或为0,说明该问题是无解的,算法终止),找出θ比率最小的列,改行确定了分离变量和主元行 5>建立下一张表格 将主元行的所有单元格除以主元得到新的主元行,包括主元行在内的每一行,要减去改行主元列单元格和新主元行的成绩(除主元行为1外,这一步将主元列的所有单元格变成0).把主元列的变量名进行代换,得到新的单纯形表,返回第一步 为求简单 在本程序中,需要自己建立标准矩阵(比如加入松弛变量等工作需要用户自己完成),程序的输入有两种方式: 1:指定行和列,由用户自行输入每一个元素SimpleMatrix(introw=0,int col=0); 2:直接在主程序中初始化一个二维数组,然后利用构造函数SimpleMatrix(introw,int col,double **M) 来初始化和处理(本程序所用的实例用的是这种方法) 程序中主要的函数以及说明 ~SimpleMatrix(); 销毁动态分配的数组.用于很难预先估计矩阵的行和列,所以在程序中才了动态的内存分配.需要重载析构函数 bool Is_objectLine_All_Positive(); //判断目标行是否全部为非负数,最后一列不作考虑 这个函数用来判断是否已经存在最优解 bool Is_MainCol_All_Negative(int col);//判断主元列是否全部为负数或零 这个函数用来判断线性规划是否是无解的 bool Is_column_all_Positive(int col); //判断col列中是否全部为正(不包括目标行)

线性规划单纯形法matlab解法

%单纯形法matlab程序-ssimplex % 求解标准型线性规划:max c*x; . A*x=b; x>=0 % 本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b % N是初始的基变量的下标 % 输出变量sol是最优解, 其中松弛变量(或剩余变量)可能不为0 % 输出变量val是最优目标值,kk是迭代次数 % 例:max 2*x1+3*x2 % . x1+2*x2<=8 % 4*x1<=16 % 4*x2<=12 % x1,x2>=0 % 加入松驰变量,化为标准型,得到 % A=[1 2 1 0 0 8; % 4 0 0 1 0 16; % 0 4 0 0 1 12; % 2 3 0 0 0 0]; % N=[3 4 5]; % [sol,val,kk]=ssimplex(A,N) % 然后执行 [sol,val,kk]=ssimplex(A,N)就可以了。 function [sol,val,kk]=ssimplex(A,N) [mA,nA]=size(A); kk=0; % 迭代次数 flag=1;

while flag kk=kk+1; if A(mA,:)<=0 % 已找到最优解 flag=0; sol=zeros(1,nA-1); for i=1:mA-1 sol(N(i))=A(i,nA); end val=-A(mA,nA); else for i=1:nA-1 if A(mA,i)>0&A(1:mA-1,i)<=0 % 问题有无界解 disp('have infinite solution!'); flag=0; break; end end if flag % 还不是最优表,进行转轴运算 temp=0; for i=1:nA-1 if A(mA,i)>temp temp=A(mA,i); inb=i; % 进基变量的下标 end

线性规划与单纯形法

第1章 线性规划与单纯形法 1、用图解法求解下列线性规划问题,并指出问题具有唯一最优解、无穷最优解、无界解还是无可行解。 ??? ??≥≥+≥++=0 x x 42x 4x 66x 4x 3x 2x minz )a (21 21212 1, ?? ? ??≥≥+≤++=0 x ,x 124x 3x 2 x 2x 2x 3x maxz )b (2121212 1 ?? ???≤≤≤≤≤++=8x 310x 5120 10x 6x x x maxz )c (21 212 1 ?? ? ??≥≤+-≥-+=0 x ,x 23x 2x 2x 2x 6x 5x maxz )d (2121212 1 2、用单纯形法求解下列线性规划问题。 ?????≥ ≤+≤++=0 x ,x 82x 5x 94x 3x 5x 10x maxz )a (21 2 121 2 1 ????? ? ? ≥ ≤+≤+≤+=0 x ,x 5x x 242x 6x 155x x 2x maxz )b (2 1 212 122 1 3、用大M 法和两阶段法求解下列线性规划问题,并指出属于哪一类解。 ??? ?? ??≥≥-≥+-≥+++-=0 x x x 0 x 2x 2x 2x 6 x x x 2x x 2x maxz )a (3 , 2,132 3 13213 21 ??? ??≥≥+≥++++=0 x , x ,x 6 2x 3x 82x 4x x x 3x 2x minz )b (3 21 2 1 3 21 3 21 4、已知线性规划问题的初始单纯形表(如表1所示)和用单纯形法迭代后得到的表(如表2所示)如下,试求括弧中未知数a ~l 的值。 表1

图解法和单纯形法求解线性规划问题

图解法和单纯形法求解以下线性规划问题 1.1 图解法解线性规划问题 只含两个变量的线性规划问题,可以通过在平面上作图的方法求解,步骤如下: (1)以变量x1为横坐标轴,x2为纵坐标轴,适当选取单位坐标长度建立平面坐标直 角坐标系。由变量的非负性约束性可知,满足该约束条件的解均在第一象限内。 (2)图示约束条件,找出可行域(所有约束条件共同构成的图形)。 (3)画出目标函数等值线,并确定函数增大(或减小)的方向。 (4)可行域中使目标函数达到最优的点即为最优解。 然而,由于图解法不适用于求解大规模的线性规划问题,其实用意义不大。 1.2 单纯形法解线性规划问题 它的理论根据是:线性规划问题的可行域是n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。顶点所对应的可行解称为基本可行解。 单纯形法的基本思想是:先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。 单纯形法的一般解题步骤可归纳如下:①把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解。②若基本可行解不存在,即约束条件有矛盾,则问题无解。③若基本可行解存在,从初始基本可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。④按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。⑤若迭代过程中发现问题的目标函数值无界,则终止迭代。 1.3 线性规划问题的标准化 使用单纯形法求解线性规划时,首先要化问题为标准形式

使用单纯形法解线性规划问题

使用单纯形法解线性规划 问题 The Standardization Office was revised on the afternoon of December 13, 2020

使用单纯形法解线性规划问题 要求:目标函数为:123min 3z x x x =-- 约束条件为: 123123 1312321142321,,0 x x x x x x x x x x x -+≤??-++≥?? -+=??≥? 用单纯形法列表求解,写出计算过程。 解: 1)将线性规划问题标准化如下: 目标函数为:123max max()3f z x x x =-=-++ .: 1234123561371234567211 42321,,,,,,0x x x x x x x x x x x x x x x x x x x -++=??-++-+=??-++=??≥? 2)找出初始基变量,为x 4、x 6、x 7,做出单纯形表如下: 表一:最初的单纯形表 3) 换入变量有两种取法,第一种取为x 2,相应的换出变量为x 6,进行第一 次迭代。迭代后新的单纯形表为: 表二:第一种换入换出变量取法迭代后的单纯形表

由于x1和x5对应的系数不是0就是负数,所以此时用单纯形法得不到最优解。 表一中也可以把换入变量取为x3,相应的换出变量为x7,进行一次迭代后的单纯形表为: 表三:第二种换入换出变量取法迭代后的单纯形表 4)表三中,取换入变量为x2,换出变量为x6,进行第二次迭代。之后的单纯形表为: 表四:第二次迭代后的单纯形表 5)表四中,取换入变量为x7,换出变量为x3,进行第三次迭代。之后的单纯形表为: 表五:第三次迭代后的单纯形表

第一章线性规划及单纯形法习题

第一章 线性规划及单纯形法习题 1.用图解法求解下列线性规划问题,并指出问题具有唯一最优解、无穷最优解还是无可行解。 (1)??? ??≥≥+≥++=0,42266432min 2121212 1x x x x x x x x z (2) ??? ??≥≥+≥++=0,12432 223max 2 121212 1x x x x x x x x (3) ?? ? ??≤≤≤≤≤++=8 3105120 106max 21212 1x x x x x x z (4) ??? ??≥≤+-≥-+=0,2322 265max 1 2212121x x x x x x x x z 2.将下列线性规划问题化成标准形式。 (1)????? ? ?≥≥-++-≤+-+-=-+-+-+-=无约束 43214321432143214321,0,,2321422 245243min x x x x x x x x x x x x x x x x x x x x z (2) ????? ? ?≥≤≥-++-≤-+-=++-+-=无约束 32143213213213 21,0,023*******min x x x x x x x x x x x x x x x x z 3.对下列线性规划问题找出所有基本解,指出哪些是基可行解,并确定最优解。 (1) ??? ?? ? ?=≥=-=+-+=+++++=)6,,1(0231024893631223min 61432143213 21 j x x x x x x x x x x x x x x z j (2) ??? ??=≥=+++=+++++-=)4,,1(0102227 4322325min 432143214321 j x x x x x x x x x x x x x z j 4.分别用图解发法和单纯形法求解下述问题,并对照单纯形表中的各基本可行解对应图解法中可行域的哪一顶点。

单纯形法在线性规划中的应用

单纯形法在线性规划中的应用 摘要 求解线性规划问题,就是在各项资源条件的限制下,如何确定方案,使预期的目标达到最优。本文重点介绍了求解线性规划问题目前最常见的两种方法,图解法和单纯形法。图解法适合于只含两个变量的线性规划问题,文中只做了简单的描述。而单纯形法是求解线性规划问题的通用方法,适合于求解大规模的线性规划问题,本文作了重点描述,对单纯形法中的基本概念如基变量、非基变量、基向量、非基向量、可行基以及基本可行解等概念作了详细的陈述,在此基础上,介绍了线性规划问题的标准化、单纯形法的基本原理、确定初始可行解、最优性检验、解的判别、基本可行解的改进、换入变量的确定-最大增加原则、换出变量的确定-最小比值原则、表格单纯形法、大M法、两阶段法等。 关键词:线性规划图解法单纯形法基变量基向量可行基基本可行解

正文 引言 在生产管理和经济活动中,经常遇到这些问题,如生产计划问题,即如何合理利用有限的人、财、物等资源,以便得到最好的经济效果;材料利用问题,即如何下料使用材最少;配料问题,即在原料供应量的限制下如何获取最大利润;劳动力安排问题,即如何用最少的劳动力来满足工作的需要;运输问题,即如何制定调运方案,使总运费最小;投资问题,即从投资项目中选取方案,使投资回报最大等等。对于这些问题,都能建立相应的线性规划模型。事实上,线性规划就是利用数学为工具,来研究在一定条件下,如何实现目标最优化。 解线性规划问题目前最常见的方法有两种,图解法和单纯形法。单纯形法是求解线性规划问题的通用方法。 1 线性规划问题的求解方法 1.1 图解法解线性规划问题 只含两个变量的线性规划问题,可以通过在平面上作图的方法求解,步骤如下: (1)以变量x 1为横坐标轴,x 2 为纵坐标轴,适当选取单位坐标长度建立平面 坐标直角坐标系。由变量的非负性约束性可知,满足该约束条件的解均在第一象限内。 (2)图示约束条件,找出可行域(所有约束条件共同构成的图形)。 (3)画出目标函数等值线,并确定函数增大(或减小)的方向。 (4)可行域中使目标函数达到最优的点即为最优解。 然而,图解法虽然直观、简便,但当变量数多于三个以上时,其实用意义不大。

使用单纯形法解线性规划问题

使用单纯形法解线性规划问题 要求:目标函数为:123min 3z x x x =-- 约束条件为: 123123 1312321142321,,0 x x x x x x x x x x x -+≤??-++≥?? -+=??≥? 用单纯形法列表求解,写出计算过程。 解: 1) 将线性规划问题标准化如下: 目标函数为:123max max()3f z x x x =-=-++ s.t.: 123412356 1371234567211 42321,,,,,,0 x x x x x x x x x x x x x x x x x x x -++=??-++-+=??-++=??≥? 2) 找出初始基变量,为x 4、x 6、x 7,做出单纯形表如下: 表一:最初的单纯形表 3) 换入变量有两种取法,第一种取为x 2,相应的换出变量为x 6,进行第一次迭代。迭代后新的单纯形表为: 表二:第一种换入换出变量取法迭代后的单纯形表

由于x1和x5对应的系数不是0就是负数,所以此时用单纯形法得不到最优解。 表一中也可以把换入变量取为x3,相应的换出变量为x7,进行一次迭代后的单纯形表为: 表三:第二种换入换出变量取法迭代后的单纯形表 4)表三中,取换入变量为x2,换出变量为x6,进行第二次迭代。之后的单纯形表为: 表四:第二次迭代后的单纯形表 5)表四中,取换入变量为x7,换出变量为x3,进行第三次迭代。之后的单纯形表为: 表五:第三次迭代后的单纯形表 可以看出,此时x1,x5对应的系数全部非零即负,故迭代结束,没有最优解。 结论: 综上所述,本线性规划问题,使用单纯形法得不到最优解。

线性规划的单纯形法表格方法

线性规划的单纯形法表格方法 Max. z=5x 1+2x 2+3x 3 -x 4 +x 5 s.t. x 1+2x 2+2x 3 +x 4 =8 3x 1+4x 2+x 3 +x 5 =7 x j ≥0 j=1,2,3,4,5 表1 由表的中间行可求出基本可行解,令x1=x2=x3=0,由约束条件得 x4=8,x5=7. 表中最后一行分别为: ()1787811-=+-=???? ??-=z ()3)31(53111511=+--=???? ??--=-z c ()0)42(24211222=+--=???? ??--=-z c ()4)12(31211333=+--=??? ? ??--=-z c 因为c j -z j 行中存在正值,所以当前基本可行解不是最优解。c j -z j 行中的4最大因而非基变量 X 3使z 有最大的单位增量,把X 3选作新的(换入)基变量。 为确定被换出的基变量,采用最小比值法。用X 3列的值除以约束条件的常数(8/2=4,7/1=7)。第一行有最小比值,把它叫做旋转行。第一行原来的基变量是X 4 ,此时X 4为换出基变量,新的基变量为X 3、X 5。为此需要把表中X 3对应在约束条件中系数变为单位值(1,0)。在表1中:1)用2除旋转行使X 3系数为1;2)用-1/2乘旋转行加到第二行消去X 3。 ()153123413=+=???? ??=z ()1455/2/2113511=-=???? ??-=-z c ()-4623113222=-=???? ??-=-z c ()-21-11/2-21/13-133=-=??? ? ??-=-z c 因为c j -z j 行中仍存在正值,所以当前基本可行解不是最优解。c j -z j 行中的1最大因而非基变 量X 1使z 有最大的单位增量,把X 1选作新的(换入)基变量。

用单纯形法求解线性规划问题

目录 一.摘要 (2) 二.实验目的 (2) 三.实验内容 (2) 四.建立数学模型 (3) 五.实验原理 (5) 六.MALTAB程序代码及注释 (7) 七.结果运行测试 (13) 八.心得与感悟 (15)

一.摘要: 线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法.研究线性约束条件下线性目标函数的极值问题的数学理论和方法,英文缩写LP。 自1946年G.B.Dantizig提出单纯形法以来,它一直是求解线性规划问题的最有效的数学方法之一。单纯形法的理论根据是:线性规划问题的可行域是 n 维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。顶点所对应的可行解称为基本可行解。通过引入普通单纯形法,依次迭代并判断,逐步逼近,最后得到最优解。若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。 关键字:线性规划,单纯形法,最优值,最优解 二.实验目的: 1.加强学生分析问题能力,锻炼数学建模能力。 2.了解并掌握MATLAB软件中的线性规划问题的编程、求解和分析。 3.利用所学的MALTAB语言,完成对单纯形法问题的编程设计。 三.实验内容: 某商场决定,营业员每周连续工作5天后连续休息2天,轮流休息,据统计,商场每天需要营业员如下:星期一:300,二:300;三:350,四:400,五:480,六:600;日:500; (1)商场人力资源部应如何安排每天上班的人数才能使商场总的营业员最少 (2)若商场可以雇佣临时工,上班时间同正式工,若正式工每天工资80,临时工每天100,问商场是否应雇佣临时工及雇佣多少名?

线性规划单纯形法matlab解法

线性规划单纯形法matlab解法 %单纯形法matlab程序-ssimplex % 求解标准型线性规划:max c*x; s.t. A*x=b; x>=0 % 本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b % N是初始的基变量的下标 % 输出变量sol是最优解, 其中松弛变量(或剩余变量)可能不为0 % 输出变量val是最优目标值,kk是迭代次数 % 例:max 2*x1+3*x2 % s.t. x1+2*x2<=8 % 4*x1<=16 % 4*x2<=12 % x1,x2>=0 % 加入松驰变量,化为标准型,得到 % A=[1 2 1 0 0 8; % 4 0 0 1 0 16; % 0 4 0 0 1 12; % 2 3 0 0 0 0]; % N=[3 4 5]; % [sol,val,kk]=ssimplex(A,N) % 然后执行 [sol,val,kk]=ssimplex(A,N)就可以了。 function [sol,val,kk]=ssimplex(A,N) [mA,nA]=size(A); kk=0; % 迭代次数

flag=1; while flag kk=kk+1; if A(mA,:)<=0 % 已找到最优解 flag=0; sol=zeros(1,nA-1); for i=1:mA-1 sol(N(i))=A(i,nA); end val=-A(mA,nA); else for i=1:nA-1 if A(mA,i)>0&A(1:mA-1,i)<=0 % 问题有无界解 disp('have infinite solution!'); flag=0; break; end end if flag % 还不是最优表,进行转轴运算 temp=0; for i=1:nA-1 if A(mA,i)>temp temp=A(mA,i); inb=i; % 进基变量的下标

相关文档
相关文档 最新文档