分段常数和类似错误定义函数的优化算法

时间:2016-11-02 06:00:36

标签: algorithm mathematical-optimization heuristics approximation nonlinear-optimization

我有一个函数,它将n维(比如说n = 10)个向量作为输入,其组成部分是实数,从0到大的正数A变为50,000,包括结尾。对于任何这样的向量,函数输出从1开始的整数,即B = 100。我有这个功能,想找到它的全局最小值。

一般来说,有基于算法,​​迭代和启发式的方法来解决这样的优化问题。哪些是解决此问题的最佳技术?我正在寻找算法或活跃的研究论文的建议,我可以从头开始实现,以解决这些问题。我已经放弃了Matlab / python附带的现有优化功能的希望。我希望阅读使用近似/启发式算法的其他人的经验,以优化这种不明确的功能。

我在Matlab中运行了fminconfminsearchfminunc,但他们未能优化该功能。该功能根据其定义定义不明确。 Matlab对fmincon说明了这一点:

Initial point is a local minimum that satisfies the constraints.

Optimization completed because at the initial point, the objective function is non-decreasing 
in feasible directions to within the selected value of the optimality tolerance, and 
constraints are satisfied to within the selected value of the constraint tolerance.

出现问题是因为此函数具有分段常量行为。如果向量V被指定为数字65,则稍微改变其组件可能没有任何变化。由于鸽子原则,这种不明确的行为是值得期待的。函数域是无限的,而范围只是一堆数字。

我还想澄清可能出现的一个问题。假设我在起始点x0上进行梯度下降,而我从GD-iteration得到的下一个x有一些组件位于域[0,50000]之外,那么会发生什么?所以实际上域名是循环的。因此像[30; 5432; 50432]这样的大小为3的向量变为[30; 5432; 432]。这是自动处理的,因此不必担心迭代在域外找到向量。

0 个答案:

没有答案