我有一个蒙特卡罗模拟模型,我需要将我的一个参数(服务水平)设置为至少95%。问题是,据我所知,当Solver运行时,它会尝试不同的解决方案,但由于RAND()函数,目标单元格一直在不断变化。有什么方法可以解决这个问题吗?禁用RAND()暂时改变?我试图将计算切换到手动,但这不起作用,因为目标单元格根本不更新。感谢任何帮助,谢谢!
答案 0 :(得分:2)
您可能要做的是创建自己的=RAND()
函数(让我们称之为MYRAND()
函数),其中ON/OFF
输入。这个想法是:
您插入"随机开/关功能",如下所示:
Public Function MYRAND(ByVal activation As String) As Double
Application.Volatile
If activation = "ON" Then
MYRAND = Rnd()
Else
MYRAND = Application.Caller.Value
End If
End Function
现在,你可以把一个包含" ON / OFF"的列表框进入一个单元格(让我们说A1)并像=MYRAND(A1)
一样将它引入单元格。从现在开始,如果A1的值为ON
,则该函数将返回您期望从=RAND()
函数获得的经典结果。但是,如果它位于OFF
,那么它将跳过计算并将之前的值放在其中。
像这样你可以模拟Calculation Manual/Automatic
的效果,但只将它应用于RAND()
函数,让所有其他函数独立。
答案 1 :(得分:1)
根据解算器的original authors,它旨在使用Excel的内置逻辑来确定需要重新计算的内容。这意味着在每一步,求解器都会调整一个值,然后让Excel重新计算。在那个时间点,Rand
函数将运行,因为它们是不稳定的。
我建议您将随机生成的数字和硬编码放入工作表(粘贴特殊 - >值),然后运行解算器,然后将调用重新放入Rand
你的模型已经过校准。