用C ++

时间:2016-05-10 08:35:57

标签: c++ optimization mathematical-optimization

考虑以下目标:

创建一个解决minimize f(x)的程序,用于提供任意fx作为输入。

如何设计一个可以接收fx描述并有效处理它的C ++程序?

如果程序实际上是一个C ++库,那么可以显式编写fx的代码(可能继承自f的一些基函数类和x的状态类1}})。 但是,如果该程序是例如服务,并且用户在某些高级别表示中发送fx的描述,则应该怎么做。一个JSON对象?

浮现在脑海中的想法 1-将f转换为内部函数表示(例如基本操作列表)。在评估f时应用这些。 问题:除非每个操作都是批处理操作,否则效率低下(例如,如果我们使用大型矢量/矩阵进行矢量或矩阵运算)。

2-以某种方式生成C ++代码并编译代表x和计算f的代码。有没有办法限制编译,以便只需要编译代码,但其余的代码已经“预编译”了?

1 个答案:

答案 0 :(得分:1)

mp library和其他人使用的常用方法是创建表达式树(或DAG)并使用某种nonlinear optimization方法,该方法通常依赖于可以使用自动计算的派生信息或数字差异。

可以使用generic visitor模式有效地遍历表达式树以进行评估。除非评估函数所花费的时间占用优化时间的很大一部分,否则使用JIT可能是一种过度杀伤。