使用Sum时SymPy Lambda的性能优化问题
多变量代价函数的高效最小化求解需求
我目前面临这样一个优化问题:需要针对变量atilde、d和c,求解某个代价函数的最小值。其中y和vtilde都是经过变换处理后的观测值数组。
这里有个关键前提:这只是一个更大问题的简化解——原问题里还包含另外两个通过变换观测值引入的变量,所以我需要反复执行这个最小化操作,性能表现对我来说特别重要。
我已经用符号计算工具定义了相关变量,代码如下:
atilde, d, c, i, n, lamda = symbols('atilde d c i n lamda') y = IndexedBase('y') vtilde = IndexedBase('vtilde') # 原代码中后续的代价函数定义("te..."部分)未完整提供
从性能优化的角度,我也梳理了几个可行的方向供参考:
- 尽量用向量化运算替代循环逻辑,借助NumPy这类库的底层优化来提速
- 如果是用SymPy这类符号库定义的代价函数,建议先将其转换为数值表达式,再用SciPy的优化器(比如
scipy.optimize.minimize)来执行迭代,比纯符号计算效率高很多 - 提前预计算好
y和vtilde的变换结果,避免每次最小化迭代时重复做相同的变换操作 - 如果能确认代价函数是凸函数,优先选择专门的凸优化求解器,这类求解器通常收敛更快,迭代次数更少
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

