单纯形法matlab求解有约束优化问题实验报告
- 格式:docx
- 大小:36.95 KB
- 文档页数:3
一、线性规划——单纯形法程序设计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,与上面的结果一致,说明程序正确。
北京联合大学实验报告项目名称:运筹学专题实验报告学院:自动化专业:物流工程班级: 1201B 学号:2012100358081 姓名:管水城成绩:2015 年 5 月 6 日实验二:MATLAB 编程单纯形法求解一、实验目的:(1)使学生在程序设计方面得到进一步的训练;,掌握Matlab (C 或VB)语言进行程序设计中一些常用方法。
(2)使学生对线性规划的单纯形法有更深的理解. 二、实验用仪器设备、器材或软件环境 计算机, Matlab R2006三、算法步骤、计算框图、计算程序等本实验主要编写如下线性规划问题的计算程序:⎩⎨⎧≥≥≤0,0..min b x b Ax t s cx 其中初始可行基为松弛变量对应的列组成. 对于一般标准线性规划问题:⎩⎨⎧≥≥=0,0..min b x b Ax t s cx1.求解上述一般标准线性规划的单纯形算法(修正)步骤如下:对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。
设初始基为B,然后执行如下步骤: (1).解B Bx b=,求得1B x B b -=,0,N B B x f c x ==令计算目标函数值 1(1,2,...,)i m B b i -=i 以b 记的第个分量(2).计算单纯形乘子w,BwB C =,得到1B wC B -=,对于非基变量,计算判别数1i i i B i i z c c B p c σ-=-=-,可直接计算σ=1B A c c B --令max{}k i Rσσ∈=,R 为非基变量集合若判别数0k σ≤ ,则得到一个最优基本可行解,运算结束;否则,转到下一步 (3).解k kBy p =,得到1k k y B p -=;若0k y ≤,即k y 的每个分量均非正数, 则停止计算,问题不存在有限最优解,否则,进行步骤(4).确定下标r,使{}:0min ,0t rrktktk b b tk y y t y y >=>且rB x 为离基变量,,r k B x p k 为进基变量,用p 替换得到新的基矩阵B,还回步骤(1);2、计算框图为:图1 3.计算程序(Matlab):A=input('A=');b=input('b=');c=input('c=');format rat%可以让结果用分数输出[m,n]=size(A);E=1:m;E=E';F=n-m+1:n;F=F';D=[E,F]; %创建一个一一映射,为了结果能够标准输出X=zeros(1,n); %初始化Xif(n<m) %判断是否为标准型fprintf('不符合要求需引入松弛变量')flag=0;elseflag=1;B=A(:,n-m+1:n); %找基矩阵cB=c(n-m+1:n); %基矩阵对应目标值的cwhile flagw=cB/B; %计算单纯形乘子,cB/B=cB*inv(B),用cB/B的目的是,为了提高运行速度。
北京联合大学实验报告项目名称: 运筹学专题实验报告学院: 自动化专业: 物流工程班级: 1201B 学号:21姓名: 管水城成绩: 2015 年 5 月 6 日实验二:MATLAB 编程单纯形法求解一、实验目的:(1)使学生在程序设计方面得到进一步的训练;,掌握Matlab (C 或VB)语言进行程序设计中一些常用方法。
(2)使学生对线性规划的单纯形法有更深的理解、二、实验用仪器设备、器材或软件环境计算机, Matlab R2006三、算法步骤、计算框图、计算程序等本实验主要编写如下线性规划问题的计算程序:⎩⎨⎧≥≥≤0,0..min b x b Ax t s cx其中初始可行基为松弛变量对应的列组成、对于一般标准线性规划问题:⎩⎨⎧≥≥=0,0..min b x b Ax t s cx1.求解上述一般标准线性规划的单纯形算法(修正)步骤如下:对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。
设初始基为B,然后执行如下步骤:(1)、解B Bx b =,求得1B x B b -=,0,N B B x f c x ==令计算目标函数值 1(1,2,...,)i m B b i -=i 以b 记的第个分量(2)、计算单纯形乘子w, BwB C =,得到1B w C B -=,对于非基变量,计算判别数1i i i B i i z c c B p c σ-=-=-,可直接计算σ=1B A c c B --令 max{}k i R σσ∈=,R 为非基变量集合若判别数0k σ≤ ,则得到一个最优基本可行解,运算结束;否则,转到下一步(3)、解k k By p =,得到1k k y B p -=;若0k y ≤,即k y 的每个分量均非正数, 则停止计算,问题不存在有限最优解,否则,进行步骤(4)、确定下标r,使 {}:0min ,0t rrk tk tk b b tk y y t y y >=>且r B x 为离基变量,,r k B x p k 为进基变量,用p 替换得到新的基矩阵B,还回步骤(1);2、计算框图为:图1 3.计算程序(Matlab):A=input('A=');b=input('b=');c=input('c=');format rat%可以让结果用分数输出[m,n]=size(A);E=1:m;E=E';F=n-m+1:n;F=F';D=[E,F]; %创建一个一一映射,为了结果能够标准输出X=zeros(1,n); %初始化Xif(n<m) %判断就是否为标准型fprintf('不符合要求需引入松弛变量')flag=0;elseflag=1;B=A(:,n-m+1:n); %找基矩阵cB=c(n-m+1:n); %基矩阵对应目标值的cwhile flagw=cB/B; %计算单纯形乘子,cB/B=cB*inv(B),用cB/B的目的就是,为了提高运行速度。
在Matlab中使用优化算法解决约束问题导言优化算法在工程和科学领域中扮演着重要的角色。
优化问题旨在找到给定约束条件下的最优解。
而在Matlab中,有许多强大而高效的工具和函数可以帮助我们解决这些问题。
本文将介绍如何在Matlab中使用优化算法来解决约束问题,以及一些常用的技巧和方法。
一、优化问题概述优化问题可以被定义为找到使得目标函数取得极值的一组变量的取值。
在很多实际问题中,我们需要在满足一定的约束条件下寻找最优解。
这些约束条件可以是等式约束或者不等式约束。
在Matlab中,我们可以使用优化工具箱来解决这些问题。
Optimization Toolbox 提供了大量的函数和算法,包括线性规划、非线性规划、整数规划等等。
其中,非线性规划问题是最常见和复杂的问题之一。
下面将介绍如何使用这些工具来解决不同类型的优化问题。
二、线性规划问题在线性规划问题中,目标函数和约束条件都是线性的。
通过使用Matlab的线性规划函数linprog,我们可以轻松地解决这类问题。
假设我们要最小化一个目标函数,如下:minimize f(x) = c'x约束条件为:Ax ≤ bAeqx = beqlb ≤ x ≤ ub其中,c是一个向量,A和Aeq是矩阵,b和beq是向量,lb和ub是向量或者标量。
下面是一个实例,我们希望在满足一定约束条件下最小化目标函数:目标函数:f(x) = -2x1 - 3x2约束条件:3x1 + 4x2 ≤ 14, 2x1 + x2 ≤ 8, x1 ≥ 0, x2 ≥ 0首先,我们需要创建目标函数和约束条件的矩阵和向量。
c = [-2; -3]; % 目标函数系数A = [3, 4; 2, 1]; % 不等式约束矩阵b = [14; 8]; % 不等式约束常数lb = [0; 0]; % 变量下界然后,使用linprog函数求解线性规划问题。
[x, fval] = linprog(c, A, b, [], [], lb);最后,输出最优解和目标函数值。
修正单纯形法求解约束优化问题姓名王铎学号2007021271班级机械078日期2010/6/23 一.问题分析求解约束优化问题中,假如目标函数和约束条件都是线性的,像这类约束函数和目标函数都是线性函数的优化问题称作线性规划问题。
从实际问题中建立数学模型一般有以下三个步骤:1. 根据影响所要达到目的的因素找到决策变量;2. 由决策变量和所在大道目的之间的函数关系确定目标函数;3. 有决策变量所受的限制条件确定决策变量所要满足的约束条件;求解线性规划问题的基本方法是单纯形法,而本文研究的是修正单纯形法。
1965 年由J.A.Nelder 等提出。
是在基本单纯形优化法的基础上,引入了反射、扩展与收缩等操作规则,变固定步长推移单纯形为可变步长推移单纯形,在保证优化精度的条件下,加快了优化速度。
是各种单纯形优化法在分析测试中应用最广的一种。
二.数学模型1、线性规划问题的formalization问题(1.1) 称为线性规划问题:x= arg min_x c A T xs.t. Ax=bx>=0 (1.1)其中x为n维列向量,A为m*n的矩阵,b和c分别为m,n维的常数向量。
任意一个线性不等式组约束下求解线性函数的最大最小值问题都可以归结到问题(1.1) 来。
比如A(i,:) x <= b(i)<=>A(i,:) x + y(i) = b(i)y(i)>=0 (1.2)A(i,:) x >= b(i)<=>A(i,:) x - y(i) = b(i)y(i)>=0 (1.3)x<=>x=x'-x"x'>=0x">=0 (1.4)2、单纯形法设m<n即变量个数大于约束的个数。
(否则若m=n则(1.1)的约束可能唯一确定X,最优问题就没有意义,若m>n则可能符合约束的x 不存在,最优问题同样没有意义。
实验报告(单纯形法的matlab程序)实验一:线性规划单纯形算法一、实验目的通过实验熟悉单纯形法的原理,掌握Matlab 循环语句的应用,提高编程的能力和技巧。
二、算法对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。
设初始基为B,然后执行如下步骤:(1).解B Bx b =,求得1B x B b -=,0,N B B x f c x ==令计算目标函数值 1(1,2,...,)i mB b i -=i 以b 记的第个分量(2).计算单纯形乘子w , B wB C =,得到1B w C B -=,对于非基变量,计算判别数1i i i B i i z c c B p c σ-=-=-,令 max{}k i i i Rz c σ∈=-,R 为非基变量集合若判别数0k σ≤ ,则得到一个最优基本可行解,运算结束;否则,转到下一步(3).解k k By p =,得到1kk y B p -=;若0k y ≤,即k y 的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4).(4).确定下标r,使{}:0min ,0t rrk tk tk b b tk y y t y y >=>且r B x 为离基变量。
k x 为进基变量,用k p 替换r B p ,得到新的基矩阵B ,返回步骤(1)。
对于极大化问题,可以给出完全类似的步骤,只是确定进基变量的准则不同。
对于极大化问题,应令min{}k k j j z c z c -=-四、计算框图是否是否五、计算程序function [x,f]=zuiyouhua(A,b,c)初始可行解B 令1,0,B N B B x B b b x f c x -==== 计算单纯形乘子1B w c B -=,计算判别数,i j j wp c j R σ=-∈(非基变量)令max{,}k j j R σσ=∈ 0?k σ≤ 得到最优解解方程k k By p =,得到1k k y B p -=。
运筹学实验报告一、实验目的:通过实验熟悉单纯形法的原理,掌握matlab循环语句的应用,提高编程的能力和技巧,体会matlab在进行数学求解方面的方便快捷。
二、实验环境:Matlab2012b,计算机三、实验内容(包含参数取值情况):构造单纯形算法解决线性规划问题Min z=cxs.t. Ax=bxj>=0,j=1,…,n函数功能如下:function[S,val]=danchun(A1,C,N)其中,S为最优值,Val为最优解,A1为标准形式LP问题的约束矩阵及最后一列为资源向量(注:资源向量要大于零),A1=[A+b];C是目标函数的系数向量,C=c;N为初始基的下标(注:请按照顺序输入,若没有初始基则定义N=[])。
先输入A1,C,N三个必要参数,然后调用danchun(A1,C,N)进行求解。
在此函数中,首先判断N的长度是否为空,若为空,则flag=1,进入初始解问题的迭代求值,添加辅助问题,构建单纯形表,求g所对应的RHS值,若其>0,则返回该问题无解,若其=0,则返回A1,C,N三个参数,继续构造单纯形表求解。
A1为经过变换后的系数及资源向量,C为单纯形表的第一行,N为经过辅助问题求解之后的基的下标。
否则,直接构建单纯形表,对该问题进行求解,此时flag=2,多次迭代后找到解。
另外,若在大于零的检验数所对应的系数均小于零时,会显示“此问题无界”。
若找到最优解和最优值时,会输出“val”和“S=”以及具体数值。
四、源程序(在matlab中输入edit后回车,写在.M文件中,并保存为danchun.M)function[S,val]=danchun(A1,C,N)if(length(N)==0)gN=zeros(1,length(A1(:,1)));gC=[-C,gN,0];%原文题的检验数的矩阵G=[zeros(1,length(C)),-ones(1,length(gN)),0];val=zeros(1,length(C));%val为最优解;for i=(length(C)+1):length(C)+length(A1(:,1))%生成基变量gN(i-length(C))=i;endNn=gN;%%%%%%%ll=zeros(1,length(N));%比值最小原则%生成除了最上端两行的表的矩阵gb=A1(:,length(C)+1);A1(:,length(C)+1)=[];l=zeros(length(gN),length(gN));gA=[A1,l,gb];for i=1:length(gb)gA(i,gN(i))=1;endfor i=1:length(gN)%J为基本可行基所对应的检验数J(i)=G(gN(i));endfor i=1:length(gN)%找到基本可行基的检验数,将其赋值为0 if(J(i)~=0)G=G-(J(i)/gA(i,gN(i)))*gA(i,:);endendflag=1;elseflag=2;A=A1;Z=[-C,0];%单纯形表的第一行val=zeros(1,length(C));%val为最优解;ll=zeros(1,length(N));%比值最小原则end%%初始解问题while flag==1for i=1:length(gN)%J为基本可行基所对应的G的检验数J(i)=G(gN(i));JZ(i)=Z(gN(i));%JZ为基本可行基所对应的Z的检验数endfor i=1:length(gN)%找到基本可行基的检验数,将其赋值为0 if(J(i)~=0)G=G-(J(i)/gA(i,gN(i)))*gA(i,:);Z=Z-(JZ(i)/gA(i,gN(i)))*gA(i,:);endG1=G;%G1为检验数G1(:,length(G1))=[];D=max(G1);%找到检验数的最大值if(D<=0)%检验数都小于0if(G(length(G))>=1)disp('此情况无解');flag=0;elseif(G(length(G))>=0)for i=1:length(gN)if(max(gN)<=length(A1(1,:)));flag=2;for j=1:length(Nn)a=Nn(1);gA(:,a)=[];Z(a)=[];endA=gA;N=gN;break;endendendendelse%检验数大于0for i=1:length(G)if(G(i)==D)%找到最大的那个检验数所对应的元素for j=1:length(gN)if(gA(j,i)>0)ll(j)=gA(j,length(G))/gA(j,i);%求比值elsell(j)=10000;endendd=min(ll);for k=1:length(ll)%找到进基和离基if(ll(k)==d)gN(k)=i;gA(k,:)=gA(k,:)/gA(k,i);for m=1:k-1gA(m,:)=-(gA(m,i)/gA(k,i))*gA(k,:)+gA(m,:);endfor n=k+1:length(ll)gA(n,:)=-(gA(n,i)/gA(k,i))*gA(k,:)+gA(n,:);endbreak;endendendendendendwhile(flag==2)for i=1:length(N)%J为基本可行基所对应的检验数J(i)=Z(N(i));endfor i=1:length(N)%找到基本可行基的检验数,将其赋值为0if(J(i)~=0)Z=Z-(J(i)/A(i,N(i)))*A(i,:);endendZ1=Z;%Z1为检验数Z1(:,length(Z1))=[];D=max(Z1);%找到检验数的最大值if(D<=0)%检验数都小于0disp('已找到最优解和最优值')for i=1:length(N)val(N(i))=A(i,length(Z));endS=Z(length(Z));disp('val');disp(val);flag=0;else%检验数大于0for i=1:length(Z)if(Z(i)==D)%找到最大的那个检验数所对应的元素for j=1:length(N)if(A(j,i)>0)ll(j)=A(j,length(Z))/A(j,i);%求比值elsell(j)=10000;endendd=min(ll);if(d==10000)disp('此问题无界')flag=0;break;endfor k=1:length(ll)%找到进基和离基if(ll(k)==d)N(k)=i;A(k,:)=A(k,:)/A(k,i);for m=1:k-1A(m,:)=-(A(m,i)/A(k,i))*A(k,:)+A(m,:);endfor n=k+1:length(ll)A(n,:)=-(A(n,i)/A(k,i))*A(k,:)+A(n,:);endbreakendendendendendend五、运行结果与数据测试参考例题:例1:Min z=3x1+x2+x3+x4s.t. -2x1+2x2+x3=43x1+2x+x4=6Xj>=0,j=1,2,3,4在workspace中写入,形式如下:>> A=[-2 2 1 0 43 1 0 1 6]A =-2 2 1 0 43 1 0 1 6>> C=[3 1 1 1]C =3 1 1 1>> N=[3 4]N =3 4>> danchun(A,C,N)已找到最优解和最优值val0 2 0 4ans =6例2:初始解问题Min z=5x1+21x3s.t. x1-x2+6x3-x4=2x1+x2+2x3-x5=1xj>=0,j=1,…,5在workspace中写入,形式如下:>> A=[1 -1 6 -1 0 21 12 0 -1 1]A =1 -1 6 -1 0 21 12 0 -1 1 >> C=[5 0 21 0 0]C =5 0 21 0 0>> N=[]N =[]>> danchun(A,C,N)已找到最优解和最优值val0.5000 0 0.2500 0 0ans =7.7500六、求解实际问题(即解决附件中的实验题目)实验题目列出下列问题的数学模型,并用你自己的单纯形算法程序进行计算,最后给出计算结果。
最近在上最优理论这门课,刚开始是线性规划部分,主要的方法就是单纯形方法,学完之后做了一下大M 算法和分段法的仿真,拿出来与大家分享一下。
单纯形方法是求解线性规划问题的一种基本方法。
单纯形方法基本步骤如下: 1) 将所给的线性规划问题化为标准形式:min ()..0Tf x c x s t Ax bx ==≥s.t.是英文subject to 的简写,意思是受约束,也就是说第一个方程(目标函数)受到后面两个方程的约束。
对于求最大值问题可以将目标函数加负号转换为最小值问题。
max ()min ()T T f x c x f x c x =⇒=-其他的问题就是将实际问题中的不等式约束改为等式约束,主要方法是引进松弛变量和剩余变量,以及将自有变量转换为非负变量。
①对于不等式1b ,1,2,nij ji j a xi m =≤=∑ ,引入松弛变量将其变为等式形式如下:1b ,1,2,0,1,2,nij jn i i j n i a xx i mx i m+=++==≥=∑②对于不等式1b ,1,2,nij ji j a xi m =≥=∑ ,引入剩余变量将其变为等式形式如下:1b ,1,2,0,1,2,nij jn i i j n i a xx i mx i m+=+-==≥=∑③若变量为自有变量(可取正、负或零,符号无限制),则引入两个非负变量将其表示如下:j j j j j x x x x x '''⎧=-⎪'≥⎨⎪''≥⎩ 2)找出一个初始可行基B ,作出单纯形表,这里假设输入的线性规划问题已经有初始可行基。
0T c S A b ⎡⎤=⎢⎥⎢⎦⎣3)测试所有的检验数(目标函数的系数C ),记录检验数中的正数,若全部小于等于0,则已经找到最优解,计算终止。
否则转至4)。
4)测试所有为正的检验数,若在单纯性表中,其所在的列中其他元素全部小于等于0,则此问题无最优解,计算终止,否则转至5)。
Matlab优化设计报告姓名:班级:学号:指导老师:一、无约束优化在Matlab软件中,求解无约束规划的常用命令是:x=fminunc(‘fun’,x0)其中,fun函数应预先定义到M文件中,并设置初始解向量为x0。
题目:求解1.首先建立函数文件zuoye1.m内容为:function f=zuoye1(x)%建立function函数f=3/2*x(1)^2+1/2*x(2)^2-x(1)*x(2)-2*x(1)%给出目标函数以zuoye1为文件名保存此函数文件。
如图:2.在命令窗口输入:X0=[-2;4]%给定初始点为X(0)=[-2;4]x=fminunc('zuoye1',x0)%将X0取值带入zuoye1进行无约束求解即可获得结果结果显示:……即极小值为-1,是x1=1,x2=1时取得。
二.有约束优化在Matlab优化工具箱中,linprog函数是使用单纯形法求解线性规划问题的函数。
题目:解题步骤:1.先要将线性规划变为如下形式:得到:2.然后建立M文件zuoye2.m如下:c=[-3;1;1];%目标函数系数向量A=[1 -2 1;4 -1 -2];%约束条件矩阵b=[11;-3];%约束函数最右边的数值向量Aeq=[2,0,-1];%等式约束条件的系数矩阵beq=[-1];%等式约束条件的系数向量LB=[0;0;0];(zeros(3,1))%X下界为0[x,fval]=linprog(c,A,b,Aeq,beq,LB,[])%x表示最优解向量;fval表示最优值,fval是目标函数在解x处的值并进行求解以zuoye2为文件名保存此函数文件。
如图:运行zuoye2 M文件,在命令窗口输入zuoye2可以得到:X=4.0000同时得到fval=-21.00009.0000对应到原来的线性规划中即知目标函数的最大值为2,此时x1=4,x2=1,x3=9。
个人感想在优化设计课堂上,老师为我们详细讲解了matlab的操作方法与编程思想,在实验课上,老师对同学们的疑问都详细讲解。
最近在上最优理论这门课,刚开始是线性规划部分,主要的方法就是单纯形方法,学完之后做了一下大M 算法和分段法的仿真,拿出来与大家分享一下。
单纯形方法是求解线性规划问题的一种基本方法。
单纯形方法基本步骤如下: 1) 将所给的线性规划问题化为标准形式:min ()..0Tf x c x s t Ax bx ==≥s.t.是英文subject to 的简写,意思是受约束,也就是说第一个方程(目标函数)受到后面两个方程的约束。
对于求最大值问题可以将目标函数加负号转换为最小值问题。
max ()min ()T T f x c x f x c x =⇒=-其他的问题就是将实际问题中的不等式约束改为等式约束,主要方法是引进松弛变量和剩余变量,以及将自有变量转换为非负变量。
①对于不等式1b ,1,2,nij ji j a xi m =≤=∑ ,引入松弛变量将其变为等式形式如下:1b ,1,2,0,1,2,nij jn i i j n i a xx i mx i m+=++==≥=∑②对于不等式1b ,1,2,nij ji j a xi m =≥=∑ ,引入剩余变量将其变为等式形式如下:1b ,1,2,0,1,2,nij jn i i j n i a xx i mx i m+=+-==≥=∑③若变量为自有变量(可取正、负或零,符号无限制),则引入两个非负变量将其表示如下:j j j j j x x x x x '''⎧=-⎪'≥⎨⎪''≥⎩ 2)找出一个初始可行基B ,作出单纯形表,这里假设输入的线性规划问题已经有初始可行基。
0T c S A b ⎡⎤=⎢⎥⎢⎦⎣3)测试所有的检验数(目标函数的系数C ),记录检验数中的正数,若全部小于等于0,则已经找到最优解,计算终止。
否则转至4)。
4)测试所有为正的检验数,若在单纯性表中,其所在的列中其他元素全部小于等于0,则此问题无最优解,计算终止,否则转至5)。
实验2 单纯形法求解线性规划一、实验目的1. 理解线性规划的概念和基本形式。
2. 熟悉单纯形法的步骤和实现过程。
3. 学会使用Matlab编程求解线性规划问题。
二、实验原理线性规划是一种优化问题,其目标是在一组约束条件下,使目标函数(通常是一个线性函数)最大或最小化。
线性规划具有以下一般形式:$$\begin{aligned}&\underset{x_{1},x_{2},\cdots,x_{n}}{\max }\quadc_{1}x_{1}+c_{2}x_{2}+\cdots+c_{n}x_{n}\\&\text{s.t.}\quad a_{11}x_{1}+a_{12}x_{2}+\cdots+a_{1n}x_{n}\leq b_{1}\\&\quad \quad \quad \,\,\,\quada_{21}x_{1}+a_{22}x_{2}+\cdots+a_{2n}x_{n}\leq b_{2}\\&\quad \quad \quad\quad \quad \quad \vdots \\&\quad \quad \quad \,\,\,\quada_{m1}x_{1}+a_{m2}x_{2}+\cdots+a_{mn}x_{n}\leq b_{m}\\&\quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad x_{1},x_{2},\cdots,x_{n}\geq 0\end{aligned}$$其中,$x_{1},x_{2},\cdots,x_{n}$表示决策变量;$c_{1},c_{2},\cdots,c_{n}$是目标函数的系数;$a_{i1},a_{i2},\cdots,a_{in}$($i$=1,2,...,m)是限制条件的系数,$b_{1},b_{2},\cdots,b_{m}$是限制条件右侧的常数。
班级:学号:姓名:实验日期:2015年10月10日●实验名称:有约束最优化●实验目的:1.了解Matlab软件的基本操作2.学会使用Matlab求解有约束最优化问题3.学会建立有约束最优化问题的数学模型,将实际问题转化为数学模型4.掌握使用Matlab解有约束优化问题的基本方法与步骤●实验内容:1.某工厂在计划期内要安排生产I、II两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如下表所示该工厂每生产一件产品I可获利2元,每生产一件产品II可获利3元。
问应如何安排计划使该工厂获利最多?该工厂生产产品I x1件,生产产品II x2件,我们可建立如下数学模型:生产产品I 4件,生产产品II 2件,该工厂获利最多142.某厂每日8小时的产量不低于1800件.为了进行质量控制,计划聘请两种不同水平的检验员.一级检验员的标准为:速度25件/小时,正确率98%,计时工资4元/小时;二级检验员的标准为:速度15件/小时,正确率95%,计时工资3元/小时.检验员每错检一次,工厂要损失2元.为使总检验费用最省,该工厂应聘一级、二级检验员各几名?设需要一级和二级检验员的人数分别为x1、x2人,该工厂应聘一级检验员9名、二级检验员0名3.某豆腐店用黄豆制作两种不同口感的豆腐出售。
制作口感较鲜嫩的豆腐每千克需要0.3千克一级黄豆及0.5千克二级黄豆,售价10元;制作口感较厚实的豆腐每千克需要0.4千克一级黄豆及0.2千克二级黄豆,售价5元。
现小店购入9千克一级黄豆和8千克二级黄豆。
问:应如何安排制作计划才能获得最大收益。
设计划制作口感鲜嫩和厚实的豆腐各x1千克和x2千克,可获得收益R元。
得到该问题的线性规划模型制作口感鲜嫩和厚实的豆腐各10千克和15千克,可获得收益最大,为175元。
4.设某工厂有甲、乙、丙、丁四个车间,生产A、B、C、D、E、F六种产品。
根据机床性能和以前的生产情况,得知每单位产品所需车间的工作小时数、每个车间在一个季度工作小时的上限以及单位产品的利润,如下表所示(例如,生产一个单位的A产品,需要甲、乙、丙三个车间分别工作1小时、2小时和4小时)问:每种产品各应该每季度生产多少,才能使这个工厂每季度生产利润达到最大。
热动71 马千里 970669实验八 约束优化实验目的 1.掌握用MA TLAB 优化工具箱解线性规划和非线性规划的方法; 2.练习建立实际问题的线性规划和非线性规划模型。
实验内容3.对)1242424(e min 2212212221x 1++++++x x x x x x x x 初值为(-1,1),增加以下条件求解非线性规划:a. 05.12121≤+--x x x x ,01021≥+x x ;b. 05.12121≤+--x x x x ,01021≥+x x ,0x ,21≥x ;c. 05.12121≤+--x x x x ,01021≥+x x ,021=+x x ;d. 05.12121≤+--x x x x ,01021≥+x x ;用分析梯度计算。
给出最优解、最优值,比较收敛速度,能得到什么结论。
解:按MA TLAB 的constr 函数的要求编制程序如下 a. 05.12121≤+--x x x x ,01021≥+x x ;function [f,g]=fun1(x)f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); g(1)=x(1)*x(2)-x(1)-x(2)+1.5; g(2)=-x(1)*x(2)-10;opt(1)=1;x=constr(‘fun1’,[-1 1],opt)得出最优解x=[-9.5474 1.0474] 最优值 f=0.0236 迭代次数n=29 b. 05.12121≤+--x x x x ,01021≥+x x ,0x ,21≥x ; v1=[0 0]; opt(1)=1;x=constr(‘fun1’,[-1 1],opt,v1)得出最优解x=[0 1.500] 最优值 f=0.500 迭代次数n=10 c. 05.12121≤+--x x x x ,01021≥+x x ,021=+x x ; function [f,g]=fun2(x)f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); g(1)=x(1)*x(2)-x(1)-x(2)+1.5; g(2)=-x(1)*x(2)-10; g(3)=x(1)+x(2); g(4)=-x(1)-x(2);opt(1)=1;x=constr(‘fun2’,[-1 1],opt)得出最优解x=[-1.2247 1.2247] 最优值 f=8.500 迭代次数n=13 d. 05.12121≤+--x x x x ,01021≥+x x ;用分析梯度计算。
单纯形法matlab求解有约束优化问题实验报告
一、实验目的
本次实验旨在通过使用MATLAB软件中的单纯形法,求解约束优化问题,熟悉单纯形法的基本原理和操作方法,并掌握MATLAB软件中单纯形法的使用。
二、实验原理
1.单纯形法基本原理
单纯形法是一种线性规划问题的求解方法,其基本思想是通过不断地
移动一个n维空间中的“单纯形”(即一个n+1个顶点组成的凸多面体),寻找到目标函数最小值或最大值所对应的顶点。
在每次移动时,都会将当前顶点与其它顶点进行比较,选择一个更优秀的顶点来替换
当前顶点,并不断重复这个过程直到找到最优解为止。
2.单纯形法步骤
(1)确定初始可行解;
(2)检查当前可行解是否为最优解;
(3)如果当前可行解不是最优解,则选择一个非基变量进入基变量集合,并确定该变量使目标函数值下降最多;
(4)计算新可行解;
(5)判断新可行解是否存在并继续执行步骤2-4直到找到最优解。
三、实验步骤
1.建立约束优化问题模型
本次实验采用如下线性规划问题模型:
$max\quad z=2x_1+3x_2$
$s.t.\quad x_1+x_2\leq 4$
$x_1\geq 0,x_2\geq 0$
2.使用MATLAB软件求解
(1)打开MATLAB软件,新建一个m文件;
(2)输入以下代码:
%建立约束优化问题模型
f=[-2,-3];
A=[1,1];
b=[4];
lb=zeros(2,1);
[x,fval]=linprog(f,A,b,[],[],lb);
(3)保存并运行该m文件,即可得到最优解。
四、实验结果与分析
根据上述步骤,我们可以得到该线性规划问题的最优解为:
$x_1=3,x_2=1,z=9$。
五、实验总结
本次实验通过使用MATLAB软件中的单纯形法,成功求解了一个约束优化问题,并深入了解了单纯形法的基本原理和操作方法。
通过实践操作,加深了对MATLAB软件中单纯形法的使用和应用。