用于离散优化的最速下降工具

时间:2014-07-10 00:13:57

标签: python optimization scipy

我有一个离散优化问题,其中包含一个复杂的目标函数,该函数是一个由传递给它的参数产生的浮点数,它只能在离散化的步骤中使用(此处为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

0 个答案:

没有答案