天津理工大学线性规划单纯形法实验报告
单纯形法[实验报告]
![单纯形法[实验报告]](https://img.taocdn.com/s3/m/a83c753cb90d6c85ec3ac63f.png)
《运筹学》课程设计任务书吊丝一班班级学号 86843110姓名 JWB指导老师么么哒201x年 6 月一.设计题目:目标规划问题模型及单纯形算法已知三个工厂生产的产品供应四个用户需要,各工厂生产量、用户需求量及从各工厂到用户的单位产品的运输费用如下表所示:用户工厂12 3 4 生产量120051002 6 730023 52004 620034 525021503400需求量200 100 450 250用表上作业法得最优运输方案,如表一中所示(红字),但上述方案只考虑了运费为最少,没有考虑到很多具体情况和条件。
故上级部门研究后确定了制订调配方案时要考虑的四个目标,并规定重要性次序为:P1: 1、第4用户为重要部门,需要量必须全部满足;2、供应用户1的产品中工厂3的产品不少于100单位。
P2:为兼顾一般,每个用户满足率不低于80%。
P3:新方案总运费不超过原方案的10%。
P4: 1、因道路限制从工厂2到用户4的路线应尽量避免分配运输任务;2、用户1和用户3的满足率应尽量保持平衡。
二.数学模型(1)运输问题的线形规划模型为:minZ=5x11 +2 x12+6 x13+7 x14+3 x21+5 x22+4 x23 +6 x24+4 x31+5 x32 +2 x33 +3 x34st x11 +x12 +x13 +x14 =300x21 +x22 +x23 +x24 =200x31 +x32 +x33 +x34 =400x11 +x21 +x31 ≤200x12 +x22 +x32 ≤100x13 +x23 +x33 ≤450x14 +x24 +x34 ≤250则该目标规划的模型为 :min z= P1 (d1- + d2- )+P2 (d3- +d4- +d5- +d6- )+P3 d7+ +P4 (d8+ +d8- +d9+ +d9- ) S.t . x14 +x24 +x34+d1--d1+ =250x31 +d2- -d2+ =100x11 +x21 +x31 +d3- -d3+ =160x12 +x22 +x32 +d4- -d4+ =80x13 +x23 +x33 +d5- -d5+=360x14 +x24 +x34 +d6- -d6+=2005x11 +2x12 +6x13 +7x14 +3x21 +5x22 +4x23 +6x24 +4x31 +5x32 +2x33 +3x34+d7--d7+=3245x24 +d8- -d8+=0x11 +x21 +x31 -x13 -x23 -x33 +d9- -d9+=0c. P3级目标必须实现,方案如何?p3级目标必须实现,将p3级约束条件改为绝对约束5x11 +2x12 +6x13 +7x14 +3x21 +5x22 +4x23 +6x24 +4x31 +5x32 +2x33+3x34≤3245目标规划模型变为:minZ'= P1 (d1- + d2- )+P2 (d3- +d4- +d5- +d6- )+P4 (d7+ +d7- +d8+ +d8- ) st 5x11 +2x12 +6x13 +7x14 +3x21 +5x22 +4x23 +6x24 +4x31 +5x32 +2x33 +3x34≤3245x14 +x24 +x34+(d1-)-(d1+)=250x31+(d2-)-(d2+) =100x11 +x21 +x31+(d3-)-(d3+)=160x12 +x22 +x32+(d4-)-(d4+)=80x13 +x23 +x33+(d5-)-(d5+)=360x14 +x24 +x34+(d6-)-(d6+)=200x24+(d7-)-(d7+)=09x11 +9x21 +9x31 -4x13 -4x23 -4x33+(d8-)-(d8+)=0(1) p3目标中的10%,在10%-15%中变化,则5x11 +2x12 +6x13 +7x14 +3x21 +5x22 +4x23 +6x24 +4x31 +5x32 +2x33 +3x34>=32455x11 +2x12 +6x13 +7x14 +3x21 +5x22 +4x23 +6x24 +4x31 +5x32 +2x33 +3x34<=3392.5目标规划模型变为:minZ'= P1 (d1- + d2- )+P2 (d3- +d4- +d5- +d6- )+P4 (d7+ +d7- +d8+ +d8- ) st 5x11 +2x12 +6x13 +7x14 +3x21 +5x22 +4x23 +6x24 +4x31 +5x32 +2x33 +3x34>=34255x11 +2x12 +6x13 +7x14 +3x21 +5x22 +4x23 +6x24 +4x31 +5x32 +2x33 +3x34<=3392.5"x14 +x24 +x34+(d1-)-(d1+)=250x31+(d2-)-(d2+) =100x11 +x21 +x31+(d3-)-(d3+)=160x12 +x22 +x32+(d4-)-(d4+)=80x13 +x23 +x33+(d5-)-(d5+)=360x14 +x24 +x34+(d6-)-(d6+)=200x24+(d7-)-(d7+)=09x11 +9x21 +9x31 -4x13 -4x23 -4x33+(d8-)-(d8+)=0(2)p3级目标放弃,减少一个约束条件目标规划模型变为:minZ'= P1 (d1- + d2- )+P2 (d3- +d4- +d5- +d6- )+P4 (d7+ +d7- +d8+ +d8- )"st x14 +x24 +x34+(d1-)-(d1+)=250x31+(d2-)-(d2+) =100x11 +x21 +x31+(d3-)-(d3+)=160x12 +x22 +x32+(d4-)-(d4+)=80x13 +x23 +x33+(d5-)-(d5+)=360x14 +x24 +x34+(d6-)-(d6+)=200x24+(d7-)-(d7+)=033+(d8-)-(d+)=0(d8+)=0三、程序运行结果#include<stdio.h>#include<iostream>#include<math.h>using namespace std;float matrix[100][100],x[100];int a[100];int m,n,s,type;int indexe,indexl,indexg;int i, j,in,out,temp;#define M 10000void Input(float b[],int code[]){cout<<"变元数m= ";cin>>m;cout<<"约束条件数n= ";cin>>n;for(i=1;i<=n;i++){cout<<"第"<<i<<"个不等式的系数 ";for(j=1;j<=m;j++)cin>>matrix[i][j];cout<<"输入约束条件"<<i<<" 0表示<=,1表示=,2表示>= "; cin>>code[i];cout<<"b"<<i <<endl;cin>>b[i];}cout<<"the type is 0表示Min,1表示max ";do{cin>>type;if(type!=0&&type!=1)cout<<"error,ReInput!\n";}while(type!=0&&type!=1);cout<<" Z 的目标系数为:";for(i=1;i<=m;i++)cin>>matrix[n+1][i];if(type==0)for(i=1;i<=m;i++)matrix[n+1][i]=-matrix[n+1][i];}void Merge(float nget[][100],float nlet[][100],float net[][100],float b[]) {int i,j;for(i=1;i<=n;i++){for(j=m+1;j<=m+indexe;j++)if(nget[i][j-m-1]!=-1)matrix[i][j]=0;else matrix[i][j]=-1;for(j=m+indexe+1;j<=m+indexe+indexl;j++)if(nlet[i][j-m-indexe-1]!=1)matrix[i][j]=0;else matrix[i][j]=1;for(j=m+indexe+indexl+1;j<=s;j++)if(net[i][j-m-indexe-indexl-1]!=1)matrix[i][j]=0; else matrix[i][j]=1;}for(i=m+1;i<=m+indexe+indexl;i++)matrix[n+1][i]=0;for(i=m+indexe+indexl+1;i<=s;i++)matrix[n+1][i]=-M ;for(i=1;i<=n;i++)matrix[i][s+1]=b[i];matrix[n+1][s+1]=0;}void ProcessA(){int i;for(i=1;i<=m+indexe;i++)a[i]=0;for(i=m+indexe+1;i<=s;i++)a[i]=1;}void InitPrint(){int i;//printf(" X ");for(i=1;i<=s;i++)printf(" %d ",i);printf(" b \n" );printf(" " );printf("\n" );}void Xartificial(){int i,j,k;if(indexg!=0){for(i=m+indexe+indexl+1;i<=s;i++){for(j=1;j<=n;j++)if(matrix[j][i]==1){for(k=1;k<=s+1;k++)matrix[n+1][k]=matrix[n+1][k]+matrix[j][k]*M;j=n;}}}}void Start(float b[],int code[]){int i;float nget[100][100],nlet[100][100],net[100][100]; indexe=indexl=indexg=0;for(i=1;i<=n;i++){if(code[i]==0){nlet[i][indexl++]=1;}if(code[i]==1){net[i][indexg++]=1;}if(code[i]==2){net[i][indexg++]=1;nget[i][indexe++]=-1;}}s=indexe+indexl+indexg+m; Merge(nget,nlet,net,b); ProcessA();InitPrint();Xartificial();}void Print(){int i,j,k,temp=1;for(i=1;i<=n;i++)for(k=temp;k<=s;k++)if(a[k]==1){temp=k+1;k=s;}for(j=1;j<=s+1;j++)printf( " %.0f ",matrix[i][j] ); printf("\n");}printf("Rj\n");for(j=1;j<=s+1;j++)printf(" %.0f ",matrix[n+1][j] ); printf("\n");}void jckxj(){int i,j;for(i=1;i<=n;i++)for(j=1;j<=s;j++)if(matrix[i][j]==1&&a[j]==1) {x[j]=matrix[i][s+1];}for(i=1;i<=s;i++)if(a[i]==0)x[i]=0;}void Result(){if(type==1)printf("\nZmax= %.0f\n" ,matrix[n+1][s+1] ); else printf("\nZmin=%.0f\n", matrix[n+1][s+1] ); }int rj(){int i;for(i=1;i<=s;i++)if(matrix[n+1][i]>0)return 0;return 1;}int max(){int i,temp=1;float max=matrix[n+1][1];for(i=1;i<=s;i++)if(max<matrix[n+1][i]){max=matrix[n+1][i];temp=i;}return temp;}void JustArtificial(){int i;for(i=m+indexe+indexl+1;i<=s;i++)if(fabs(x[i])>=0.000001){cout<<"NO Answer\n";return;}}void PrintResult(){if(type==0)printf("the Minimal: %.2f\n", matrix[n+1][s+1] ); elseprintf("the Maximum: %.2f\n", matrix[n+1][s+1] );int Check(int in){int i;float maxl=-1;for(i=1;i<=n;i++)if(fabs(matrix[i][in])>0 && maxl<matrix[i][s+1]/matrix[i][in])maxl=matrix[i][s+1]/matrix[i][in];if(maxl<0)return 1;return 0;}int SearchOut(int *temp,int in){int i;float min=10000;for(i=1;i<=n;i++)if(fabs(matrix[i][in])>=0.000001&&(matrix[i][s+1]/matrix[i][in]>=0) &&min>matrix[i][s+1]/matrix[i][in]){min=matrix[i][s+1]/matrix[i][in];*temp=i;}return i;void Mto(int in,int temp){int i;for(i=1;i<=s+1;i++)if(i!=in)matrix[temp][i]=matrix[temp][i]/matrix[temp][in]; matrix[temp][in]=1;}void Be(int temp,int in){int i,j;float c;for(i=1;i<=n+1;i++){c=matrix[i][in]/matrix[temp][in];if(i!=temp)for(j=1;j<=s+1;j++)matrix[i][j]=matrix[i][j]-matrix[temp][j]*c;}}void Achange(int in,int out){int temp=a[in];a[in]=a[out];a[out]=temp;}void Simplix(){while(1){jckxj();Print();Result();if(!rj())in=max();else{if(indexg!=0) JustArtificial(); PrintResult();return;}if(Check(in)){cout<<"No Delimition\n"; return;}out=SearchOut(&temp,in); Mto(in,temp);Be(temp,in);Achange(in,out);}}void printB(){cout<<endl;cout<<"B 逆"<<endl;for(i=1;i<=n;i++){for(j=1+indexe+m;j<=s;j++) printf( " %.0f ",matrix[i][j] ); printf("\n");}}void rankb(){float b1[100][100] ,maxb,minb; int t=1;for (i=1;i<=n;i++){{for (j=m+indexe+1;j<=s;j++)if (matrix[i][j]!=0)b1[i][t]=-matrix[i][s+1]/matrix[i][j];cout<<b1[i][t];t=t+1;}{ maxb=b1[i][1];for (t=1;t<=n;t++)if ( b1[i][t]<0)if (maxb<b1[i][t])maxb=b1[i][t];}{ minb=b1[i][1];for (t=1;t<=s;t++)if ( b1[i][t]>0)if (minb>b1[i][t])minb=b1[i][t];}maxb;minb;cout<<maxb<<" <= "<<"^b"<<i<<" 的变化 <= "<<minb<<endl; }}void rankc(){float c[100];for (i=1;i<=n;i++)if (a[i]!=1)c[i]=matrix[n+1][m+indexe+i];cout<<"c"<<i<<"的变化范围 "<<" <= "<<c[i]<<endl; }void main(){int code[100];float b[100];Input(b,code);Start(b,code);Simplix();printB();rankb();rankc();}运行结果:。
单纯形法、线性规划实践报告

一、线性规划——单纯形法程序设计1.实验目的:(1)使学生在程序设计方面得到进一步的训练;,掌握Matlab (C或VB)语言进行程序设计中一些常用方法。
(2)使学生对线性规划的单纯形法有更深的理解.2.问题述本实验主要编写一般线性规划问题的计算程序:Mins.t.x引入松弛变量将其化为一般标准型线性规划问题:Mins.t. Ax=b;xA为m*n的矩阵,有m个约束,n个变量。
求解上述线性规划采用单纯形算法,初始可行基由引入的m个人工变量对应的单位阵组成,并采用大M算法3.算法描述(1)将引入的人工变量对应的单位阵作为初始可行基,则原线性规划问题构造出下面的新线性规划问题:(2)通过判别数计算公式可求出n+m个变量的判别数,若全部判别数,则得到一个最优基本可行解,运算结束;否则,转到下一步(3)找出判别数为负的最小判别数,其对应的变量为入基变量,记下标为k,然后看其对应的列向量,若中的所有元,则原线性规划无最优解,否则,转下一步 (4)计算,则为离基变量,然后对A 进行初等变换,计算 ,();,();lj lj lj ij ij ik lk lk l l l i i ik lk lkljj j klk a a a a a a i l a a b b b b b a i l a a a a σσσ==-≠==-≠=- (5)用入基变量与出基变量对应的列向量、判别、对应的系数均对换,则可用计算机编程循环以上步骤直至得出结果4.计算程序(matlab )程序保存为linpro.m文件5.算例验证⎪⎪⎩⎪⎪⎨⎧=≥=+++≤+--≤-------=4,...,2,1,010012.008.01.015.0min 432143243214321j x x x x x x x x x x x x x x x x z j在窗口输入:Aeq=[1 -1 -1 -1 1 0;0 -1 -1 1 0 1;1 1 1 1 0 0];b=[0;0;1];c0=[-0.15 -0.1 -0.08 -0.12 0 0];linpro(Aeq,b,c0)1000010000-0.1300说明通过三次迭代找到最优解为-0.13.用Matlab 求解线性规划的命令linprog 的计算结果:f = [-0.15;-0.1;-0.08;-0.12];A = [1 -1 -1 -10 -1 -1 1];b = [0; 0];Aeq=[1 1 1 1];beq=[1];lb = zeros(4,1);然后调用linprog 函数:[x,fval] = linprog(f,A,b,Aeq,beq,lb);x =0.50000.25000.00000.2500fval =-0.1300最优值为-0.13,与上面的结果一致,说明程序正确。
使用C语言实现单纯形法求解线性规划问题

请输入初始基变量的数字代码 num 矩阵: 0.00 0.00 -1.00 0.00 -0.20
所得解3 已经是最4 优解! 5 --------------------------------------------------------------------------
最优解请为输:入方程组右边的值矩阵 b:
for(j=0;j<n;j++)
printf("%8.2f ",A[i][j]);
printf("\n");
}
printf("\n--------------------------------------------------------------------------\n");
printf("\t\t\t");
第 2 页 共 14 页
自动化系上机实验报告(课程名称:运筹学)
学生姓名:
找出初始基可行
解列出初始单纯
形表 计算校验数
学号:
计算新的单纯形 表
所有δ j<=0?
对于某个δ j>0,是否存在 Pj<=0 确定为入基变量
确定出基变量
已得最优解,结 束
无最优解,结 束
2、单纯形算法程序的规格说明 各段代码功能描述: (1)、定义程序中使用的变量 #include<stdio.h> #include<math.h> #define m 3 /*定义约束条件方程组的个数*/ #define n 5 /*定义未知量的个数*/
4/23/2021 7:33:32 AM
第 9 页 共 14 页
自动化系上机实验报告(课程名称:运筹学)
线性规划实验报告

一、实验目的通过本次实验,了解线性规划的基本原理和方法,掌握线性规划模型的建立和求解过程,提高解决实际问题的能力。
二、实验内容1. 线性规划模型的建立2. 利用Lingo软件进行线性规划模型的求解3. 分析求解结果,进行灵敏度分析三、实验步骤1. 建立线性规划模型以某公司生产问题为例,建立线性规划模型。
设该公司有三种产品A、B、C,每种产品分别需要原材料X1、X2、X3,且原材料的价格分别为p1、p2、p3。
公司拥有一定的生产设备,每种产品的生产需要消耗一定的设备时间,设备时间的价格为p4。
设A、B、C产品的生产量分别为x1、x2、x3,原材料消耗量分别为y1、y2、y3,设备使用量分别为z1、z2、z3。
目标函数:最大化利润Z = p1x1 + p2x2 + p3x3 - p4(z1 + z2 + z3)约束条件:(1)原材料消耗限制:y1 ≤ 10x1,y2 ≤ 8x2,y3 ≤ 5x3(2)设备使用限制:z1 ≤ 6x1,z2 ≤ 4x2,z3 ≤ 3x3(3)非负限制:x1 ≥ 0,x2 ≥ 0,x3 ≥ 0,y1 ≥ 0,y2 ≥ 0,y3 ≥ 0,z1 ≥ 0,z2 ≥ 0,z3 ≥ 02. 利用Lingo软件进行线性规划模型的求解打开Lingo软件,按照以下步骤输入模型:① 在“Model”菜单中选择“Enter Model”;② 输入目标函数:@max = p1x1 + p2x2 + p3x3 - p4(z1 + z2 + z3);③ 输入约束条件:@and(y1 <= 10x1, y2 <= 8x2, y3 <= 5x3);@and(z1 <= 6x1, z2 <= 4x2, z3 <= 3x3);@and(x1 >= 0, x2 >= 0, x3 >= 0, y1 >= 0, y2 >= 0, y3 >= 0, z1 >= 0, z2 >= 0, z3 >= 0);④ 在“Model”菜单中选择“Solve”进行求解。
运筹学2-对偶规划(天津理工大学经管系)

0
B-1A
B-1
B-1b
单纯形表和对偶(2)
原始问题 对偶问题
min z=CTX s.t. AX ≤ b X ≥0
引进松弛变量
max y=bTW s.t. ATW≤C W≤0
引进松弛变量
min z=CTX s.t. AX+XS=b X, XS≥0
max y=bTW s.t. ATW+WS=C W ≤0, WS≥0
Y,Ys
XTYS=0 , YTXS=0
互补松弛关系
原始问题和对偶问题变量、松弛变量的维数 max z=CX s.t. AX+XS=b X, XS ≥0 max w=Yb s.t. YA−YS=C Y, YS ≥0
n n X m Y m XS
A
YS
I
= b
AT
−I
= C
XTYS=0 YTXS=0
m
n
对偶的定义
max w= -Yb s.t. -YA≤-C Y ≥0
2、可行解的目标函数值之间的关系(弱对偶定理) 弱对偶定理) 弱对偶定理 设XF、YF分别是原始问题和对偶问题的可行解
z=CXF ≤YAXF ≤ YFb=w
3、最优解的目标函数值之间的关系(强对偶定理 强对偶定理) 强对偶定理 设X*、Y*分别是原始问题和对偶问题的最优解
1
0
z 1
A
X C B T B -1 A-C T
I
XS C B T B -1
b
RHS C B T B -1 b
0
z 1
B -1 A
X W ST
B -1
XS WT
B -1 b
RHS C BTB -1b
数学实验报告——利用MALTAB进行线性规划

数学实验报告——利用M A L T A B进行线性规划(总12页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--数学实验报告——利用MALTAB进行线性规划实验六线性规划一、债券投资㈠问题描述给定可供购进的证券以及其信用等级、到期年限、收益。
市政证券的收益可以免税,其他证券的收益需按50%的税率纳税。
此外还有以下限制:(1) 政府及代办机构的证券总共至少要购进400万元;(2) 所购证券的平均信用等级不超过1.4;(3) 所购证券的平均到期年限不超过5年。
1、若经理有1000万元资金,应如何进行投资?2、如果能以2.75%的利率借到不超过100万元资金,该经理应如何操作?3、在1000万元资金情况下,若证券A的税前收益增加为4.5%,投资应够改变?若证券C的税前收益减少为4.8%,投资应否改变?㈡简要分析本题是一个比较简单的线性规划+扰动分析问题,对所谓问题进行建模,可以得到线性规划如下:设分别购入A、B、C、D、E五种证券a、b、c、d、e万元。
于是对第1问有b+c+d≥4002a+2b+c+d+5e≤1.4(a+b+c+d+e)9a+15b+4c+3d+2e≤5(a+b+c+d+e)a+b+c+d+e≤100a,b,c,d,e≥0max f=4.3%a+5.4%×50%b+5%×50%c+4.4%×50%d+4.5%e对第2问,增设a1,b1,c1,d1,e1分别表示用借来的资金购买证券的金额,于是规划变为b+c+d+b1+c1+d1≥4002(a+a1)+2(b+b1)+c+c1+d+d1+5(e+e1)≤1.4(a+b+c+d+e+a1+b1+c1+d1+e1) 9(a+a1)+15(b+b1)+4(c+c1)+3(d+d1)+2(e+e1)≤5(a+b+c+d+e+a1+b1+c1+d1+e1)a+b+c+d+e≤1000a1+b1+c1+d1+e1≤100a,b,c,d,e,a1,b1,c1,d1,e1≥0max f=4.3%(a+a1)+5.4%×50%(b+b1)+5%×50%(c+c1)+4.4%×50%(d+d1)+4.5%(e+e1)−2.75%(a1+b1+c1+d1+e1)对第三问,仅需将第一问中的规划做一点修改即可。
单纯形算法实验报告

x disp('输出线性规划问题的最优值') minf case 0 %有可行解但没有最优值 disp('输出可行解对应的单纯形表') optmatrx disp('输出可行解') x disp('输出线性规划问题的最优值') minf case -1 %没有可行解 disp('没有可行解') disp('输出最优解对应的单纯形表') optmatrx=[] disp('输出最优解') x=[] disp('输出线性规划问题的最优值') minf=-inf end
1 0 0 s = 2 1 0 0 >> dcxsf() 请输入约束中的系数矩阵 A=[-1 0 1 0 0;0 1 0 1 0;-1 2 0 0 1] 请输入约束中的常数向量 b=[4 3 8] 请输入目标函数中的系数向量 c=[-2 -5 0 0 0] i= 1 j= 3 输入的约束中的常数向量b为单行矩阵,已将其转化为单列矩阵 有可行解但没有最优值 flag =
end end A1(x1,1)=i; %将列数既对应的非基变量转换为基变量 decide=find(g1(1,[1:m+n])>0); %再进行查找 end if g1(1,s1)>0 %无解情况 flag=-1; end if g1(1,s1)==0 g1(1,:)=[]; for i6=1:m A(:,n+1)=[]; end for i6=1:m c(n+1)=[]; end decide=find(A1(1:m,1)>n); %查找是否有人工变量 if ~isempty(decide) while ~isempty(decide) x1=decide(1); %存放的是人工变量的行数 text=find(A(x1,1:n)~=0); %该行的所有元素都不为零的列坐标 if isempty(text) decide(1)=[]; A1(x1,:)=[]; A(x1,:)=[]; m=m-1; else i=text(1); %i保存的是列数 A(x1,:)=A(x1,:)/A(x1,i); A1(x1,1)=i; c(1,:)=c(1,:)+(-1*c(1,i)*A(x1,:)); for i1=1:m if i1~=x1 A(i1,:)=A(i1,:)+(-1*A(i1,i)*A(x1,:));
单纯形法3

实验报告书实验名称用单纯形法解决线性规划问题的Matlab程序院(系、部、中心)电力工程学院专业电气工程及其自动化班级学生姓名学号指导教师一,实验的目的用单纯形法解决线性规划问题。
二,实验的理论基础对单纯形法的简单介绍以下为线性规划的标准形式,假设有n个变量和m个约束。
可以将标准形式的线性规划转化为松弛形式,以方便运算。
在原来n个变量,m个约束的线性规划中,加入m个新的变量,将原来的不等式化为等式:当然,此时依然成立。
我们将这些变量称为基变量,它们构成的集合记为B。
将这些变量称为非基变量,它们构成的集合记为N。
简单地理解,非基变量能够由基变量唯一确定。
在这样的定义下,线性规划的松弛形式可以写为如下形式:因此,线性规划的松弛形式可以由v, c, A, b, N, B唯一确定,其中v是实数,c和b是长度为n+m的向量,A是(n+m)*(n+m)的矩阵。
N, B是整数集合,分别表示非基变量集合以及基变量集合。
转轴操作是单纯形法中的核心操作,其作用是将一个基变量与一个非基变量进行互换。
可以将转轴操作理解为从单纯形上的一个顶点走向另一个顶点。
设变量属于B (基变量),变量属于N(非基变量),执行转轴操作pivot(d,e)之后,将变为非基变量,相应地将变为基变量。
具体地说,一开始我们有移项,得如果,我们有将此式代入其他的约束等式以及目标函数,我们就实现了与在基变量和非基变量上的互换。
如果b向量所有元素非负,则显然我们只需要令所有的变量等于0,就可以得到一个可行解。
在这种情况下,通过下述最优化过程,我们可以得到该线性规划的最优解,或者指出该线性规划的最优解为无穷大(不存在)。
1. 任取一个非基变量,使得。
2. 选取一个基变量,使得,且最小化3. 执行转轴操作pivot(d, e),并转到第一步继续算法。
例列单纯形表(即矩阵):然后从c所在行的正数中最大的一个所对应的变量作为基变量,因为这里两者一样,不妨选为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
学院(系)名称:计算机与通信工程学院 姓名 学号
专业
信息与计算科学
班级
教学 1 班 实验项目
单纯形法求解线性规划问题 课程名称 线性规划
课程代码 0665096
实验时间 2014年5月5、9、12、16、19
日
实验地点 7-219 批改意见 成绩
教师签字:
软件环境:VC++6.0 实验目的:
用单纯形法解决线性规划的实际例题 实验内容: 程序源代码如下:
例题:某工厂计划生产甲、乙两种产品,生产1kg 甲产品需耗煤9t 、电力4kW ·h 、油3t ;生产1kg 乙产品需耗煤4t 、电力5kW ·h 、油10t 。
该工厂现有煤360t 、电力200kW ·h 、油300t 。
已知甲产品每千克售价7万元,乙产品每千克售价12万元。
在上述条件下决定生产方案,使总收入最大。
解:建立线性规划问题的数学模型,设决策变量:1x 为甲产品的产量,2x 为乙产品的产量。
确定目标函数: 总收入 Z=71x +122x
限制约束条件:1212
12129436045200310300,0
x x x x x x x x +≤⎧⎪+≤⎪⎨+≤⎪⎪≥⎩
(1) 用单纯形法求解,首先把上述模型化整理成标准形式,对上述线性规划问题的数学模型式添加
松弛变量:3450,0,0x x x ≥≥≥。
相应的价格系数3450,0,0C C C ===。
(345,,x x x 没利用,
print();
p=danchunxing2(q);
printf("\np=%d,q=%d",p,q);
if(q==-1) break;
danchunxing3(p,q);
}
}
运行结果如下:
实验心得:
通过这个实验,让我对单纯形法有了更进一步的理解,对以后的学习、工作都有较大的帮助,谢谢老师,谢谢运筹学。