私はscipyでl_bfgs制約最適化ルーチンを使用して関数を最適化しようとしています。 しかし、最適化ルーチンは値を関数に渡しますが、これは境界にはありません。私の完全なコードは次のように見えますは、境界値で厳密にパラメータ値を制限する
、初期値(初期)との境界(間隔) OPT = optimize.fmin_l_bfgs()シミュレーションのための私のソフトウェアに値を渡しますが、値に基づいて
def humpy(aParams):
aParams = numpy.asarray(aParams)
print aParams
####
# connect to some other software for simulation
# data[1] & data[2] are read
##### objective function
val = sum(0.5*(data[1] - data[2])**2)
print val
return val
####
def approx_fprime():
####
Initial = numpy.asarray([10.0, 15.0, 50.0, 10.0])
interval = [(5.0, 60000.0),(10.0, 50000.0),(26.0, 100000.0),(8.0, 50000.0)]
opt = optimize.fmin_l_bfgs(humpy,Initial,fprime=approx_fprime, bounds=interval ,pgtol=1.0000000000001e-05,iprint=1, maxfun=50000)
print 'optimized parameters',opt[0]
print 'Optimized function value', opt[1]
####### the end ####
渡されるべきは「境界」であるべきである。この繰り返し-4.4139714で様々なイテレーション
iter 1 = [ 10.23534209 15.1717302 50.5117245 10.28731118]
iter 2 = [ 10.23534209 15.1717302 50.01160842 10.39018429]
[ 11.17671043 15.85865102 50.05804208 11.43655591]
[ 11.17671043 15.85865102 50.05804208 11.43655591]
[ 11.28847754 15.85865102 50.05804208 11.43655591]
[ 11.17671043 16.01723753 50.05804208 11.43655591]
[ 11.17671043 15.85865102 50.5586225 11.43655591]
...............
...............
...............
[ 49.84670071 -4.4139714 62.2536381 23.3155698847]
で渡された値以下case..seeは私の第二のパラメータに渡されますが、それは私がドン-4.4139714来るところから、(10.0、50000.0)から変化すべきではない厥知っている?
ここでコードを変更する必要がありますか?境界内にあるべき値を渡したようにする
コード内の余分な行を削除してください。 – NicDumZ
@NicDumZ:自分でやってみませんか? –
@ジョアヒム:それを行うには2Kの担当者が必要なので? – tonfa