Scipy fmin根据条件优化功能

时间:2016-04-01 06:06:40

标签: python optimization scipy

假设我有一个函数,它对数据的值表现不同(即:通过使用条件)。是否可以使用fmin优化此类函数,以便找到最大化输出的值?

这就是我目前拥有的原因:

def bogus_function(x):
    if x[0] > 5 or x[1] > 5:
        return 20
    elif x[1] > 2:
        return x[0]*x[1]
    else:
        return -1

test = lambda x: -bogus_function(x)
results = fmin(test,[0,0])

这是“卡住”的地方,因为打印结果并查看优化过程,算法尝试相同的初始猜测而不更改值。

Optimization terminated successfully.
     Current function value: 1.000000
     Iterations: 16
     Function evaluations: 63

>>> results
(array([ 0.,  0.]),
 [array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.]),
  array([ 0.,  0.])])

在这种情况下,bogus_function最佳值为:[5,5],这使得最终的最大值等于25.任何想法是否可以进行这种优化?谢谢!

1 个答案:

答案 0 :(得分:1)

如上所述,x = [0,0]有资格作为局部最小值:你稍微偏离它,并且函数的值不会改变。 你可能想要一些非常数的东西。

一般而言,对于许多优化算法而言,重要的是您的功能是连续的还是可区分的。有些算法可以处理缺乏平滑性,有些则不能。