2

我有一个希望最小化的多变量函数。该函数有两个输入参数,一个向量 c 和一个标量 \theta。

在 MATLAB 中使用 fmincon 解决 c 和 \theta 的优化问题很复杂,因为 \theta 的某些值会导致数值错误。但是,通过 fmincon 可以很容易地获得固定 theta, c 而不会出现任何错误。

所以现在的计划是做一个蛮力方法,即计算 1:100 范围内的每个 \theta 值的 c(尽管 \theta 的真正约束是 \theta \ge 0)并选择 \theta(以及相应的c) 通过将估计的参数插入到目标函数中,目标值被最小化。

现在这对我来说听起来不是很有效,我想知道我是否可以采用二分法式的方法,这样我就不必在上面指定的范围内检查 \theta 的所有可能值。

非常感谢!

4

2 回答 2

2

您应该能够让 fmincon 在ctheta. 如果在包含 theta 时它无法获得不错的结果,很可能是因为其中的元素c具有theta非常不同的尺度。你应该缩放你的方程,使所有的变量最终都在 1.0 左右。这极大地提高了几乎所有数值优化代码的性能(即速度)和准确性。

因此,如果您怀疑 的最终值c可能最终为 [1.0 0.001 10.0] 并且您怀疑 theta 可能最终为 [10.0],您可以将问题表述为

>>>>>>>>>>>>>>>>>>>>> in your main program prior to invoking fmincon
c = [1.0 0.001 10.0]
theta = 10.0
foo_x = [c(:);thetha];
scale_fac = [1.0 1000.0 0.1 0.1];
x = foo_x .* scale_fac;  %scale your seed values to be near 1.0

>>>>>>>>>>>>>> inside your function
function err = myfunction(x,scale_fac)
foo_x = x ./ scale_fac;  %de-scale to get back to correct magnitude
c = foo_x(1:3);
theta = foo_x (4);

...rest of your code
于 2014-11-30T02:25:19.883 回答
1

仅当目标函数在 theta 中是凸的(或准凸的)时,对 theta 的二分搜索才有效。否则,您可能会发现本地最小值而不是全局最小值。

正如@chipaudette 所建议的那样,如果您选择能够解决非凸优化问题的求解器,那么进行嵌套 fmincon 应该可以工作。(关于这个主题的MATLAB 帮助有点模糊,但我认为 SQP 求解器应该没问题。)但我怀疑仅枚举相关的 theta 范围会更有效,而不是使用 fmincon 。

于 2014-11-30T20:33:31.010 回答