matlab遗传算法求函数极小值!!!急!!

f(x,y)=-2.113-0.1326x+10.49y+0.1505x^2-2.924x*y+10.11y^2;x(0,0.1);y(18,36);我要matlab代码... f(x,y) =-2.113-0.1326x+10.49y+0.1505x^2-2.924x*y+10.11y^2 ;
x(0,0.1);
y(18,36);
我要matlab代码
展开
 我来答
tianxiawulang
2014-01-17 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2606万
展开全部

如果没有其他约束条件,直接用ga求解:

>> fi=inline('-2.113-0.1326*x(1)+10.49*x(2)+0.1505*x(1)^2-2.924*x(1)*x(2)+10.11*x(2)^2','x');
>> ga(fi,2,[],[],[],[],[0 18],[0.1 36])
Optimization terminated: average change in the fitness value less than options.TolFun.
ans =
    0.1000   18.0000

即最小值在x=0.1、y=18处。

 

直接画出函数的图像来,可以验证结论的正确性:

ezmesh('-2.113-0.1326*x+10.49*y+0.1505*x^2-2.924*x*y+10.11*y^2',[0 0.1],[18 36])

 

另外,从图中注意到,x 对f(x,y)的影响不大,但如果我们取y=18,画出f(x,18)的函数图像来:

syms x y
f = -2.113 - 0.1326*x + 10.49*y + 0.1505*x^2 - 2.924*x*y +10.11*y^2;
y=18;
ezplot(subs(f),[0 0.1])

可见,尽管x对f的影响比较小,但函数值还是随着x增大而减小的。综上分析,ga的计算结果是正确的。

 

 

至于你之前说到的约束条件

    y = 31.1688 * exp(-0.755*x)

如果画去曲线来:

ezplot('31.1688 * exp(-0.755*x)',[0 0.1])

可以看到,y在18-36的范围内,倒是和你给的范围不矛盾(但应该更小一些才对)。

追问
能不能把遗传算法完整代码贴给我我需要运行出来给老师看。。。谢谢大神了!太牛了
追答
不知道你的确切要求是什么?
1、首先,就这个问题而言,其实并不是很适合用遗传算法求解,这是因为,在指定区域内,函数并不存在多个局部最有点,使用常规的优化算法更为可取。
2、如果一定要用遗传算法,是否有要求必须自编遗传算法的程序?除非专门研究算法,否则,没道理不使用现有很成熟的工具箱,而偏偏要自己去编写程序。
3、如果使用已有的遗传算法程序,那么重要的是掌握相关函数(主函数ga,其他还有设置算法使用的gaoptimset等)的调用方法,怎样用它们去解决实际问题,而不是去研究这些函数的实现代码。而且,最重要的是,作为较为完善的工具箱,这些函数又调用了很多函数,想要完整地对这些代码进行分析,需要花费很多时间和精力。
4、如果重心放在算法如何实现(而不是如何解决问题)上,那么你上次找的程序基本可用,但还需要做一些修改。因为原来的程序是用于解决三元函数优化的,而且由于实现的手段欠佳,改成二元函数还要费一番工夫。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式