在C ++中为基于分布式群体的优化应用程序序列化std :: function

时间:2014-03-21 13:51:54

标签: algorithm c++11 distributed-computing mathematical-optimization hpc

希望这个问题的标题传达了我在设计/实施方面寻求帮助的一般概念。

澄清:

我正在尝试编写分布式应用程序来执行优化。一般方法将遵循遗传算法的方法:我试图找到一个参数向量,它最小化某些成本函数的值。

我目前的困难涉及成本函数本身。我试图使设计尽可能通用;因此,我的意图是使用std :: function作为优化器类的参数。

具体来说,我的问题在于:如何将有关此成本函数的信息共享给分布式节点?

更多细节:

  • 计算节点旨在完全解耦。这种类型的算法令人尴尬地并行,并且每个节点之间不需要通信。
  • 因此,我的意图是不使用MPI(或相关的消息传递方法),而是使用Condor或SGE(很可能是前者)之类的调度程序在可用节点上生成应用程序的实例。将为节点提供查找键,以便从数据库中检索其候选向量。
  • 我可以使用 Factory Pattern 来实例化给定成本函数类型的对象;但是,我正在寻找另一种方法。 (我不确定使用我觉得不愉快的Factory类是什么意思)
  • 我显然不是在寻找在远程计算机上执行任意代码的方法。每个节点都运行可执行文件的完整实例。

顺便说一句,我在整个过程中大量使用Boost,并且非常适合使用Boost功能的替代解决方案。

如果有人能就如何将成本函数分配给其他节点提供一些建议,我将不胜感激。同样,如果有人能指出我的总体设计理念是否存在缺陷,我也非常感激。

更新

是否有效,我对成本函数的工厂模式犹豫不决,涉及成本函数的配置/参数/细节。我可以为这个类系列分配一些假设和/或规范:它期望操作的对象,等等。我已经将各种选项传递给设计中的其他工厂类,我发现它增加了复杂性。

或许有必要对上下文进行一些额外的澄清:

我正在将此优化器用作应用程序中的模块,以便对数据进行建模。实际上,模型的细节被解析为AST并传递给Factory类,该类将参数传递给适用的模型类。

因此,优化器具有对模型本身的引用,可以在模型上调用Calculate(Iterator&)方法并期望Matrix作为返回值(fyi,Iterator是对参数Vector的引用)。 / p>

这部分很简单。然后我发现不那么简单的是确定如何处理返回的矩阵。当然,简单的成本函数可能只是最小二乘法。但我可以设想相对复杂的功能,它们本身可以参数化。我也可以处理这个问题,但我希望可能会有一种完全不同的方法 - 我无法想到的方法,这可能有助于简化我正在做的事情。

谢谢和亲切的问候,

什穆埃尔

0 个答案:

没有答案