如何编写实验框架

本文关键字:框架 实验 何编写 | 更新日期: 2023-09-27 18:02:13

我是一个中级c#/ASP.net编码员,在一个有趣的MVC项目上工作。我想实现一个实验框架,允许对象"抖动"功能,以便找到更好的做事方式。我在哪里可以读到更多关于这类事情的最佳实践或教程?

// A helper class that might return different flavors of "mean".
public class MeanHelper
{
  ...
  Mean(IEnumerable<double> input) { <shuffle between the 3 below.> }
  OrdinaryMean(IEnumerable<double> input) { ... }
  GeometricMean(IEnumerable<double> input) { ... }
  HarmonicMean(IEnumerable<double> input) { ... }
  ...
}

非常感谢!

如何编写实验框架

你所描述的听起来像是一种策略模式;例如,你可以有一个接口IMean,一个方法Calculate,和3个实现。

我使用我自己的实验框架,具有以下属性:

  • 实验为一级实体
  • 只要有正在进行的实验,应用程序就会运行
  • 每个实验确定何时收集到足够的数据
  • 记录存储在数据库

正在进行实验的应用程序公开了命名属性,供实验框架操作和监视。主要的应用程序方法是一个事件生成器。每个实验都列出了要操作的属性和要监控的其他属性。实验框架通过主要的应用方法进行迭代,将事件提供给正在进行的实验。每个实验过滤它接收到的事件,更新方差统计并操作其相关的应用程序属性。当实验发出信号表示它已经处理了一个事件时,该事件以及它操纵和监视的属性值将存储在实验数据库中。

通过检验或使用Sho或r对实验数据库进行分析。实验结果可用于研究单个属性值的影响,以及不同应用属性之间的相关性和独立性。

我选择使用生成器模式,而不是信号或控制反转,因为实验框架应该负责应用程序何时运行和停止。编译器根据yield命令在主应用程序方法中完成创建状态机的所有艰苦工作。

我仍在完善框架并重新思考其中的部分内容。我打算在将来的某个时候把它变成一个开源项目。

Google的"重叠实验基础设施"论文是关于这个主题的优秀读物。

我想你所说的"抖动功能"是指根据配置替换不同的功能,这样你就可以进行实验了。

如果是这种情况,那么您应该研究多态性(很可能通过接口),也许您还需要与控制反转相关的框架和设计模式。