假设我有一个函数,它对数据的值表现不同(即:通过使用条件)。是否可以使用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.任何想法是否可以进行这种优化?谢谢!
答案 0 :(得分:1)
如上所述,x = [0,0]有资格作为局部最小值:你稍微偏离它,并且函数的值不会改变。 你可能想要一些非常数的东西。
一般而言,对于许多优化算法而言,重要的是您的功能是连续的还是可区分的。有些算法可以处理缺乏平滑性,有些则不能。