首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fminsearch最大化功能

使用fminsearch最大化功能
EN

Stack Overflow用户
提问于 2012-05-02 17:22:27
回答 3查看 5.5K关注 0票数 3

在我的日常工作中,我必须利用fminsearch最大化一个特定的功能;代码是:

代码语言:javascript
复制
clc
 clear all
 close all

 f = @(x,c,k) -(x(2)/c)^3*(((exp(-(x(1)/c)^k)-exp(-(x(2)/c)^k))/((x(2)/c)^k-(x(1)/c)^k))-exp(-(x(3)/c)^k))^2;
 c = 10.1;
 k = 2.3;
 X = fminsearch(@(x) f(x,c,k),[4,10,20]);

正如我所期望的那样,它工作得很好,但问题并没有出现:我需要将x限制在一定的范围内,如下所示:

代码语言:javascript
复制
 4 < x(1) < 5
 10 < x(2) < 15
20 < x(3) < 30

为了达到正确的结果,我应该使用优化工具箱,不幸的是我不能使用它。

有没有办法只使用fminsearch就能得到同样的分析结果呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-02 20:13:33

好吧,不是直接使用fminsearch,但是如果你愿意从文件交换下载fminsearchbnd,那么可以。fminsearchbnd对一般目标函数进行有界约束最小化,作为fminsearch上的覆盖。它为您调用fminsearch,对问题应用边界。

本质上,这个想法是为你转换你的问题,以一种你的目标函数看起来好像是在解决一个受约束的问题的方式。它是完全透明的。您可以使用一个函数、参数空间中的一个起始点以及一组上下界来调用fminsearchbnd

例如,最小化rosenbrock函数将通过fminsearch返回最小值1,1。但是如果我们对每个变量的问题2应用纯粹的下界,那么fminsearchbnd就会在2,4处找到有界的约束解。

代码语言:javascript
复制
rosen = @(x) (1-x(1)).^2 + 105*(x(2)-x(1).^2).^2;

fminsearch(rosen,[3 3])     % unconstrained
ans =
   1.0000    1.0000

fminsearchbnd(rosen,[3 3],[2 2],[])     % constrained
ans =
   2.0000    4.0000

如果对变量没有约束,则提供-inf或inf作为相应的界限。

代码语言:javascript
复制
fminsearchbnd(rosen,[3 3],[-inf 2],[])
ans =
       1.4137            2
票数 3
EN

Stack Overflow用户

发布于 2012-05-02 20:07:44

绑定x的最天真的方法是对任何不在范围内的x进行巨大的惩罚。

例如:

代码语言:javascript
复制
   function res = f(x,c,k)
        if x(1)>5 || x(1)<4
            penalty = 1000000000000;
        else
            penalty = 0;
        end
        res = penalty - (x(2)/c)^3*(((exp(-(x(1)/c)^k)-exp(-(x(2)/c)^k))/((x(2)/c)^k-(x(1)/c)^k))-exp(-(x(3)/c)^k))^2;
   end

你可以通过以更流畅的方式给予惩罚来改进这种方法。

票数 2
EN

Stack Overflow用户

发布于 2012-05-02 20:29:36

安德烈的想法是正确的,提供点球的更流畅的方式并不难:只需在等式中添加距离。

要继续使用匿名函数:

代码语言:javascript
复制
f = @(x,c,k, Xmin, Xmax) -(x(2)/c)^3*(((exp(-(x(1)/c)^k)-exp(-(x(2)/c)^k))/((x(2)/c)^k-(x(1)/c)^k))-exp(-(x(3)/c)^k))^2 ...
+ (x< Xmin)*(Xmin' - x' + 10000) + (x>Xmax)*(x' - Xmax' + 10000) ;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10410930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档