Model.execute_actions#
- Model.execute_actions(actions)[源代码]#
执行内存优化运行
执行内存优化运行。 内存优化运行旨在通过减少内存消耗来计算指定的节点(目标)。 当中间结果包含大量数据时,内存优化运行非常有用。
内存优化运行实际上包含两次运行。 第一次运行通过调用
generate_actions()
触发, 第二次运行通过调用execute_actions()
执行。generate_actions()
方法运行模型, 根据传入targets
参数的目标列表生成并返回一个动作列表。 用户在调用generate_actions()
前, 应在模型中设置一个小型数据集。targets
的元素应为ItemNode
对象, 表示Cells
对象及其参数的组合。 可以通过向node()
方法传递参数来创建节点对象。 例如,以下表达式创建了表示Model1.Space1.Cells3(x=2)
的节点对象:Model1.Space1.Cells3.node(x=2)
generate_actions()
运行模型来分析目标节点的依赖关系。generate_actions()
会识别目标节点依赖的所有计算节点, 并按拓扑顺序对这些节点进行排序。 然后将排序后的节点分组,确保每组最多包含step_size
(默认值为1000)指定的节点数量。 接着generate_actions()
会生成操作 来处理每个分组。 对于每个分组,会按顺序生成calc(计算)、paste(粘贴)和clear(清除)操作。 每个操作都与它适用的节点相关联。 calc操作表示其关联的节点 应该被计算。 paste操作表示其关联的节点应该进行值粘贴, 以便在这些节点的前驱节点被清除后,它们的值仍然保留。 clear操作表示其关联的节点应该被清除 以节省内存。generate_actions()
返回一个动作列表。每个动作也由一个列表表示,其第一个元素是一个字符串,可以是'calc'
、'paste'
或'clear'
。该字符串表示要执行的动作类型。第二个元素是ItemNode
的列表,第一个元素指示的动作将应用于这些节点。下面是一个动作列表的示例。[ ['calc', [Model1.Space1.Cells1(), Model1.Space1.Cells2(x=0)]], ['paste', [Model1.Space1.Cells2(x=0), Model1.Space1.Cells1()]], ['clear', []], ['calc', [Model1.Space1.Cells2(x=1), Model1.Space1.Cells2(x=2)]], ['paste', [Model1.Space1.Cells2(x=2)]], ['clear', [Model1.Space1.Cells2(x=1), Model1.Space1.Cells2(x=0)]], ['calc', [Model1.Space1.Cells3(x=2)]], ['paste', [Model1.Space1.Cells3(x=2)]], ['clear', [Model1.Space1.Cells1(), Model1.Space1.Cells2(x=2)]] ]
execute_actions()
执行传入的actions
动作。 在调用execute_actions()
之前,用户应当 设置完整的数据集而非用于生成动作的小数据集。 执行完成后,目标节点会被值粘贴, 且目标节点所有前置节点的值都会被清除。 如需清除值,可对目标调用clear_at()
或调用Cells.clear_all
或Space.clear_all
或Model.clear_all
。- Parameters:
actions (
list
) – actions 列表
另请参阅
在节省内存的同时运行大型模型, 一篇发布在 https://modelx.io 上的博客文章