@RISK · 2022年2月14日

加快@RISK的模拟速度

适用于: @RISK 5.x–8.x

内容: 

  • Excel 设置
  • 硬件建议
  • Windows 设置
  • 您的@RISK 模型
  • 模拟设置
  • 进度窗口
  • @RISK 与Project
  • Project设置

我可以做些什么来加快@RISK 的性能?

以下是您在@RISK 内可以做的事情以及在@RISK 之外可以做的事情的列表。影响最大的部分用粗体标出。

我应该如何设置 Excel?

对于非常大的模拟,切换到 64 位 Excel。所有 32 位 Excel 都限制为 2 GB 的 RAM 和虚拟内存。64 位 Excel 没有该内存限制。(如果您有 64 位 Excel,您至少需要 @RISK 5.7。如果您需要升级,请联系您的 Palisade 销售经理。) 注意:64 位 Excel 允许您运行更大的模拟,但它本质上并不比 32-位Excel快;请参阅我应该安装 64 位 Excel 吗?有关权衡的更多信息。

启用多线程计算(Excel 2007 和更高版本)。在 Excel 2010 中,文件 » 选项 » 高级 » 公式 » 启用多线程计算。在 Excel 2007 中,单击圆形 Office 按钮,然后单击 Excel 选项 » 高级 » 公式 » 启用多线程计算。
注意:虽然这是一个全局 Excel 选项,但也可以通过打开选项设置不同的工作簿来更改它。在您的特定工作簿打开时检查选项的状态。

如果您的计算机从网络运行 Excel,请改为在本地安装 Excel。这消除了由于网络流量导致的减速。(如果您在终端服务器上运行 @RISK,这不是问题,因为一切都发生在远程计算机上。)

要使 Excel 启动更快,请删除所有不必要的加载项。

在 Excel 2010 及更高版本中,单击文件 » 选项 » 加载项。在右侧面板的顶部,注意不需要的加载项是 Excel 加载项还是 COM 加载项。然后在右侧面板的底部,在管理后选择 Excel 或 COM,然后单击执行。

在 Excel 2007 中,单击 Office 按钮,然后单击 Excel 选项 » 加载项。在右侧面板的顶部,注意不需要的加载项是 Excel 加载项还是 COM 加载项。然后在右侧面板的底部,在管理后选择 Excel 或 COM,然后单击执行。

在 Excel 2003 或更早版本中,单击工具 » 加载项。(只会显示 Excel 加载项;COM 加载项将不可见。)

从@RISK 会话期间不需要的任何加载项中删除复选标记。执行此操作后下次加载 Excel 和@RISK 时,应消除因加载额外加载项而导致的任何减速。

如果您使用的是 Excel 2007,请安装最新的服务包,或升级到 Office 2010 或更高版本。Office 2007 Service Pack 1 提高了 Excel 的速度并修复了一些错误;Service Pack 2 修复了更多错误并提高了 Excel 的稳定性。安装 Office 2007 Service Pack 后,按照以下说明运行修复:修复 Excel 或项目

遵循 Palisade 和 Microsoft 在从 Excel 获得更好的性能和 Excel的推荐选项设置中的建议

有什么硬件建议吗?

添加 RAM,除非您的计算机已经有足够的内存。RAM 不足可能是模拟中最大的单一瓶颈。在模拟运行时观察您的硬盘使用情况。如果它在模拟过程中不断地从磁盘写入或读取信息,您应该考虑增加系统的内存。要估计内存需求,请参阅@RISK 模拟使用的内存和硬件要求或建议

如果计算机上可用,请启用 Turbo Boost、Turbo Core、Power Tune 或类似功能。这不是超频(我们不推荐)。Turbo Boost 和其他技术是 Intel、AMD 和其他公司在某些 CPU 中内置的技术,可根据您的计算需求随时调整处理器速度。请查阅您的计算机文档以了解您是否拥有此技术、如何查找当前状态以及如果当前未启用如何启用它。

我可以在 Windows 中做什么?

对于较大的模拟,您可能希望覆盖默认的页面文件大小。请参阅虚拟内存设置

临时文件夹(%TEMP% 环境变量)应该在本地计算机上,而不是在网络位置。如果您不确定它在哪里,请参阅打开您的临时文件夹。

清理您的临时文件夹。请参阅清理临时文件夹。(这也可能解决 Excel 崩溃的一些问题。)

确保磁盘上有足够的可用空间。如果没有足够的磁盘空间,应用程序和 Windows 本身就会变得非常缓慢。(对磁盘进行碎片整理不会有什么坏处,但在最新版本的 Windows 中,它不太可能产生足够的效果,您会注意到。)

关闭其他应用程序和后台服务,例如 Windows 索引服务。其他程序从@RISK 获取CPU 周期。此外,通过占用物理内存,它们可能会迫使 Excel 和 @RISK 将更多信息交换到磁盘,这会真正减慢模拟速度。

告诉您的防病毒程序不要扫描 .XLS 或 .XLSX 文件。(如果您运行来自其他人的 .XLS 文件,请谨慎使用此设置。)

我应该如何构建我的@RISK 模型?

根据我们的经验,结构不良的模型是导致性能不佳的最常见原因。因此,值得花时间有效地构建模型。

如果您的 RiskCompound( ) 分布仅包含单元格引用,而实际分布在其他单元格中,那么如果您将实际严重性分布嵌入到 RiskCompound( )中,则模拟可以明显更快地运行。(这对频率分布并不重要,只对严重性分布很重要。)模型中的 RiskCompound( ) 函数越多,这将产生的差异越大;如果即使在少量的 RiskCompound( ) 函数中也有很大的频率,情况也是如此。有关 RiskCompound( ) 的更多信息,请参阅结合概率和影响(频率和严重性)。

修复所有无效的相关矩阵(非自洽矩阵)。如果您的@RISK 分布引用了任何无效矩阵,那么您每次模拟时都必须回答一个弹出窗口,并且@RISK 每次都必须花时间查找有效矩阵。执行此操作的时间会增加矩阵中行数的幂,因此如果您有任何无效的中型到大型相关矩阵,您的模拟将花费大量额外时间。有关如何检查矩阵一致性的信息,请参阅@RISK 如何测试相关矩阵的有效性,以及如何一劳永逸地调整无效矩阵, 请参阅@RISK如何调整无效的相关矩阵。

从模型中删除无关元素:

考虑从模型中删除不必要的图形和表格。这些可能需要大量时间来计算和更新。

如果可能,消除外部链接,特别是网络资源的链接。

消除链接图片。如果工作簿包含链接的图片,则 Excel 在更新单元格方面的性能可能会显著减慢速度。@RISK 可能看起来崩溃或挂起,但实际上它只是在等待 Excel 完成单元格更新。

如果 Excel 表中有 @RISK 函数,请将它们移出。有关详细信息,请参阅Excel 表格和@RISK。

避免不需要的 INDIRECT、VLOOKUP、HLOOKUP 和类似功能。根据我们的经验,这些都是相当慢的,如果您的模型包含很多它们,它肯定会运行得很慢。VLOOKUP 和 HLOOKUP 可以用 INDEX+MATCH 函数代替。网络上有大量资源,您可以通过以下网络搜索找到它们:

excel“索引函数”“匹配函数”

不要将模拟结果保存在您的工作簿中,或者如果您这样做了,则在开始模拟之前将其清除。保存的结果将导致 Excel 需要更长的时间来重新计算每次迭代;这有多少差异取决于结果的大小。请参阅带有@RISK的 Excel 文件变得太大。

仅打开属于模拟一部分的工作簿。在模拟期间,在每次迭代中,Excel 都会重新计算所有打开的工作簿。如果您打开了无关的工作簿,它可能会不必要地减慢您的模拟速度。

另请参阅: Microsoft 的文章如何清理 Excel 工作簿以减少内存占用(适用于 Excel 2013 和 2016)。

对@RISK 模拟设置有什么建议?

常规选项卡:如果您有双核、四核等,请将多 CPU 支持设置为“自动”或“启用”。从@RISK 5.5 开始,@RISK 的所有版本都提供此功能,而不仅仅是工业版本。如果您拥有@RISK Professional 或Standard,并且您拥有四核或更高版本,那么升级到 Industrial后,您可能会看到显著的速度提升。

在极少数情况下,如果您有大量 CPU,则并行处理的开销可能会超过共享的 CPU 周期。或者,由于所有这些 CPU 共享固定数量的 RAM,您可能会发现虚拟内存使用得更多,并且磁盘交换会减慢模拟速度。在这种情况下,减少@RISK 可用的CPU 数量可能会有所帮助。不幸的是,没有办法预测这一点,您只需要在尝试其他技巧后进行试验。有关说明,请参阅@RISK 7.x 使用的CPU或@RISK 4.x–6.x 使用的 CPU。

使用 Microsoft Project 进行的模拟不能使用多个 CPU。如果您的模拟设置有 多CPU支持:启用,当您在项目模拟上单击 开始模拟 时,它会自动更改为 禁用

查看选项卡:取消选择演示模式。取消选中在模拟期间更新 Windows。取消选中显示 Excel 重新计算。

采样选项卡:

将采样类型设置为“拉丁超立方体”(默认)。特别是如果您正在测试收敛性,这将使模拟更快。例外:如果您选择数百万次的迭代,拉丁超立方会显著减慢,而蒙特卡洛会更快。然而,这将是一个极其罕见的模型,需要在拉丁超立方体中进行数百万次迭代。

将收集分布样本设置为“无”或“用收集标记的输入”。有关含义,请参阅内存不足文章中的收集输入分布。

禁用智能灵敏度分析。这不会使迭代更快,但可以显著加快模拟的开始。关于 智能敏感性分析 的含义以及禁用它的含义,请参见先例检查(智能敏感性分析)。

将 更新统计函数 设置为 “在每次模拟结束时”。(这是@RISK 5.5 及更高版本中的默认设置,但在@RISK 5.0 中不可用。)如果您有很多统计函数,例如RiskMean 和RiskPercentile,这将大大提高您的模拟速度。除了速度提高之外,选择此设置可能还有很好的合乎逻辑的理由;但是,您的模拟结果可能与早期版本的@RISK 不同。请参阅“No values to graph”消息/模拟数据中的所有错误。

收敛选项卡:考虑启用收敛测试。如果您运行的迭代次数超过了必要的次数,那么您只是在浪费仿真时间。另一方面,测试收敛本身涉及一些小开销。尝试收敛测试,看看模拟收敛的时间是否比以前少得多。如果是这样,您将打开收敛测试;否则,回到您的固定迭代次数。(启用收敛测试时,还要在 通用 选项卡上将迭代次数设置为“自动”,并在 抽样 选项卡上选择“拉丁超立方”。)


使用收敛监控,默认情况下,模拟将在 50,000 次迭代后停止,即使没有所有输出均已收敛。

在模拟过程中,进度窗口可以告诉我什么?

看看每秒的迭代次数。它应该在模拟的第一部分增加,然后保持稳定,假设没有其他重量级 Windows 程序启动。

但有时,如果 Excel 没有焦点,每秒的迭代次数会逐渐下降,因为模拟运行的速度越来越慢。在这种情况下,在 Excel 窗口的标题栏中单击一次,将焦点放在 Excel上。您应该会看到迭代次数逐渐上升到之前的水平。

这并不总是会发生,而且当它发生时,还不清楚 Excel 和 Windows 之间的交互到底是什么导致了它,但是将焦点放在 Excel 上通常会扭转下降的迭代率。(如果这不起作用,请尝试通过单击标题栏将焦点集中到模拟进度窗口。)

Project中使用@RISK 怎么样?

这仅适用于@RISK 6.x/7.x、专业版和工业版。

如果您拥有@RISK 6.0,请升级到最新的@RISK 。@RISK 6.1 中引入的加速引擎使许多项目的模拟运行速度显著加快,并且在以后的版本中有进一步的改进。

使用加速引擎。在项目 » 项目设置 » 模拟中,确保模拟引擎设置为自动,如果您的模型与之兼容,@RISK 将使用加速引擎。有关与加速引擎兼容的字段列表,请参阅@RISK 帮助文件中的主题“模拟引擎”。

  • 如果您发现@RISK 仍使用标准引擎,则您的模型包含与加速引擎不兼容的功能。单击同一对话框上的检查引擎按钮,@RISK 将列出模型中的问题特征。(另请参见@RISK 帮助文件中的“检查引擎命令”主题。)如果您可以在不丢失基本功能的情况下更改它们,您的模拟应该运行得更快。
    • 如果@RISK仍使用标准引擎,请单击查看» 模拟设置并关闭“演示模式”和“显示 Excel 重新计算”。

如果您有使用@RISK 4 的经验,您可能使用过概率分支。这本质上是耗时的,因为每次迭代都必须对前驱/后继关系进行更改,并在下一次迭代之前重置。在@RISK 6.x/7.x 中,这些问题被Microsoft Excel 和Microsoft Project 之间的通信放大了。要合并风险事件,请考虑风险登记表而不是概率分支。例如,单击帮助 » 示例电子表格 » 项目管理。

  • 如果您有 Project 2007,请切换到 Project 2010 或更新版本。Project 2007 中的项目重新计算速度最慢;请参阅@RISK 与 Microsoft Project 的模拟速度。如果您有@RISK 6.x,Project 2003 最快,但@RISK 7.x 需要Office 2007 或更高版本。

在项目设置 » 模拟选项卡上,如果您不需要计算关键指数、计算概率甘特图统计数据和收集时间刻度数据的信息,请取消选中这些框。

在项目设置»模拟选项卡上,将模拟的日期范围设置为“当前项目日期之后的活动”或“项目状态日期之后的活动”。这将使您的模拟运行得更快,因为@RISK 不会模拟已经完成的任务。

不要重新导入 .MPP 文件。您只需导入 .MPP 文件一次,并在@RISK 提示您时存储 Excel 工作簿。之后,在@RISK 中不要直接打开.MPP 文件。当您打开与您的项目关联的 Excel 工作簿时,@RISK 将自动连接到链接的 .MPP 文件并使用任何更改来更新工作簿。这比从头开始重新导入花费的时间要少得多。

推荐 Microsoft Project 中的哪些设置?

  • 如果项目位于网络驱动器上,请将其复制到 C: 驱动器或另一个本地驱动器(最好是本地 SSD 驱动器),然后再打开它。
  • 零超出边际跨度。
  • 尽快设置将来的约束。
  • 删除所有截止日期。
  • 检查消极的和未满足的任务,并纠正任何问题。
  • 创建一个仅包含您希望在@RISK 中看到的字段的表,并在导入Project之前应用它。