我有一个离散优化问题,其中包含一个复杂的目标函数,该函数是一个由传递给它的参数产生的浮点数,它只能在离散化的步骤中使用(此处为int)。
是否存在用于有界离散优化的标准最速下降工具?
Python是理想的,因为我已经用这种语言强制执行所有这些。
我已经调查了scipy.optimize.brute,但我想避免暴力强迫整个问题,因为我改变了目标函数,这种问题在我的研究中反复出现。
我的目标函数是一组值的RMS误差(使用离散参数列表)与参考值集合。
编辑:
根据https://github.com/perrygeo/python-simulated-annealing中的建议检查模拟退火包(Discrete optimzation in python) 这仍然不理想,因为表面不应该那么复杂(这里4-5维,对参数的依赖性很弱)。
EDIT2:
似乎应该有更好的方法来做到这一点,但有限时间尺度的模拟退火方法似乎是可以接受的 - 包括我的代码
from random import *
from copy import deepcopy
def move(params): #has specific steps of parameters included
p=deepcopy(params)
a=randint(0,3)
b=randint(0,1)
#print a,b
if b==1:
if a!=3:
p[a]=params[a]+5
else:
p[a]=params[a]+50
else:
if a!=3:
p[a]=params[a]-5
else:
p[a]=params[a]-50
return p
def isvalid(params,temp): #checks for boundary conditions and temperature constraint
for i in xrange(3):
if params[i]<60:
return False
if params[i]>135:
return False
if params[-1]>1500:
return False
if params[-1]<600:
return False
if objfun(params,quiet=True)<temp:
return True
else:
return False
params=[75,85,70,1400]
temp=0.075
best=deepcopy(params)
bestval=objfun(best)
runlength=1000
for i in xrange(runlength):
newp=move(params)
if isvalid(newp,temp):
params=newp
en=objfun(params)
if en<bestval:
best=deepcopy(params)
bestval=en
print best,bestval