Matlab优化算法

Matlab优化算法
Matlab优化算法

Matlab优化

主讲人:饶志欢

现代优化算法

什么是优化?就是从各种方案中选取一个最好的。从数学角度看,优化理论就是研究如何在状态空间中寻找到全局最优点。

比如水泥混凝土的性能,涉及到水、沙、石子、水泥和其他掺杂物比例。学校课程表排课问题、售票员上岗问题、公司内部人员安排出效益等。降低成本、提高效益是问题的

关键。

1.1 MATLAB解优化问题的主要函数

1.2 优化函数的输入变量

1.3 优化函数的输出变量下表

1.4 控制参数options的设置

(1)Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时,显示最终结果.默认值为

’final’.

(2)MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数

.

(3) MaxIter: 允许进行迭代的最大次数,取值为正整数

控制参数options可以通过函数optimset创建或修改。命令

的格式如下:

(1) options=optimset(‘optimfun’)

创建一个含有所有参数名,并与优化函数optimfun相关的默

认值的选项结构options.

1.4 控制参数options的设置

(2)options=optimset(‘param1’,value1,’param2’,value2,...)

创建一个名称为options的优化选项参数,其中指定的参数

具有指定值,所有未指定的参数取默认值.

(3)options=optimset(oldops,‘param1’,value1,’param2’,

value2,...)

创建名称为oldops的参数的拷贝,用指定的参数值修改

oldops中相应的参数.

例:opts=optimset(‘Display’,’iter’,’TolFun’,1e-8)

该语句创建一个称为opts的优化选项结构,其中显示参数

设为’iter’, TolFun参数设为1e-8.

2.1 一元函数无约束优化问题

一元函数无约束优化问题

常用格式如下:

(1)x= fminbnd (fun,x1,x2)

(2)x= fminbnd (fun,x1,x2,options)

(3)[x,fval]= fminbnd(...)

(4)[x,fval,exitflag]= fminbnd(...)(5)[x,fval,exitflag,output]= fminbnd(...)函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只

给出局部最优解。

2.1 一元函数无约束优化问题

例在0

程序如下:

f='2*exp(-x).*sin(x)';

fplot(f,[0,8]); %作图语句

[xmin,ymin]=fminbnd (f, 0,8)

f1='-2*exp(-x).*sin(x)';

[xmax,ymax]=fminbnd (f1, 0,8)

运行结果:

xmin = 3.9270 ymin = -0.0279

xmax = 0.7854 ymax = 0.6448

2.2 多元函数无约束优化问题

标准型为:min F(X)

命令格式为:

(1)x= fminunc(fun,X0)

或x=fminsearch(fun,X0)

(2)x= fminunc(fun,X0,options);

或x=fminsearch(fun,X0,options)

(3)[x,fval]= fminunc(...);

或[x,fval]= fminsearch(...)

(4)[x,fval,exitflag]= fminunc(...);

或[x,fval,exitflag]= fminsearch (5)[x,fval,exitflag,output]= fminunc(...);

或[x,fval,exitflag,output]= fminsearch(.

3 多元函数无约束优化问题

说明:

? fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明:

[1] fminunc为无约束优化提供了大型优化和中型优化算法。由options中的参数LargeScale控

制:

LargeScale=’on’(默认值),使用大型算法

LargeScale=’off’(默认值),使用中型算法

[2] fminunc为中型优化算法的搜索方向提供了4种算法,由

options中的参数HessUpdate控制:

HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;

HessUpdate=’dfp’,拟牛顿法的DFP公式;

HessUpdate=’steepdesc’,最速下降法

[3] fminunc为中型优化算法的步长一维搜索提供了两种算法,由options中参数

LineSearchType控制:

LineSearchType=’quadcubic’(缺省值),混合的二次和三次多项式插值;

LineSearchType=’cubicpoly’,三次多项式插

使用fminunc和 fminsearch可能会得到局部最优解

2.2 多元函数无约束优化问题

例min f(x)=(4*x1^2+2*x2^2+4*x1*x2+2*x2+1)*exp(x1)

1、编写M-文件 fun1.m:

function f = fun1 (x)

f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

2、输入M文件wliti3.m如下:

x0 = [-1, 1];

x=fminunc(‘fun1’,x0);

y=fun1(x)

3、运行结果:

x= 0.5000 -1.0000

y = 1.3029e-10

2.3 二次规划

用MATLAB软件求解,其输入格式如下:

1. x=quadprog(H,C,A,b);

2. x=quadprog(H,C,A,b,Aeq,beq);

3. x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);

4. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0);

5. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0,options);

6. [x,fval]=quaprog(...);

7. [x,fval,exitflag]=quaprog(...);

8. [x,fval,exitflag,output]=quaprog(...);

2.3 二次规划

例 min f(x1,x2)=-2*x1-6*x2+x1^2-2*x1*x2+2*x2^2

s.t. x1+x2≤2

-x1+2x2≤2

x1≥0, x2≥0

1、写成标准形式:

2、输入命令:

H=[1 -1; -1 2];

c=[-2 ;-6];A=[1 1; -1 2];b=[2;2];

Aeq=[];beq=[]; VLB=[0;0];VUB=[];

[x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)

3、运算结果为:

x =0.6667 1.3333 z = -8.2222

2.4 一般非线性规划

标准型为min F(X)

s.t AX<=b G(X)

Ceq(X)=0 VLB X VUB

其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab求解上述问题,基本步骤分三步:

1. 首先建立M文件fun.m,定义目标函数F(X):

function f=fun(X);

f=F(X);

2. 若约束条件中有非线性约束:G(X)或Ceq(X)=0,则建立M文件

nonlcon.m定义函数G(X)与Ceq(X):

function [G,Ceq]=nonlcon(X)

G=...

Ceq=...

2.4 一般非线性规划

3. 建立主程序.非线性规划求解的函数是

fmincon,命令的基本格式如下:

(1) x=fmincon(‘fun’,X0,A,b)

(2) x=fmincon(‘fun’,X0,A,b,Aeq,beq)

(3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)

(4)

x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)

(5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’

,options)

(6) [x,fval]= fmincon(...)

(7) [x,fval,exitflag]= fmincon(...)

(8)[x,fval,exitflag,output]= fmincon(...)

2.4 一般非线性规划

注意:

[1] fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。

[2] fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。

[3] fmincon函数可能会给出局部最优解,这与

初值X0的选取有关。

2.4 一般非线性规划

2.4 一般非线性规划

2、先建立M-文件 fun3.m:

function f=fun3(x);

f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2

3、再建立主程序youh2.m:

x0=[1;1];

A=[2 3 ;1 4]; b=[6;5];

Aeq=[];beq=[];

VLB=[0;0]; VUB=[];

[x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB)

4、运算结果为:

x = 0.7647 1.0588

fval = -2.0294

2.5 线性规划问题

线性规划问题

线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB6.0 解决的线性规划

问题的标准形式为:

min f(x)

sub.to:

x A ≤b ? x Aeq = beq?ub≤ x≤ lb

其中 f、x、b、beq、lb、ub 为向量,A、Aeq 为矩阵。其它形式的线性规划问题都可经过适当变换化为此标准形式。

x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %设置初值 x0

3 MATLAB优化工具箱

1 工具箱

(1)求解无约束条件非线性极小值;(2)求解约束条件下非线性极小值,包括目标逼近问题、极大-极小值问题和半无限极小值

问题;

(3)求解二次规划和线性规划问题;

(4)非线性最小二乘逼近和曲线拟合;

(5)非线性系统的方程求解;

(6)约束条件下的线性最小二乘优化;

(7)求解复杂结构的大规模优化问题。

3 MATLAB优化工具箱

2 工具箱函数

一元函数极小值X=fminbnd(‘F’,x1,x2)

无约束极小X=fminunc(‘F’,X0)

X=fminsearch(‘F’,X0)

线性规划X=linprog(c,A,b)

0-1整数规划X=bintprog(F) 二次规划X=quadprog(H,c,A,b)

约束极小值(非线性规划)

X=fmincon(‘FG’,X0)

非线性最小二乘X=lsqnonlin(F,X0) 目标达到问题X=fgoalattain(‘F’,x,goal,w)极小极大问题X=fminimax(‘FG’,x0)

3.1 GUI优化工具

命令行输入optimtool;

Start->Toolboxes->Optimization->Optimization

tool(optimtool)

3.2 使用步骤

1.选择求解器solver和优化算法algorithm;

2.选定目标函数(objective function);

3.设定目标函数的相关参数;

4.设置优化选项;

5.单击“start”按钮,运行求解;

6.查看求解器的状态和求解结果;

7.将目标函数、选项和结果导入\导出。

3.2 使用步骤

3.3 应用实例一

无约束优化(fminunc求解器)

求f(x)=x^2+4*x-6极小值,初始点取x=0。

解:

1.首先建立目标函数文件FunUnc.m文件:

function y=FunUnc(x)

y=x^2+4*x-6;

2. 然后启动优化工具

3.3 应用实例一

3.3 应用实例一

Algorithm有两个选择:Large scale和Medium scale,设置完参数点击start即可得到上图中

的结果。

3.4 应用实例二

无约束优化(fminsearch求解器)

求f(x)=|x^2-3*x+2|的极小值,初始点取x=-7

解:

1.解:启动优化工具;

用fminunc时设置参数如图

2. 运行得到结果

3.4 应用实例二

4 高级优化算法

习惯上,将优化算法分为两类:局部优化算法和全局性优化算法。前者可以称为经典优化算法,已经得到了人们广泛深入的研究。线性规划、整数规划、0–1规划、非线性规划、排队论、决策论。后者习惯上称为现代优化算法,是20世纪80年代兴起的新型全局性优化算法,主要包括禁忌搜索、模拟退火、遗传算法、神经网络等,其主要应用对象是优化问题中的难解问题,即NP–

hard问题

4.1 算法简介

为了找出地球上最高的山,一群有志气的兔

子们开始想办法。

4.1 算法简介

方案一:兔子们吃了失忆药片,并被发射到太空,然后随机落到了地球上的某些地方。他们不知道自己的使命是什么。但是,如果你过几年就杀死一部分海拔低的兔子,多产的兔子们自己就会找到珠穆朗玛峰。

遗传算法

4.1 算法简介

方案二:兔子们朝着比现在高的地方跳去,它们找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。其实,它们这种做法只是自己心理上认为找到了最高的山,并不能保证局部最优值就是全局最优值。

局部搜索法

4.1 算法简介

方案三:兔子们知道一个兔子的力量是渺小的。于是,它们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。这样,它们制定了下一步去哪里寻找的策略。

禁忌搜索法

4.1 算法简介

方案四:兔子们用酒将自己灌醉了。它们随机地跳了很长时间。在这期间,它们可能走向高处,也可能踏入平地。但是,随着时间的流逝,它们渐渐清醒了并朝最高方

向跳去。

模拟退火法

4.2 遗传算法基本思想

遗传算法流程图如下

编码和初始集团生成

集团中个体适应度的检测评估

选择

交叉

变异

图1 遗传算法的基本流程

4.3 模拟退火算法简介

1) 任选一初始状态作为初始解,并设初

始温度;

2) 调用采样算法,然后返回到当前解;

3) 按一定的方式将降温

4) 检查退火过程是否结束,否则转到 2);

5) 以当前解作为最优解输出。

遗传算法优化相关MATLAB算法实现

遗传算法 1、案例背景 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。 在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。基因组成的串就是染色体,或者叫基因型个体( Individuals) 。一定数量的个体组成了群体(Population)。群体中个体的数目称为群体大小(Population Size),也叫群体规模。而各个个体对环境的适应程度叫做适应度( Fitness) 。 2、遗传算法中常用函数 1)创建种群函数—crtbp 2)适应度计算函数—ranking 3)选择函数—select 4)交叉算子函数—recombin 5)变异算子函数—mut 6)选择函数—reins 7)实用函数—bs2rv 8)实用函数—rep 3、主程序: 1. 简单一元函数优化: clc clear all close all %% 画出函数图 figure(1); hold on; lb=1;ub=2; %函数自变量范围【1,2】 ezplot('sin(10*pi*X)/X',[lb,ub]); %画出函数曲线 xlabel('自变量/X') ylabel('函数值/Y') %% 定义遗传算法参数 NIND=40; %个体数目 MAXGEN=20; %最大遗传代数 PRECI=20; %变量的二进制位数 GGAP=0.95; %代沟 px=0.7; %交叉概率 pm=0.01; %变异概率

最优化算法-Matlab程序

CG程序代码 function [x,y] = cg(A,b,x0) %%%%%%%%%%%%%%%%%CG算法%%%%%%%%%%%% r0 = A*x0-b; p0 = -r0; k = 0; r = r0; p = p0; x = x0; while r~=0 alpha = -r'*p/(p'*A*p); x = x+alpha*p; rold = r; r = rold+alpha*A*p; beta = r'*r/(rold'*rold); p = -r+beta*p; plot(k,norm(p),'.--'); hold on k = k+1; end y.funcount = k; y.fval = x'*A*x/2-b'*x;

function [x,y] = cg_FR(fun,dfun,x0) %%%%%%%%%%%%%%%CG_FR算法%%%%%%%%%%%%%%% error = 10^-5; f0 = feval(fun,x0); df0 = feval(dfun,x0); p0 = -df0; f = f0; df = df0; p = p0; x = x0; k = 0; while ((norm(df)>error)&&(k<1000)) f = feval(fun,x); [alpha,funcNk,exitflag] = lines(fun,0.01,0.15,0.85,6,f,df'*p,x,p);%%用线搜索找下降距离%% if exitflag == -1 disp('Break!!!'); break; end x = x+alpha*p; dfold = df; df = feval(dfun,x); beta = df'*df/(dfold'*dfold); p = -df+beta*p; plot(k,norm(df),'.--'); hold on k = k+1; end y.funcount = k; y.fval = feval(fun,x); y.error = norm(df);

最优化方法的Matlab实现(公式(完整版))

第九章最优化方法的MatIab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。 具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1 ?最小化函数

2.方程求解函数 3.最小—乘(曲线拟合)函数

4?实用函数 5 ?大型方法的演示函数 6.中型方法的演示函数 9.1.3参数设置 利用OPtimSet函数,可以创建和编辑参数结构;利用OPtimget函数,可以获得o PtiOns优化参数。 ? OPtimget 函数 功能:获得OPtiOns优化参数。 语法:

最优化算法实验报告(附Matlab程序)

最优化方法(Matlab)实验报告 ——Fibonacci 法 一、实验目的: 用MATLAB 程序实现一维搜索中用Fibonacc 法求解一元单峰函数的极小值问题。二、实验原理: (一)、构造Fibonacci 数列:设数列{}k F ,满足条件: 1、011F F == 2、11 k k k F F F +-=+则称数列{}k F 为Fibonacci 数列。(二)、迭代过程: 首先由下面的迭代公式确定出迭代点: 1 1 1 (),1,...,1(),1,...,1n k k k k k n k n k k k k k n k F a b a k n F F u a b a k n F λ---+--+=+ -=-=+ -=-易验证,用上述迭代公式进行迭代时,第k 次迭代的区间长度缩短比率恰好为 1 n k n k F F --+。故可设迭代次数为n ,因此有11121211221111223231 ()()......()()n n n n n n n n n F F F F F F b a b a b a b a b a F F F F F F F ------= -=?-==?-=-若设精度为L ,则有第n 次迭代得区间长度111 ()n n n b a L b a L F -≤-≤,即 就是 111 ()n b a L F -≤,由此便可确定出迭代次数n 。

假设第k 次迭代时已确定出区间[,]k k a b 以及试探点,[,]k k k k u a b λ∈并且k k u λ<。计算试探点处的函数值,有以下两种可能:(1)若()()k k f f u λ>,则令 111111111,,()() () k k k k k k k k n k k k k k n k a b b f f F a b a F λλμλμμ++++--++++-=====+-计算1()k f μ+的值。(2)()()k k f f u λ≤,则令 111121111,,()() () k k k k k k k k n k k k k k n k a a b f f F a b a F μμλμλλ++++--++++-=====+-计算1()k f λ+的值。 又因为第一次迭代确定出了两个迭代点,以后每迭代一次,新增加一个迭代点,这样在迭代n-1后便计算完了n 个迭代点。因此第n 次迭代中,选用第n-1次的迭代点以及辨别常数δ构造n λ和n μ: 1 1n n n n λλμλδ --==+再用同样的方法进行判断:(1)、若()n f λ>()n f μ则令 1 n n n n a b b λ-==(2)、若()n f λ<=()n f μ则令 1n n n n a a b μ-==这样便可确定出最优解的存在区间[,]n n a b 。

优化方法MATLAB编程——大连理工大学

优化方法上机大作业 学院: 姓名: 学号: 指导老师:肖现涛

第一题 源程序如下: function zy_x = di1ti(x) %di1ti是用来求解优化作业第一题的函数。 x0=x; yimuxulong=0.000001; g0=g(x0);s0=-g0; A=2*ones(100,100); k=0; while k<100 lanmed=-(g0)'*s0/(s0'*A*s0); x=x0+lanmed*s0; g=g(x); k=k+1; if norm(g)

break; end miu=norm(g)^2/norm(g0)^2; s=-g+miu*s0; g0=g; s0=s;x0=x; end function f=f(x) f=(x'*ones(100,1))^2-x'*ones(100,1); function g=g(x) g=(2*x'*ones(100,1))*ones(100,1)-ones(100,1); 代入x0,运行结果如下: >> x=zeros(100,1); >> di1ti(x) After 1 iterations,obtain the optimal solution. The optimal solution is -0.250000. The optimal "x" is "ans". ans =0.005*ones(100,1).

最优化方法及其Matlab程序设计

最优化方法及其Matlab程序设计 1.最优化方法概述 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证,从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。最优化是每个人,每个单位所希望实现的事情。对于产品设计者来说,是考虑如何用最少的材料,最大的性能价格比,设计出满足市场需要的产品。对于企业的管理者来说,则是如何合理、充分使用现有的设备,减少库存,降低能耗,降低成本,以实现企业的最大利润。 由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型。 即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解。 数学模型建好以后,选择合理的最优化算法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 2.最优化方法(算法)浅析 最优化方法求解很大程度上依赖于最优化算法的选择。这里,对最优化算法做一个简单的分类,并对一些比较常用的典型算法进行解析,旨在加深对一些最优化算法的理解。 最优化算法的分类方法很多,根据不同的分类依据可以得到不同的结果,这里根据优化算法对计算机技术的依赖程度,可以将最优化算法进行一个系统分类:线性规划与整数规划;非线性规划;智能优化方法;变分法与动态规划。 2.1 线性规划与整数规划 线性规划在工业、农业、商业、交通运输、军事和科研的各个研究领域有广泛应用。例如,在资源有限的情况下,如何合理使用人力、物力和资金等资源,以获取最大效益;如何组织生产、合理安排工艺流程或调制产品成分等,使所消耗的资源(人力、设备台时、资金、原始材料等)为最少等。 线性规划方法有单纯形方法、大M法、两阶段法等。 整数规划有割平面法、分枝定界法等。 2.2 非线性规划 20世纪中期,随着计算机技术的发展,出现了许多有效的算法——如一些非线性规划算法。非线性规划广泛用于机械设计、工程管理、经济生产、科学研究和军事等方面。

最优化方法matlab作业

实用最优化方法 ——matlab编程作业

题一、 初值为[-1;1] 其中g0、g1分别为不同x值下得导数,f0、f1为函数值 MATLAB程序: x0=[-1;1]; s0=[1;1]; c1=0.1;c2=0.5;a=0;b=inf;d=1;n=0; x1=x0+d*s0; g0=[-400*(x0(2)-x0(1)^2)*x0(1)-2*(1-x0(1));200*(x0(2)-x0(1) ^2)]; g1=[-400*(x1(2)-x1(1)^2)*x1(1)-2*(1-x1(1));200*(x1(2)-x1(1) ^2)]; f1=100*(x1(2)-x1(1)^2)^2+(1-x1(1))^2; f0=100*(x0(2)-x0(1)^2)^2+(1-x0(1))^2; while((f0-f1<-c1*d*g0'*s0)||(g1'*s0

最优化方法的Matlab实现(公式完整版)

第九章最优化方法的Matlab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、

非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1 优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1.最小化函数 表9-1 最小化函数表 2.方程求解函数 表9-2 方程求解函数表

3.最小二乘(曲线拟合)函数 表9-3 最小二乘函数表 4.实用函数 表9-4 实用函数表 5.大型方法的演示函数 表9-5 大型方法的演示函数表

优化算法的MATLAB实现技巧(单)

天津财经大学 本科毕业论文 中文题目:优化算法的MATLAB实现技巧英文题目: 院系名称: 专业班级: 学号: 姓名: 指导教师: 20XX年 x月 x 日

内容摘要

目录 第1章引言............................... 错误!未定义书签。 1.1 现代优化计算方法................. 错误!未定义书签。 1.2 MATLAB概述....................... 错误!未定义书签。 1.3 旅行商问题....................... 错误!未定义书签。第2章禁忌搜索算法的基本思想............. 错误!未定义书签。 2.1 相关概念介绍..................... 错误!未定义书签。 2.2 局部搜索算法..................... 错误!未定义书签。 2.3 禁忌搜索算法..................... 错误!未定义书签。第3章 MATLAB实现TSP问题的实现技巧....... 错误!未定义书签。 3.1 重要概念的定义................... 错误!未定义书签。 3.2 算法中的方法选择问题............. 错误!未定义书签。 3.3 MATLAB实现技巧................... 错误!未定义书签。第4章结果分析........................... 错误!未定义书签。 4.1 ................................. 错误!未定义书签。 4.2 ............................... 错误!未定义书签。 五、总结与展望........................... 错误!未定义书签。 5.1 总结............................. 错误!未定义书签。 5.2 前景展望......................... 错误!未定义书签。

多目标优化实例和matlab程序

NSGA-II 算法实例 目前的多目标优化算法有很多, Kalyanmoy Deb 的带精英策略的快速非支配排序遗传算法(NSGA-II) 无疑是其中应用最为广泛也是最为成功的一种。本文用的算法是MATLAB 自带的函数gamultiobj ,该函数是基于NSGA-II 改进的一种多目标优化算法。 一、 数值例子 多目标优化问题 424221********* 4224212212112 12min (,)10min (,)55..55 f x x x x x x x x x f x x x x x x x x x s t x =-++-=-++-≤≤??-≤≤? 二、 Matlab 文件 1. 适应值函数m 文件: function y=f(x) y(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-x(1)^2*x(2)^2; y(2)=x(2)^4-x(1)^2*x(2)^2+x(1)^4+x(1)*x(2); 2. 调用gamultiobj 函数,及参数设置: clear clc fitnessfcn=@f; %适应度函数句柄 nvars=2; %变量个数 lb=[-5,-5]; %下限 ub=[5,5]; %上限 A=[];b=[]; %线性不等式约束 Aeq=[];beq=[]; %线性等式约束 options=gaoptimset('paretoFraction',,'populationsize',100,'ge nerations',200,'stallGenLimit',200,'TolFun',1e-100,'PlotFc ns',@gaplotpareto); % 最优个体系数paretoFraction 为;种群大小populationsize 为100,最大进化代数generations 为200, % 停止代数stallGenLimit 为200, 适应度函数偏差TolFun 设为1e-100,函数gaplotpareto :绘制Pareto 前端 [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,option

matlab生产调度问题及其优化算法

matlab生产调度问题及其优化算法

生产调度问题及其优化算法(采用遗传算法与MATLAB编程) 信息014 孙卓明 二零零三年八月十四日

生产调度问题及其优化算法 背景及摘要 这是一个典型的Job-Shop动态排序问题。目前调度问题的理论研究成果主要集中在以Job-Shop问题为代表的基于最小化完工时间的调度问题上。一个复杂的制造系统不仅可能涉及到成千上万道车间调度工序,而且工序的变更又可能导致相当大的调度规模。解空间容量巨大,N个工件、M台机器的问题包含M N)! (种排列。由于问题的连环嵌套性,使得用图解方法也变得不切实际。传统的运筹学方法,即便在单目标优化的静态调度问题中也难以有效应用。 本文给出三个模型。首先通过贪婪法手工求得本问题最优解,既而通过编解码程序随机模拟优化方案得出最优解。最后采用现代进化算法中有代表性发展优势的遗传算法。文章有针对性地选取遗传算法关键环节的适宜方法,采用MATLAB软件实现算法模拟,得出优化方案,并与计算机随机模拟结果加以比较显示出遗传算法之优化效果。对车间调度系列问题的有效解决具有一定参考和借鉴价值。 一.问题重述 某重型机械厂产品都是单件性的,其中有一车间共有A,B,C,D四种不同设备,现接受6件产品的加工任务,每件产品接受的程序在指定的设备上加 工序产品 1 2 3 4 5 6 7 8 S T S T S T S T S T S T S T S T 1 C 8 A 2 B 4 C 24 D 6 2 A 4 D 5 B 3 C 4 3 C 3 D 7 A 15 B 20 A 8 4 B 7 C 6 D 21 A 1 D 16 C 3 5 D 10 B 4 C 8 D 4 A 12 C 6 D 1 6 A 1 B 4 A 7 C 3 D 5 A 2 C 5 A 8 条件:1、每件产品必须按规定的工序加工,不得颠倒; 2、每台设备在同一时间只能担任一项任务。 (每件产品的每个工序为一个任务)

Matlab优化算法

Matlab优化 主讲人:饶志欢 现代优化算法 什么是优化?就是从各种方案中选取一个最好的。从数学角度看,优化理论就是研究如何在状态空间中寻找到全局最优点。 比如水泥混凝土的性能,涉及到水、沙、石子、水泥和其他掺杂物比例。学校课程表排课问题、售票员上岗问题、公司内部人员安排出效益等。降低成本、提高效益是问题的 关键。

1.1 MATLAB解优化问题的主要函数 1.2 优化函数的输入变量

1.3 优化函数的输出变量下表 1.4 控制参数options的设置 (1)Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时,显示最终结果.默认值为 ’final’. (2)MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数 . (3) MaxIter: 允许进行迭代的最大次数,取值为正整数 控制参数options可以通过函数optimset创建或修改。命令 的格式如下: (1) options=optimset(‘optimfun’) 创建一个含有所有参数名,并与优化函数optimfun相关的默 认值的选项结构options.

1.4 控制参数options的设置 (2)options=optimset(‘param1’,value1,’param2’,value2,...) 创建一个名称为options的优化选项参数,其中指定的参数 具有指定值,所有未指定的参数取默认值. (3)options=optimset(oldops,‘param1’,value1,’param2’, value2,...) 创建名称为oldops的参数的拷贝,用指定的参数值修改 oldops中相应的参数. 例:opts=optimset(‘Display’,’iter’,’TolFun’,1e-8) 该语句创建一个称为opts的优化选项结构,其中显示参数 设为’iter’, TolFun参数设为1e-8. 2.1 一元函数无约束优化问题 一元函数无约束优化问题 常用格式如下: (1)x= fminbnd (fun,x1,x2) (2)x= fminbnd (fun,x1,x2,options) (3)[x,fval]= fminbnd(...) (4)[x,fval,exitflag]= fminbnd(...)(5)[x,fval,exitflag,output]= fminbnd(...)函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只 给出局部最优解。

最优化各种方法MATLAB代码

最优化程序MATLAB 代码 程序 1.目标任务 分别用最速下降法、FR 共轭梯度法、DFP 法和BFGS 法求解无约束最值问题: 22 112212minf (x)x 2x x 4x x 3x =-++- 取初始点(1)T x (1,1)=和(2)T x (2,2)=,分别通过Matlab 编程实现求解过程。 2.程序实现(程序文件见附件) 2.1公用函数 1) function f= fun( X ) %所求问题目标函数 f=X(1)^2-2*X(1)*X(2)+4*X(2)^2+X(1)-3*X(2); end 2) function g= gfun( X ) %所求问题目标函数梯度 g=[2*X(1)-2*X(2)+1,-2*X(1)+8*X(2)-3]; end 3) function He = Hess( X ) %所求问题目标函数Hesse 矩阵 n=length(X); He=zeros(n,n); He=[2,-2; -2,4]; End 2.2其他函数

图2.2 函数程序文件图 1) 最速下降法的文件名为 :grad.m 。 2) FR 共轭梯度法的文件名为:frcg.m 。 3) DFP 法的文件名为:dfp.m 。 4) BFGS 法的文件名为:bfgs.m 。 3.程序运行结果 3.1最速下降法 3.1.1 初值为(1)T x (1,1) 图3.1.1.1 最速下降法求解最小值输出结果图

图3.1.1.2最速下降法求解最小值过程图 3.1.2初值为(2)T x (2,2) 图3.1.2.1最速下降法求解最小值输出结果图

大连理工优化方法-增广拉格朗日方法MATLAB程序

上机大作业II 定义目标函数fun function f=fun(x) x1=x(1); x2=x(2); f=4*x1-x2^2-12; 定义目标函数梯度函数dfun function f=dfun(x) x2=x(2); f=[4;-2*x2]; 定义等式约束函数hf function qua=hf(x) qua=25-x(1)^2-x(2)^2; 定义等式约束函数梯度函数dhf function qua=dhf(x) qua=[-2*x(1);-2*x(2)]; 定义不等式约束函数gfun function inq=gfun(x) inq=10*x(1)-x(1)^2+10*x(2)-x(2)^2-34; 定义不等式约束梯度数dgf function inq=dgf(x) inq=[10-2*x(1);10-2*x(2)]; 定义增广拉格朗日函数mpsi function psi=mpsi(x,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) f=feval(fun,x); he=feval(hf,x); gi=feval(gfun,x); l=length(he); m=length(gi); psi=f; s1=0; for i=1:l psi=psi-he(i)*mu(i); s1=s1+he(i)^2; end

psi=psi+0.5*sigma*s1; s2=0.0; for i=1:m s3=max(0.0, lambda(i) - sigma*gi(i)); s2=s2+s3^2-lambda(i)^2; end psi=psi+s2/(2.0*sigma); 定义增广拉格朗日函数梯度函数dmpsi function dpsi=dmpsi(x,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) dpsi=feval(dfun,x); he=feval(hf,x); gi=feval(gfun,x); dhe=feval(dhf,x); dgi=feval(dgf,x); l=length(he); m=length(gi); for i=1:l dpsi=dpsi+(sigma*he(i)-mu(i))*dhe(:,i); end for i=1:m dpsi=dpsi+(sigma*gi(i)-lambda(i))*dgi(:,i); end 定义BFGS法函数函数bfgs function [x,val,k]=bfgs(mpsi,dmpsi,x0,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) maxk=1000; rho=0.5; sigma1=0.4; epsilon1=1e-4; k=0; n=length(x0); Bk=eye(n); while(k

数学建模 MATLAB简介第六部分 MATLAB优化算法

第六部分MATLAB优化算法 一、线性规划算法 调用格式:[x, fval, exitflag]= linprog(f,A,b, Aeq,beq,lb,ub, x0) 说明:返回值x为最优解向量,fval为最优值;若没有不等式约束,则令A=[ ]、b=[ ] ;lb ,ub 为变量x的下界和上界,x0为初值点;exitflag 描述函数计算的退出条件:若为正值,表示目标函数收敛于解x处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。 例1、求解线性规划问题 max f=70x1+120x2 s.t 9x1+4x2≤3600 4x1+5x2≤2000 3x1+10x2≤3000 x1,x2≥0 将其转换为标准形式: min f=-70x1-120x2 s.t 9x1+4x2≤3600 4x1+5x2≤2000 3x1+10x2≤3000 x1,x2≥0 算法如下:f=[-70 -120]; A=[9 4 ;4 5;3 10 ]; b=[3600;2000;3000]; lb=[0 0]; ub=[]; [x,fval,exitflag]=linprog(f,A,b,[],[],lb,ub)

maxf=-fval 例2、求解线性规划问题 max f=0.15x1+0.1x2+0.08 x3+0.12 x4 s.t x1-x2- x3- x4≤0 x2+ x3- x4≥0 x1+x2+x3+ x4=1 x j≥0 , j=1,2,3,4 将其转换为标准形式: min z=-0.15x1-0.1x2-0.08 x3-0.12 x4 s.t x1-x2- x3- x4≤0 -x2- x3+ x4≤0 x1+x2+x3+ x4=1 x j≥0 , j=1,2,3,4 算法如下:f = [-0.15;-0.1;-0.08;-0.12]; A = [1 -1 -1 -1;0 -1 -1 1]; b = [0; 0]; Aeq=[1 1 1 1]; beq=[1]; lb = zeros(4,1); [x,fval,exitflag] = linprog(f,A,b,Aeq,beq,lb) f=-fval 二、二次规划算法 调用格式:[x,fval,exitflag]= quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) 说明:输入参数中,x0为初始点;若无等式约束或无不等式约束,就将相应的矩阵和向量设置为空。输出参数中,x是返回最优解;fval是返回解所对应的目标函数值;exitflag是描述搜索是否收敛。 例3、求解二次规划问题 min f(x)= x1-3x2+3x12+4x22-2x1x2 s.t 2x+x≤2

最优化算法实验报告(附Matlab程序)

最优化方法(Matlab)实验报告 —— Fibonacci 法 一、实验目的: 用MA TLAB 程序实现一维搜索中用Fibonacc 法求解一元单峰函数的极小值问题。 二、实验原理: (一)、构造Fibonacci 数列:设数列{}k F ,满足条件: 1、0 11F F == 2、11k k k F F F +-=+ 则称数列{}k F 为Fibonacci 数列。 (二)、迭代过程: 首先由下面的迭代公式确定出迭代点: 111 (),1,...,1 (),1,...,1 n k k k k k n k n k k k k k n k F a b a k n F F u a b a k n F λ---+--+=+ -=-=+ -=- 易验证,用上述迭代公式进行迭代时,第k 次迭代的区间长度缩短比率恰好为 1 n k n k F F --+。故可设迭代次数为n ,因此有 111212112211112 2 3 2 3 1()()...... ()() n n n n n n n n n F F F F F F b a b a b a b a b a F F F F F F F ------=-= ? -== ?-=- 若设精度为L ,则有第n 次迭代得区间长度 111()n n n b a L b a L F -≤-≤ ,即 就是 111()n b a L F -≤,由此便可确定出迭代次数n 。

假设第k 次迭代时已确定出区间 [,]k k a b 以及试探点,[,]k k k k u a b λ∈并且k k u λ<。计算试探点处的函数值,有以下两种可能: (1) 若()() k k f f u λ> ,则令 111111111,,()()() k k k k k k k k n k k k k k n k a b b f f F a b a F λλμλμμ++++--++++-=====+ - 计算 1()k f μ+的值。 (2)()()k k f f u λ≤ ,则令 111121111,,()()() k k k k k k k k n k k k k k n k a a b f f F a b a F μμλμλλ++++--++++-=====+ - 计算1()k f λ+ 的值。 又因为第一次迭代确定出了两个迭代点,以后每迭代一次,新增加一个迭代点,这样在迭代n-1后便计算完了n 个迭代点。因此第n 次迭代中,选用第n-1次的迭代点以及辨别常数δ构造n λ和n μ: 11n n n n λλμλδ --==+ 再用同样的方法进行判断: (1)、若 ()n f λ>()n f μ则令 1 n n n n a b b λ-== (2)、若 ()n f λ<=()n f μ则令 1n n n n a a b μ-== 这样便可确定出最优解的存在区间[,]n n a b 。

实用最优化方法Matlab程序设计

实用最优化方法Matlab程序设计

程序如下: function lambda=nonexact(x0,s0) g0=grad(x0); f0=f(x0); a=0; c1=0.1; c2=0.5; lambdak=1; sk=s0; d=-c1*lambdak*g0'*sk; xk=x0+lambdak*sk; f1=f(xk); e=f0-f1; while d>e lambdak=(lambdak+a)/2; xk=x0+lambdak*sk; fk=f(xk); e=f0-fk; d=-c1*lambdak*g0'*sk; end lambdak function g=grad(x) g=zeros(2,1); g(1)=-4*x(1)*(x(2)-x(1)^2)-2*(1-x(1)); g(2)=2*(x(2)-x(1)^2); function fa=f(x) fa=(x(2)-x(1)^2)^2+(1-x(1))^2; 在命令窗口中输入x0=[0;1];s0=[-1;1];nonexact(x0,s0)输出结果为:

程序如下: function x_star=cong(x0,eps) g0=grad(x0); res0=norm(g0); resk=res0; k=0; xk=x0; while resk>eps k=k+1; if k==1 sk=-grad(xk); else sk=-grad(xk)+resk^2/res0^2*s0; end lambdak=step(xk,sk); x0=xk; xk=x0+lambdak*sk; res0=resk; resk=norm(grad(xk)); s0=sk; fprintf('------the%d-th iteration,the residual is%f,the lambdak is%f\n\n', k,resk,lambdak); end x_star=xk; disp('the optimal solution is'); x_star

现代优化方法与MATLAB实现

例8.2 第1种方法:首先建立适应度函数FitFun.m文件 function y=FitFun(x) y=x(1)^2+2*x(2)^2-4*x(1)-8*x(2)+15; 建立约束函数文件NonCon.m function[c,ceq]=NonCon(x) c=x(1)^2+x(2)^2-9; ceq=[]; 第2种方法:利用第1种方法中适应函数FitFun.m和约束函数NonCon.m,编写m文件调用ga函数进行求解。 objectivef=@FitFun; nvars=2; lb=[0 0]; ub=[]; constrainf=@NonCon; [x,fval]=ga(objectivef,nvars,[],[],[],[],lb,[],constrainf) 上述m文件运行结果如下 X=2.0000 2.0000 fval=3.0000 可见与第1种算法相同。 ============================================================== 例8-3 第1种方法:首先建立目标函数simple.m文件 function y=simple(x) y=(4-2.1*x(1)^2+x(1)^4/3)*x(1)^2+x(1)*x(2)+(-4+4*x(2)^2)*x(2)^2; Simulannea 第2种方法:利用第1种方法中目标函数simple.m,编写m文件调用lbnd 函数进行求解。 objectivef=@simple x0=[0.5 0.5]; lb=[-64 -64]; ub=[64 64]; [x fval]=simulannealbnd(objectivef,x0,lb,ub) 上述m文件运行结果如下 X=-0.0896 0.7127 fval=-1.0316 可见与第1种算法相同。

相关文档
最新文档