【问题标题】:Netlogo Local OptimizationNetlogo 本地优化
【发布时间】:2026-02-17 07:40:01
【问题描述】:

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

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)

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

这个过程有意义吗?

谢谢

【问题讨论】:

  • 梯度是如何计算的?为什么不直接使用爬山算法或类似的搜索算法呢?见ccl.northwestern.edu/netlogo/models/community/gradient
  • 另外,您遇到的问题是什么?期望值偏离了吗?我认为您可能会找到局部最小值/最大值而不是全局值,但这实际上取决于未显示的其余代码。

标签: optimization local netlogo logical-operators


【解决方案1】:

numanal 扩展包括多种优化多变量问题的方法,包括单纯形法和更深奥的方法,例如 CMAES 和 BOBYQA。它们确实允许设置界限。它还没有为 NetLogo 6.0 做好准备(有一个适用于 5.3 的工作版本),但如果您认为它可能有用,请告诉我,我可以为您提供测试版。

查尔斯

【讨论】:

  • 你能把最新版本的numanal发给我吗?我计划结束一些关于优化的讲座并计划使用NetLogo kalin.stoyanov@uctm.edu
  • 抱歉拖了这么久。 NetLogo 6.1 的扩展可在此处获得:github.com/cstaelin/NumAnal-Extension,我已将其发送到您的电子邮件。它似乎与 NetLogo 6.2 配合得很好。