怎样运用matlab解决最优化问题

怎样运用matlab解决最优化问题,第1张

打开matlab2014a程序,在主工具栏找到应用敏喊程序一栏,打开optimization选项。

问题输入

在optimization程序中,首先根据不同的问题类型选择不同的模型,同时输入约束等。

选择优化程序运行的条件

在最中间的一栏中添加优化程序运行的条件,如优化截止的标准,画图的要求等等。

开始运算

点击start即可实现优化程序的运行,在图示的框中即可出现运知拿胡行结果。

5

查看帮助文件

在程序搭拦的最右边,是一个帮助文件,如果你有什么疑问,可以直接在帮助文件中查找。

几个方面:

1、最大的问题是循环体里面的 pause(0.1),尤其是里面那一层循环。

2、很多赋值语句后面应该加分号,避免显示。

3、数组预置(对于这段代码而言不是很重要)。

里面那层的pause是在这样的循环结构中:

for k=1:10

    i=i+1

    for x=2:z-1

        for y=2:z-1

粗略估算一下,会执行10*18*18次,每次0.1秒,仅这一句就会耗时324秒。

删除上述pasue之后,在我的电脑上运行大约需要27秒。

有多处赋值语句的尾部没有使用分号,导致数组在命令窗口中回显,这也会占用很多时间。那些语句就不一一列举了,修改后的代码如下:

clear allclc

z=20i=0

a=cat(3,rand(z),rand(z),zeros(z))

b=a(:,:,1)%HSI

c=a(:,:,2)%生物量

imh=image(cat(3,c,zeros(z),zeros(z)))%先生成一个图像

for k=1:10

    i=i+1

    for x=2:z-1

        for y=2:z-1

            d{x,y}=[b(x-1,y-1),b(x-1,y),b(x-1,y+1)

                b(x,y-1),b(x,y),b(x,y+1)

                b(x+1,y-1),b(x+1,y),b(x+1,y+1)]%表示周围8个HSI

            e{x,y}=[c(x-1,y-1),c(x-1,y),c(x-1,y+1)

                c(x,y-1),1,c(x,y+1)

                c(x+1,y-1),c(x+1,y),c(x+1,y+1)]%表示周围8个生物量 

            while c(x,y)>0&&min(min(e{x,y}))<1&&min(min(d{x,y}))~=0&&c(x,y)~=0%如果当前位置(x,y)生物量大于0,并且

                %该位置周围8个网格生物量有小于环境容纳量,

                %并且,周围猜困8个网格最小适宜度值不等于0

                %并且,当前位置生物量不等于0的情况

                [m,n]=find(d{x,y}==max(max(d{x,y})))%获取周围8个网格最大的HSI,确定迁移方向

                if isequal([m,n],[x,y])%如果目标单元是当前位置,即m,n和x,y相等

                    c(m,n)=c(x,y)%那么生物量不迁移

                    set(imh,'cdata',cat(3,c,zeros(z),zeros(z)))

                    break

                else

                    if c(m,n)<1%判定目标单元生物量是否饱和,若不饱和

                 局手       c(m,n)=c(m,n)+c(x,y)%目标单元生物量等于已有+迁移的(x,y)的生物量

                        if c(m,n)>1

                            c(m,n)=1

                        end

                        c(x,y)=1-c(m,n)

                        if c(x,y)>=0

                            c(x,y)=0%迁移过后命令该点生物量等于零

                            set(imh,'cdata',cat(3,c,zeros(z),zeros(z)))

                            break 

                        else 

                            c(x,y)=c(m,n)-1

                        end

                    else

                        d{x,y}(m,n)=0%若饱和了,重新选择方向,命令目标单元穗腊念HSI=0.重新选择方向

                    end

                end

            end

              % pause(0.1)

        end

    end

    set(imh,'cdata',cat(3,c,zeros(z),zeros(z)))

    pause(0.1)

end

i

这样修改之后,在我的电脑上运行至需要大约1.3秒。如果再把最后的一个pause删掉,则仅需大约0.3秒。

例1 求 f = 2 在0<x<8中的最小值与最大值

主程序为wliti1.m:

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.9270ymin = -0.0279

xmax = 0.7854 ymax = 0.6448

★(借助课件说明过程、作函数的图形)

例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使卖仿卖水槽的容积最大?

设剪去的正方形的边长为x,则水槽的容积为: ,建立无约束优化模型为:min y=- , 0<x<1.5

先编写M文件fun0.m如下:

function f=fun0(x)

f=-(3-2*x).^2*x

主程序为wliti2.m:

[x,fval]=fminbnd('fun0',0,1.5)

xmax=x

fmax=-fval

运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.

★(借助课件说明过程、作函数的图形、并编制计算程序)

例3

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

★(借助课件说明过程、作函数的图形并编制计算程序)

例4 Rosenbrock 函数 f(x1,x2)=100(x2-x12)2+(1-x1)2 的最优解(极小)为x*=(1,1),极小值为f*=0.试用不同算法(搜索方向和步长搜索)求数值最优解.初值选为x0=(-1.2 , 2).

为获得直观认识,先画出Rosenbrock 函数的三维图形, 输入以下命令:

[x,y]=meshgrid(-2:0.1:2,-1:0.1:3)

z=100*(y-x.^2).^2+(1-x).^2

mesh(x,y,z)

画出Rosenbrock 函数的等高线图,输入命令中逗:

contour(x,y,z,20)

hold on

plot(-1.2,2,' o ')

text(-1.2,2,'start point')

plot(1,1,'o')

text(1,1,'solution')

f='100*(x(2)-x(1)^2)^2+(1-x(1))^2'

[x,fval,exitflag,output]=fminsearch(f, [-1.2 2])

运行结果:

x =1.00001.0000

fval =1.9151e-010

exitflag = 1

output =

iterations: 108

funcCount: 202

algorithm: 'Nelder-Mead simplex direct search'

★(借助课件说明过程、作函数的图形并编制计算程序)

(五)、 作业

陈酒出售的最佳时机问题

某酒厂有批新酿的好酒,如果现在就出售,可得总收入R0=50万元(人民币),如果窖藏起来待来日(第n年)按陈酒价格出售,第n年末可得总收入 (万元),而银行利率为r=0.05,试分析这批好酒窖藏多少年后出售可使总收入的现值最大. (假设现有资金X万元,将大掘其存入银行,到第n年时增值为R(n)万元,则称X为R(n)的现值.)并填下表:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12562866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存