2017-04-23 78 views
1

我想估计一个新产品的需求。客户是代理商。每种产品都有3个变量需要根据购买情况进行优化。为了找到使销售最大化的最佳变量,我使用了局部优化算法,即梯度下降法。它的工作原理如下:Netlogo本地优化

1.定义重量,大小和价格的初始值。 2.搜索程序开始: dgradient是目标函数梯度的范数。 dx计算变量和新变量之间的差异。

while [dgradient > 0.00001 and numiter < 1000 and dxw > 0.00001 and dxs > 0.00001 and dxp > 0.00001] 

set weightnw weight - stepsize * (the gradient) 
set sizenw size - stepsize * (the gradient) 
setpricenw price - stepsize * (the gradient) 

搜索过程,在附近产生新的变量,但我必须确保它们在范围内。所以我定义这个while循环,以确保他们在范围:

while [not(((weightnw <= 400) and (weightnw >= 100)) and ((sizenw >= 5) and sizenw <= 20)) and ((pricenw >= 20) and (pricenw <=90)))] 
set stepsize stepsize - 0.0001 
set weightnw weight - stepsize * (the gradient) 
set sizenw size - stepsize * (the gradient) 
setpricenw price - stepsize * (the gradient) 

然后目标函数的计算,并与新变量的目标函数的值进行比较。

程序是否有意义?

由于

+0

如何计算梯度?为什么不使用重新启动爬坡或某种搜索算法呢?请参阅http://ccl.northwestern.edu/netlogo/models/community/gradient – mattsap

+0

另外,您遇到的问题是什么?期望值是否被关闭?我*认为*您可能会发现本地最小/最大值而不是全局值,但它确实取决于未显示的其余代码。 – mattsap

回答

2

numanal延伸部包括用于优化多变量问题,包括单纯形法和更深奥的方法如CMAES和BOBYQA几种方法。他们确实允许设置界限。 NetLogo 6.0还没有完全准备好(5.3版本有一个工作版本),但如果你认为它可能有用,请告诉我,我可以发布一个测试版。

Charles