【问题标题】:Matlab use fminsearch to optimize a interval of numbersMatlab使用fminsearch优化数字区间
【发布时间】:2019-11-21 22:09:19
【问题描述】:

在 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 来正确实现这一点,或者可能使用工具箱中的其他功能?任何建议将不胜感激。

【问题讨论】:

  • 我有点困惑。是不是你有这个目标函数fun,它需要一个间隔,例如1:5,作为参数,你想找到最小化fun的区间?
  • 您的问题表述不清楚。为什么不使用 MILP?
  • @Adam 很抱歉,但我没有解释清楚。基本上,我们希望这个优化器可以在以后优化其他不是整数的变量。因此,与其给它一个搜索范围,我们希望它可以通过给定的数字列表进行搜索。
  • @SimaGuanxing 当你说搜索给定的数字列表时,就像在列表中找到最佳索引一样。它仍然是整数规划。

标签: matlab mathematical-optimization integer-programming


【解决方案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

【讨论】:

  • 感谢您的回答。如果我想要两个约束,假设我有另一个名为 Vx 的变量,它从 0.1 到 0.9,每次搜索增加 0.1 步,我如何适应你编写的函数来实现它?非常感谢您的帮助!
  • @SimaGuanxing 在这种情况下,start 将是一个向量,您需要修复它们的步骤并独立检查它们的有效性。就像`Vx=floor(start(2) * 10)/10;如果 (Vx0.9) y=Inf;.
  • 我有点理解您建议更改的内容,但在实施时仍然感到困惑。我应该对不同的变量使用相同的 f 函数还是使用相同的函数?如果您可以更新代码以反映第二个约束的更改,我将不胜感激。谢谢!
  • 在同一个函数中实现。 fminsearch 能够最小化多元函数。因此,当您调用 fminsearch(X, Y) 时,X 和 Y 都可以是相同大小的向量。现在,当您想要检查解决方案的可行性时,您需要检查其所有变量。
  • @SimaGuanxing 我真的认为您需要使用fminsearch 提出一个关于多元函数的新问题。并尝试描述你做了什么,问题是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多