我需要一个优雅,简单的系统来找出给定一个或多个参数的确定性函数返回的最高值。
我知道在MATLAB中有一个很好的遗传算法实现,但实际上,在我的情况下,这是一个过度杀伤力。我需要更简单的东西。
有什么想法吗?
答案 0 :(得分:2)
您无法直接使用Matlab找到最大值,但您可以最小化某些内容。将函数乘以-1可将“找到最大值”问题转换为“找到最小值”问题,可以使用fminsearch
找到问题
f = @(x) 2*x - 3*x.^2; % a simple function to find the maximum from
minusf = @(x) -1*f(x); % minus f, find minimum from this function
x = linspace(-2,2,100);
plot(x, f(x));
xmax = fminsearch(minusf, -1);
hold on
plot(xmax,f(xmax),'ro') % plot the minimum of minusf (maximum of f)
结果如下所示:
答案 1 :(得分:1)
一个真正简单的想法是使用网格搜索方法,可能使用网格细化。更好的想法是使用更先进的无衍生优化器,例如Nelder-Mead算法。这可以在fminsearch
中找到。
您还可以尝试使用全局优化工具箱中的算法:例如patternsearch
或臭名昭着的simulannealbnd
。