最优化实验报告(单纯形法的matlab程序,lingo程序)
- 格式:doc
- 大小:174.34 KB
- 文档页数:8
最优化方法及其matlab程序设计
最优化方法是一种利用各种技术,以提高某项工作,工程或系统
的效率为目标,并让其在某些给定基准测试中改善性能的过程。
它可
以用来提高计算机系统的性能,减少加工时间,提高生产率,等等。
Matlab是一种非常适用于最优化的程序设计语言,它拥有许多强
大的分析功能,例如数值分析、线性规划、非线性规划、二次规划、
优化算法、深度学习、图形处理和仿真等。
因此,Matlab可以帮助用
户找到最优解决方案,比如解决所谓的NP难问题,这些问题很难在
“合理”时间内找到最优解。
要在matlab中实现最优化方法,首先要定义和描述优化问题。
然后,选择合适的优化器。
一般来说,FMINCON函数可以满足大多数最优
化问题的要求,因为它可以通过求解约束和非线性问题来实现最优化。
在函数中,用户可以指定具体的约束条件、目标函数、初始解和其他
一些参数,以便更好地进行最优化。
此外,matlab中还提供了其他一些有用的优化函数,可以用于解
决更复杂的问题,包括FMINUNC、FMINBND等。
这些函数都可以实现更
高级的最优化算法,例如迭代算法、模拟退火算法、遗传算法等。
最后,用户还可以使用matlab自带的toolbox来进行最优化,例
如Optimization Toolbox。
这个工具包可以帮助用户调整参数,从而
实现最优解。
同时,它还提供了有关具体优化策略的解释,以便了解
该策略的实现方法以及它的应用范围。
总的来说,matlab可以实现各种最优化方法,无论是简单的还是
复杂的,都可以通过它找到最佳解决方案。
一、线性规划——单纯形法程序设计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,与上面的结果一致,说明程序正确。
实验一:Matlab操作环境熟悉一、实验目的1.初步了解Matlab操作环境。
2.学习使用图形函数计算器命令funtool及其环境。
二、实验内容熟悉Matlab操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使用format命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简单的计算;学会使用who和whos命令查看内存变量信息;学会使用图形函数计算器funtool,并进行下列计算:1.单函数运算操作。
求下列函数的符号导数(1)y=sin(x); (2) y=(1+x)^3*(2-x);求下列函数的符号积分(1)y=cos(x);(2)y=1/(1+x^2);(3)y=1/sqrt(1-x^2);(4)y=(x1)/(x+1)/(x+2)求反函数(1)y=(x-1)/(2*x+3); (2) y=exp(x); (3) y=log(x+sqrt(1+x^2));代数式的化简(1)(x+1)*(x-1)*(x-2)/(x-3)/(x-4);(2)sin(x)^2+cos(x)^2;(3)x+sin(x)+2*x-3*cos(x)+4*x*sin(x);2.函数与参数的运算操作。
从y=x^2通过参数的选择去观察下列函数的图形变化(1)y1=(x+1)^2(2) y2=(x+2)^2(3) y3=2*x^2 (4) y4=x^2+2 (5) y5=x^4 (6)y6=x^2/23.两个函数之间的操作求和(1)sin(x)+cos(x) (2) 1+x+x^2+x^3+x^4+x^5乘积(1)exp(-x)*sin(x) (2) sin(x)*x商(1)sin(x)/cos(x); (2) x/(1+x^2); (3) 1/(x-1)/(x-2);求复合函数(1)y=exp(u) u=sin(x) (2) y=sqrt(u) u=1+exp(x^2)(3) y=sin(u) u=asin(x) (4) y=sinh(u) u=-x实验二:MATLAB基本操作与用法一、实验目的1.掌握用MATLAB命令窗口进行简单数学运算。
最优化方法实验报告Numerical Linear Algebra And ItsApplications学生所在学院:理学院学生所在班级:计算数学10-1学生姓名:甘纯指导教师:单锐教务处2013年5月实验三实验名称:无约束最优化方法的MATLAB实现实验时间: 2013年05月10日星期三实验成绩:一、实验目的:通过本次实验的学习,进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。
二、实验背景:(一)最速下降法1、算法原理最速下降法的搜索方向是目标函数的负梯度方向,最速下降法从目标函数的负梯度方向一直前进,直到到达目标函数的最低点。
2、算法步骤用最速下降法求无约束问题n R()min的算法步骤如下:xxf,a )给定初始点)0(x ,精度0>ε,并令k=0;b )计算搜索方向)()()(k k x f v -∇=,其中)()(k x f ∇表示函数)(x f 在点)(k x 处的梯度;c )若ε≤)(k v ,则停止计算;否则,从)(k x 出发,沿)(k v 进行一维搜索,即求k λ,使得)(min )()()(0)()(k k k k v x f v x f λλλ+=+≥; d )令1,)()()1(+=+=+k k v x x k k k k λ,转b )。
(二)牛顿法1、算法原理牛顿法是基于多元函数的泰勒展开而来的,它将)()]([-)(1)(2k k x f x f ∇∇-作为搜索方向,因此它的迭代公式可直接写出来:)()]([)(1)(2)()(k k k k x f x f x x ∇∇-=-2、算法步骤用牛顿法求无约束问题n R x x f ∈),(min 的算法步骤如下:a )给定初始点)0(x ,精度0>ε,并令k=0;b )若ε≤∇)()(k x f ,停止,极小点为)(k x ,否则转c );c )计算)()]([,)]([)(1)(2)(1)(2k k k k x f x f p x f ∇∇-=∇--令;d )令1,)()()1(+=+=+k k p x x k k k ,转b )。
桂林电子科技大学数学与计算科学学院实验报告最优解为:x=(2,0,1,0); 最优函数值为:-8。
()()123123123max23.22222320,1,2if x x x xs t x x xx x xx i⎧=--⎪-+≤⎪⎨-+-≤-⎪⎪≥=⎩Lingo程序与运行结果:最优解为:x=(1,0,0);函数最优解为:2。
()()1231212312max 564.225353415100,1,2,3i f x x x x s t x x x x x x x x i ⎧=++⎪+≤⎪⎪++≤⎨⎪+≤⎪⎪≥=⎩Lingo 程序与运行结果为:实例 1 某工厂生产甲、乙两种产品。
已知生产甲种产品t 1需耗A 种矿石t 10、B 种矿石t 5、煤t 4;生产乙种产品t 1需耗A 种矿石t 4、B 种矿石t 4、煤t 9。
每t 1甲种产品的利润是600元,每t 1乙种产品的利润是1000元。
工厂在生产这两种产品的计划中要求消耗A 种矿石不超过t 300、B 种矿石不超过t 200、煤不超过t 360。
甲、乙两种产品应各生产多少,能使利润总额达到最大?化为数学线性规划模型为:()12121212max 6001000.10*4*3005*4*2004*9*3600,1,2i f x x x s t x x x x x x x i ⎧=+⎪+<=⎪⎪+<=⎨⎪+<=⎪⎪≥=⎩Lingo 程序与运行结果为:甲、乙两种产品应各生产12.41379t 、34.48276t ,能使利润总额达到最大,最大利润为:41931.03。
实例2 设有A 1,A 2两个香蕉基地,产量分别为60吨和80吨,联合供应B 1,B 2,B 3三个销地的销售量经预测分别为50吨、50吨和40吨。
两个产地到三个销地的单位运价如下表所示:表1(单位运费:元/吨)问每个产地向每个销地各发货多少,才能使总的运费最少?化为数学线性规划模型:()()111213212223111213212223112112221323min 600300400400700300.608035050400,1,2,1,2,3ij f x x x x x x x s t x x x x x x x x x x x x x i j ⎧=+++++⎪++=⎪⎪++=⎪⎪+=⎨⎪+=⎪⎪+=⎪≥==⎪⎩Lingo 程序与运行结果为:A1到B2发货50t ,A1到B3发货10t ,A2到B1发货50t ,A2到B3发货30t ,才能使总的运费最少,最少值为48000。
北京联合大学实验报告项目名称:运筹学专题实验报告学院:自动化专业:物流工程班级: 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的目的是,为了提高运行速度。
数学与计算科学学院
实验报告
实验项目名称Lingo、MATLAB关于线性问题的求解所属课程名称运筹学
实验类型综合
实验日期2014年10月12日
班级统计1201班
学号201247100126
姓名杨赛波
附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致.
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求.
3.实验原理:简要说明本实验项目所涉及的理论知识.
4.实验环境:实验用的软、硬件环境.
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容.概括整个实验过程.
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作.对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明.对于创新性实验,还应注明其创新点、特色. 6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析.
7.实验结论(结果):根据实验过程中得到的结果,做出结论.
8.实验小结:本次实验心得体会、思考和建议.
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价.。
最优化实验报告(单纯形法的matlab程序,lingo程序)实验一:线性规划单纯形算法一、实验目的通过实验熟悉单纯形法的原理,掌握Matlab 循环语句的应用,提高编程的能力和技巧。
二、实验用仪器设备、器材或软件环境Windows Xp 操作系统 ,Matlab6.5,计算机三、算法对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。
设初始基为B,然后执行如下步骤:(1).解B Bx b =,求得1Bx B b -=,0,N B B x f c x ==令计算目标函数值 1(1,2,...,)i m B bi -=i 以b 记的第个分量(2).计算单纯形乘子w, B wB C =,得到1B wC 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 =,得到1k k y B p -=;若0k y ≤,即k y 的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4). (4).确定下标r,使{}min ,0t rrktktk 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 -=-四、计算框图是否是否开始初始可行解B令1,0,BN B B x B b b x f c x -====计算单纯形乘子1B w c B -=,计算判别数,i j j wp c j R σ=-∈(非基变量)令max{,}kj j R σσ=∈0?k σ≤得到最优解解方程kk By p =,得到1k k y B p -=。
最优化方法实验报告optimization method Experiment Report学生所在学院:理学院学生所在班级:信息1学生姓名:教务处20014年5 月最优化方法实验报告书说明:1.下面程序在MATLAB R2012a 中均能正常运行。
2.程序之间有关联。
实验一熟悉MATLAB基本功能(2学时)实验的目的和要求:在本次实验中,通过亲临使用MATLAB,对该软件做一全面了解并掌握重点内容。
实验内容:1、全面了解MATLAB系统2、实验常用工具的具体操作和功能学习建议:本次实验在全面了解软件系统基础之上,学习和熟悉一些MATLAB的基础用途,重点掌握优化工具箱函数选用的内容。
重点和难点:优化工具箱函数选用。
利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。
具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。
另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际5.大型方法的演示函数下面以我们最常用的线性规划模型求解函数linprog作为典型对优化工具箱进行简单的介绍。
linprog函数功能:求解线性规划问题。
在命令窗口,键入doc linprog,得到下图(该图为帮助窗口)数学模型:其中f,x,b,beq,lb和ub为向量,A和Aeq 为矩阵。
语法:x = linprog(f,A,b,Aeq,beq)x = linprog(f,A,b,Aeq,beq,lb,ub)x = linprog(f,A,b,Aeq,beq,lb,ub,x0)x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)[x,fval] = linprog(...)[x,fval,exitflag] = linprog(...)[x,fval,exitflag,output] = linprog(...)[x,fval,exitflag,output,lambda] = linprog(...)描述:x = linprog(f,A,b)求解问题 min f'*x,约束条件为A*x <= b。
运筹学实验报告一、实验目的:通过实验熟悉单纯形法的原理,掌握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六、求解实际问题(即解决附件中的实验题目)实验题目列出下列问题的数学模型,并用你自己的单纯形算法程序进行计算,最后给出计算结果。
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的操作方法与编程思想,在实验课上,老师对同学们的疑问都详细讲解。
matlab程序设计与优化的实验三实验三:MATLAB程序设计与优化1. 引言在实验室研究和工程开发中,MATLAB是一种非常流行和强大的工具,用于进行数值计算,数据分析和可视化。
为了提高MATLAB程序的性能和效率,程序优化是其中的关键步骤之一。
本实验将介绍MATLAB程序设计与优化的重要性,并探讨一些实用的优化技巧。
2. 程序设计与性能评估在开始编写和优化MATLAB程序之前,首先需要理解程序设计和性能评估的基本概念。
程序设计涉及到选择合适的数据结构、算法和编程技巧,以实现预期的功能。
而性能评估则是通过测量程序的执行时间、占用的内存和CPU使用率等指标,来评估程序的效率和优化空间。
3. 代码向量化优化代码向量化是一种重要的优化技巧,可以大大提高MATLAB程序的执行速度。
向量化是将循环和条件语句替换为矩阵和向量操作的过程,从而减少了循环迭代的次数,提高了代码的效率。
在实验中,我们可以通过使用MATLAB内置的向量和矩阵运算函数,如sum、mean和dot等,来实现代码向量化。
4. 内存管理和预分配在编写MATLAB程序时,合理的内存管理和预分配也是优化的重要方面。
内存管理涉及到使用合适的数据结构来存储数据,并避免不必要的内存分配和释放操作。
而预分配则是一种预先分配足够的内存空间,以避免频繁的内存重新分配操作。
这样可以减少程序的运行时间和内存占用。
5. 函数和脚本的优化除了代码级别的优化,函数和脚本的优化也是提高MATLAB程序性能的关键。
函数优化可以通过减少函数的输入和输出参数个数,避免全局变量的使用以及使用精确的数据类型等方式来实现。
而脚本优化则涉及到合理的脚本结构和逻辑,以提高整个脚本的执行效率。
6. 并行计算和多线程随着多核处理器的普及,利用并行计算和多线程技术来加速MATLAB程序变得越来越重要。
MATLAB提供了Parallel Computing Toolbox和Multithreading Support等工具箱,可用于实现并行计算和多线程操作。
实验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}$是限制条件右侧的常数。
作业:1.用薄钢板制造一体积5m 3,长度不小于4m ,无上盖的货箱,要求钢板耗量最小。
确定货箱的长x 1、宽x 2和高x 3。
试列出问题的数学模型。
解:假设钢板为单位厚度,不考虑钢板焊接或连接耗钢量及相关劳工费用。
设y 为货箱的钢板消耗量,则此问题的数学模型如下:min y= x 1 x 2+2 x 1 x 3+2 x 2 x 3s.t. x 1 x 2 x 3=5x 1>4 x 1 ,x 2 ,x 3>02.将下面的线性规划问题表示为标准型并用单纯形法求解max f=x 1+2x 2+x 3s .t .2x 1+x 2-x 3≤2 -2x 1+x 2-5x 3≥-6 4x 1+x 2+x 3≤6 x i ≥0 i=1,2,3 解:先化为标准型:首先,将第二个约束条件两边乘以(-1),再分别对三个约束不等式添加非负的松弛变量654,,x x x ,即可化为如下标准型:3212min x x x f ---=⎪⎪⎩⎪⎪⎨⎧=≥=+++=++-=+-+6,5,4,3,2,1,06465222..632153214321i x x x x x x x x x x x x x t s i 列成表格:2 ○1 -1 1 0 0 2 2 -1 5 0 1 0 6 4 1 1 0 0 1 6 -1 -2* -1 0 0 0 0可见此表已具备1、2、3三个特点。
首先从底行中选元素-2,再在第二列三个元素中,由2/1,6/1,6/1最小者决定选第一行第二列的元素1,标以记号,迭代一次得2 1 -1 1 0 0 2 4 0 ④ 1 1 0 8 2 0 2 -1 0 1 43 0 -3* 2 0 0 4再从底行中选元素-34再迭代一次得3 1 0 5/4 1/4 0 4 1 0 1 1/4 1/4 0 2 0 0 0 -3/2 -1/2 1 0 6 0 0 11/4 3/4 0 10此时,所有的检验数均为正,停止迭代,最优解为:()0,0,0,2,4,0*=x ,最优值为:102142*-=⨯-+⨯-=Z ;3. 试用DFP 变尺度法求解下列无约束优化问题。
最优化方法的Matlab实现在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。
最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。
由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。
用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型即用数学语言来描述最优化问题。
模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。
2)数学求解数学模型建好以后,选择合理的最优化方法进行求解.最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。
9.1 概述利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。
具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题.另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。
9.1。
1 优化工具箱中的函数优化工具箱中的函数包括下面几类:1.最小化函数表9—1 最小化函数表2.方程求解函数表9—2 方程求解函数表3.最小二乘(曲线拟合)函数表9—3 最小二乘函数表4.实用函数表9—4 实用函数表5.大型方法的演示函数表9-5 大型方法的演示函数表6.中型方法的演示函数表9—6 中型方法的演示函数表9。
1.3 参数设置利用optimset函数,可以创建和编辑参数结构;利用optimget函数,可以获得options优化参数.● optimget函数功能:获得options优化参数。
语法:val = optimget(options,'param’)val = optimget(options,'param’,default)描述:val = optimget(options,’param’)返回优化参数options中指定的参数的值。
最优化计算方法及其matlab程序实现以最优化计算方法及其MATLAB程序实现为标题的文章最优化计算是一种重要的数学方法,可以用于解决各种实际问题。
最优化计算的目标是找到一个使得目标函数取得最大或最小值的变量取值。
在实际应用中,最优化计算广泛应用于经济学、工程学、管理学等领域。
在最优化计算中,常用的方法有无约束优化方法和约束优化方法。
无约束优化方法用于求解没有约束条件的最优化问题,常见的方法有牛顿法、梯度下降法、共轭梯度法等。
约束优化方法用于求解带有约束条件的最优化问题,常见的方法有拉格朗日乘子法、KKT条件法等。
MATLAB是一种强大的数值计算软件,它提供了丰富的最优化计算函数和工具箱,可以方便地实现各种最优化计算方法。
下面将介绍几种常用的最优化计算方法及其在MATLAB中的实现。
1. 牛顿法牛顿法是一种基于一阶和二阶导数信息的优化方法,可以用于求解无约束最优化问题。
其基本思想是通过一阶导数和二阶导数信息来逼近目标函数的局部极小值点。
在MATLAB中,可以使用fminunc函数实现牛顿法。
2. 梯度下降法梯度下降法是一种基于一阶导数信息的优化方法,可以用于求解无约束最优化问题。
其基本思想是沿着目标函数梯度的反方向进行搜索,以找到目标函数的极小值点。
在MATLAB中,可以使用fminunc函数实现梯度下降法。
3. 共轭梯度法共轭梯度法是一种基于一阶导数信息的优化方法,可以用于求解无约束最优化问题。
其基本思想是通过迭代的方式,利用前一次迭代的搜索方向和当前的梯度信息来更新搜索方向,以加速收敛速度。
在MATLAB中,可以使用fminunc函数实现共轭梯度法。
4. 拉格朗日乘子法拉格朗日乘子法是一种用于求解带有等式约束和不等式约束的最优化问题的方法。
其基本思想是将带约束的优化问题转化为一个不带约束的优化问题,在目标函数中引入拉格朗日乘子,并通过求解原问题和对偶问题的极值点来得到最优解。
在MATLAB中,可以使用fmincon函数实现拉格朗日乘子法。
基于MATLAB编程语言采用大M法求解线性规划问题关键词:线性规划单纯形法大M法MATLAB编程语言1.引言伴随着计算机技术的高速发展,最优化理论与方法取得了巨大的进步,并日益受到重视,而解决实际最优化问题的软件也得到了飞速发展,其中MATLAB这个强大的计算平台,既可以利用MATLAB优化工具箱(OptimizationToolbox)中的函数,又可以通过对算法编程实现相应的最优化计算,是目前最流行的计算软件之一。
2.摘要本程序是采用运筹学中的求解线性规划的大M法来解现实问题,并采用MATLAB编程语言。
本文通过投资问题的实例分析了投资项目和各项目收益率确定的情况下,并结合公司实际,如何合理的分配利用,最终确定使得该公司收益最大的投资方案。
说明了线性规划在现代企业投资管理中的应用,对企业的投资管理决策提供了支持。
但是本程序只实现了线性规划的部分功能,所以有待进一步完善。
3.算法说明3.1算法原理单纯形法的基本思路是将可行域中某个基可行解转换到一个新的可行解,同时使得目标函数值有所改进。
而大M法则是通过将人工变量加入到原约束方程组中作为虚拟变量,并使得这些虚拟变量从基变量中被置换出来。
为此只需假定人工变量在目标函数中的系数为—M(M>0,是个充分大的数),这样,对于求极大值问题,只要在基本可行解中,还有人工变量是基变量,且取值不为0,则目标函数就不可能达到最大值;对于极小值问题而言,人工变量在目标函数中的系数取+M,这种方法称为大M法。
用大M法求解下列线性规划问题minf=cx,s.t.=的步骤如下:1.首先将线性规划问题转化为如下问题:Minf=cx+Me T y, s.t.=式 22.确定初始基变量矩阵B,求解方程3.令x N=0,计算f=c B x B其中x B、x N分别代表基变量和非基变量的值,c B表示基变量在目标函数中的系数;4.求解方程wB=C B,对于所有非基变量计算判别数Z j-C j=wP j-C j,其中Pj为非基变量在约束系数距震中相对应的列,令Zk-Ck=max(Z j-C j),如果Z k-C k<=0,则停止计算,输出最优解,否则转入4;5.求解方程B yk=P k,若y k的每个分量均不大于0,则问题不存在最优解,否则转5;6.令B s’/y sk=min(B i’/y ik|y ik>0),其中b’=X b,用P k替换PB s,得到新的变量矩阵B,再转2计算。
实验一:线性规划单纯形算法一、实验目的通过实验熟悉单纯形法的原理,掌握Matlab 循环语句的应用,提高编程的能力和技巧。
二、实验用仪器设备、器材或软件环境Windows Xp 操作系统 ,Matlab6.5,计算机三、算法对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。
设初始基为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 σ-=-=-,令 max{}k i i i Rz c σ∈=-,R 为非基变量集合若判别数0k σ≤ ,则得到一个最优基本可行解,运算结束;否则,转到下一步 (3).解k kBy p =,得到1k ky B p -=;若0k y ≤,即k y 的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4). (4).确定下标r,使{}:0min ,0t r rktktk b b tk y y t y y >=>且r B x 为离基变量。
k x 为进基变量,用kp 替换r B p ,得到新的基矩阵B ,返回步骤(1)。
对于极大化问题,可以给出完全类似的步骤,只是确定进基变量的准则不同。
对于极大化问题,应令min{}k k j j z c z c -=-四、计算框图五、计算程序function [x,f]=zuiyouhua(A,b,c)size(A)=[m,n];i=n+1:n+m;%基变量集合,后面m个松弛变量为初始基变量; N=1:n;%初始非基变量;B=eye(m,m);xb=b';xn=zeros(m,1);f1=0;w=zeros(1,m);z=-c;%初始判别数;flag=1;while(1)[a,k]=max(z);%x(k)为进基变量;if a<=0flag=0;breakelsey=inv(B)*A(:,k)if y<=0flag=0;fprintf('不存在最优解')breakendt=find(y>0);[a,r1]=min(b1(t)./y(t))r=t(r1); %基变量中第r 个变量为退基变量; i(:,r)=kB(:,r)=A(:,k);%换基,即将原基中第r个变量换成第k个变量; cb=c(:,i);%新的价值系数; xb=inv(B)*b; b0=xb; x=zeros(1,n+m) x(:,i)=xb' f=cb*xbz=cb*inv(B)*A-c;%可用z=cb*(B\A)-c,判别数. end end六、数值实验及结果分析求解线性规划问题:⎪⎪⎩⎪⎪⎨⎧=≥≤-=+-=++--4,3,2,1,012216443033..3min 2142132121i x x x x x x x x x t s x x i在工作区输入:A=[3,3,1,0;-4,-4,0,1;2,-1,0,0];b=[30,16,12]';c=[-3,1,0,0];[x,f]=zuiyouhua(A,b,c)x =7.3333 2.6667 0 0 0 56.0000 0f =-19.3333检验结果正确七、心得体会通过这次试验,使我对单纯形法的计算有了更进一步的了解。
但是在编程过程中由于对matlab不是很熟悉还是遇到了很多麻烦,所以我觉得老师在让我们编程的时候不能只是简单的介绍一下算法,更要着重说明一下软件的使用方法。
这样我们在编程的时候就能更加的得心应手。
本次完全仿照老师给的程序,没有能够形成自己的东西。
自己编程的能力还是很差的,对于这种已经给出算法的程序也不能正确的编写出来。
所以在今后要加强这方面的学习。
实验二:Lingo求解动态规划问题一、实验目的通过本实验熟悉动态规划的原理,了解动态规划的应用,并能利用数学软件(Lingo )求解动态规划模型。
二、问题重述某公司打算向他的营业区增设4个销售点,各区赚取的利润与增设的销售点个数有关,其数据为:试求各区应分配几个增设的销售书店,才能使利润最大?其值是多少?三、数学模型设(1,2,3,4)i x i =为第i 区增设销售点的个数,()(1,2,3,4)i i g x i =为增设第i 个点所得到的盈利。
故问题模型为:112233441234max ()()()()..40,1,2,3,4i z g x g x g x g x s t x x x x x i =++++++=≥=四、计算编程 model :sets :quyu/1..4/; zl/0..4/;lirun(quyu,zl):g,c;endsetsdata:g=160 310 541 600 705,190 225 445 517 632,200 298 399 601 721,250 308 487 655 674;enddatamax=@sum(lirun(i,j):g(i,j)*c(i,j));@for(quyu(i):@sum(lirun(i,j):c(i,j))<=1);@for(lirun:@bin(c));@sum(lirun(i,j):(j-1)*c(i,j))=4;End五、计算结果Global optimal solution found.Objective value: 1436.000Objective bound: 1436.000Infeasibilities: 0.000000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced Cost G( 1, 1) 160.0000 0.000000 G( 1, 2) 310.0000 0.000000 G( 1, 3) 541.0000 0.000000 G( 1, 4) 600.0000 0.000000 G( 1, 5) 705.0000 0.000000 G( 2, 1) 190.0000 0.000000 G( 2, 2) 225.0000 0.000000 G( 2, 3) 445.0000 0.000000 G( 2, 4) 517.0000 0.000000 G( 2, 5) 632.0000 0.000000 G( 3, 1) 200.0000 0.000000 G( 3, 2) 298.0000 0.000000 G( 3, 3) 399.0000 0.000000 G( 3, 4) 601.0000 0.000000 G( 3, 5) 721.0000 0.000000 G( 4, 1) 250.0000 0.000000 G( 4, 2) 308.0000 0.000000 G( 4, 3) 487.0000 0.000000 G( 4, 4) 655.0000 0.000000G( 4, 5) 674.0000 0.000000 C( 1, 1) 0.000000 -160.0000 C( 1, 2) 0.000000 -310.0000 C( 1, 3) 1.000000 -541.0000 C( 1, 4) 0.000000 -600.0000 C( 1, 5) 0.000000 -705.0000 C( 2, 1) 0.000000 -190.0000 C( 2, 2) 0.000000 -225.0000 C( 2, 3) 1.000000 -445.0000 C( 2, 4) 0.000000 -517.0000 C( 2, 5) 0.000000 -632.0000 C( 3, 1) 1.000000 -200.0000 C( 3, 2) 0.000000 -298.0000六、分析、检验和结论结果中Variable 列对应的(,)C i j ,i 表示第i 区,j 表示增加1j -个销售点,Value 列对应的0.000000表示不增加销售点,1.000000表示增加销售点。
例如 C( 1, 3) 1.000000表示第一区增加两个销售点。
(,)G i j 表示第i 行第j 列对应的值。
从结果中我们知道最优解是第一区和第二区分别增加2个销售点,第三区和第四区增加0个销售点此时盈利z=1436为最优值。
经过检验结果正确。
七、心得体会通过实验我熟悉了Lingo 的使用方法,学会了用Lingo 编写计算程序。
同时也掌握了分配问题的算法。
由于之前没有接触过Lingo 软件,老师也没有系统的讲述Lingo 的使用规则,所以我通过老师给的例题,依葫芦画瓢的写出了本问题的程序。
但是对实质性的东西还不是很了解,没有达到举一反三的地步。
仅仅只会分配法这一类问题的算法和程序,对程序中函数的具体应用还不了解。
所以我希望老师能在上实验课之前给我们讲述一下这种题型编程的注意事项,和涉及函数的具体意思,这样更有利于我们对问题的理解。
同时我也体会到自己没有主动的去学习而是被动的等待老师来讲解,从而造成了实验过程中出现了一些问题。
所以,以后要主动学习。