在Matlab中,我想使用fminsearch来优化给定对象函数fun
的数字间隔。整数可以从1到30中选择,并且目前整数数量固定为5。假设步长为1。它将优化许多矢量,例如:
[1 2 3 4 5]
[2 3 4 5 6]
[7 8 9 10 11]
[12 13 14 15 16]
从长远来看,我可能还会尝试优化步长和向量中整数的数量。
我想知道如何使用fminsearch正确实现这一目标,或者可能使用工具箱中的其他功能?任何建议将不胜感激。
答案 0 :(得分:1)
首先,如documentation中所述,fminsearch
仅能找到最少的无约束函数。另一方面,fminbnd
可以处理绑定约束,但是,这些功能均不能解决离散功能。因此,您可能想考虑其他选项,例如ga
。
尽管fminsearch
不能处理约束,但是您仍然可以使用它来解决优化问题,但要花一些不必要的额外迭代。在这个答案中,我假设有一个fun
函数,该函数以一个特定范围的间隔作为参数,目的是找到使该间隔最小的函数。
由于间隔具有固定的步长和长度,因此问题是单变量的,我们只需要找到其起点即可。我们可以使用floor
将连续问题转换为离散问题。为了覆盖边界约束,我们可以检查区间的可行性,并为不可行的区间返回Inf
。就像这样:
%% initialization of problem parameters
minval = 1;
maxval = 30;
step = 1;
count = 5;
%% the objective function
fun = @(interval) sum((interval-5).^2, 2);
%% a function that generates an interval from its initial value
getinterval = @(start) floor(start) + (0:(count-1)) * step;
%% a modified objective function that handles constraints
objective = @(start) f(start, fun, getinterval, minval, maxval);
%% finding the interval that minimizes the objective function
y = fminsearch(objective, (minval+maxval)/2);
best = getinterval(y);
eval = fun(best);
disp(best)
disp(eval)
其中f
函数是:
function y = f(start, fun, getinterval, minval, maxval)
interval = getinterval(start);
if (min(interval) < minval) || (max(interval) > maxval)
y = Inf;
else
y = fun(interval);
end
end