我有收入的目标函数,其形式为e^(β1*log(P1)+β2*log(P2)+…β250*log(P250)),其中P1,P2。。。P250是某些项目的价格和beta1、beta2,。。。beta250.1是模型中的弹性系数。我希望实现收入最大化,目前使用SLSQP对价格、单位和客人数量进行限制。我面临的问题是优化器陷入局部极小值(当我将价格界限放宽5%或10%甚至更多时,它返回相同的o/p)。我试着使用手动编写的渐变和近似。在这两种情况下,它都被困在当地。我不能使用全局优化器,因为它们需要很多时间,我们计划实时部署优化器,以便商店经理可以使用它。你能推荐一些没有局部极小值问题的算法,并且应该在30到45秒内收敛吗
谢谢
我们没有完整的模型,因此仅限于处理部分信息,以下是一些备注:
max Exp(sum())
目标可以替换为max sum()
(因为exp()
是单调的)李>basinhopping
+SLSQP,但我不确定这是否适用于约束李>你别无选择。如果我理解正确,您正试图使用局部优化器SLSQP优化一个具有250个参数的目标函数。现在,我真的不知道你的250维目标函数是什么样子的,但是如果在任何方向上你有超过一个山谷,那么任何局部优化算法都会陷入局部极小值,除非你提供一个已经非常接近全局最优值的起点
这是一个相对大量的参数优化,同时寻求一个全局最优。我唯一的建议是以分析的方式输入渐变,用Cython或FORTRAN+f2py编写函数和渐变(尽管我不确定您可以从中获得多少收益),然后尝试使用全局优化器(例如,请参见http://infinity77.net/global_optimization/multidimensional.html)或具有不同起点的多起点SLSQP
根据算法(以及您使用的机器),30到45秒可能会为您提供100000次以上的功能评估。对于这样一个规模的问题来说,这不是什么大问题:如果目标函数是复杂的,不幸的是,可能性并不存在
相关问题 更多 >
编程相关推荐