【发布时间】:2010-11-22 06:20:58
【问题描述】:
我正在尝试使用 scipy 中的 l_bfgs 约束优化例程来优化函数。 但是优化例程将值传递给函数,这些值不在 Bounds 中。
我的完整代码看起来像,
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 ####
基于初始值(Initial)和边界(interval) opt = optimize.fmin_l_bfgs() 会将值传递给我的软件进行模拟,但传递的值应该在“边界”内。事实并非如此......请参阅下面在各种迭代中传递的值
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]
在这次迭代中,-4.4139714 被传递给我的第二个参数,但它应该与 (10.0, 50000.0) 不同,我不知道 -4.4139714 从哪里来?
我应该在哪里更改代码?以便它传递应该在范围内的值
【问题讨论】:
-
有人请删除代码中多余的行...
-
@NicDumZ:为什么不自己做呢?
-
@Joachim:因为你需要 2k 代表才能做到这一点?
-
@pear:请发布您遇到问题的实际代码。浮点值的“^”不能正确。
-
@tonfa:很公平。 @NicDumZ:抱歉。