NewQuant的设计思路——整体的领域分析

  “领域驱动设计(DDD)”是著名软件工程建模专家Eric Evans提出的一个重要概念,是“面向对象分析设计(OOAD)”的深化。当业务逻辑变得复杂,系统变得庞大时,OOAD会使人陷入“只见树木不见树林”的处境,而DDD可以指导设计人员暂时忽略掉琐碎细节,高屋建瓴的观察问题。如果要全面了解DDD,请阅读Eric Evans的著作《领域驱动设计》和《实现领域驱动设计》。

  在NewQuant的设计中,DDD的思想给了我很大启发。简单直观地讲,DDD就是仔细的分析业务知识,并把知识对应到相应的软件模块上,把业务中的关键概念对应到软件系统中某些关键的类上。

  NewQuant应用DDD的第一步是“确定领域语言”,就是描述NewQuant系统所使用的专业术语。NewQuant的目标是为数据分析和金融工程计算提供高效优雅的解决方案,NewQuant的大部分内容是特定的数值计算方法和数学模型。这样一来,确定领域语言变得简单,可以直接把这些数值计算方法和数学模型作为NewQuant的领域语言。

  NewQuant应用DDD的第二步是“领域分析”,具体的领域分析的过程其实是一个“苏格拉底式的追问”,在不断细化不断接近问题实质的追问中明确业务的内容。

  先来看“金融工程”模块的分析。金融工程模块是为衍生品等金融产品的定价提供计算服务,金融工程定价的计算存在两大范式,一是模型对应PDE的数值解;二是模型本身的随机模拟(主要是SDE和time series)。PDE的数值解要求对PDE进行离散化得到差分方程,解差分方程的实质是解线性方程组,解线性方程组属于“矩阵计算”范畴,矩阵计算需要设计相应的模块和类来实现。再看随机模拟,无论是SDE和是time series的模拟都是根据模型的结构在递推计算中反复使用特定的随机数,SDE模拟最常用的是正态随机数,time series模拟常用正态和t随机数。由此可以得到两条领域分析的链条:

金融工程——PDE数值解——解方程——矩阵计算

金融工程——随机模拟——SDE&time series——随机数

  再来看“数据分析”模块分析。NewQuant中的数据分析方法有两大来源,计量经济和多元统计分析(其实这两个领域的方法有许多相通之处)。计量经济的计算是一个“三部曲”——估计、检验和预测,而计量经济的两大主题是“回归分析”和“时间序列分析”。从计算的角度讲几种常见的回归方法可以认为是“最小二乘(LS)问题”的变种,最小二乘问题则是属于矩阵计算范畴。时间序列模型的估计常用到MLE,MLE属于数值最优化范畴。模型参数的检验实质上是一个特定的“假设检验”问题,需要比较统计量和特定分布分位数的大小。常见的几种统计分布的相关计算实质上是“特殊函数”(Gamma和Beta)计算的变形。模型的预测,尤其是“区间预测”也需要特定分布分位数的计算。和计量经济中的回归模型类似,一些多元统计模型也是玩弄矩阵的把戏,例如主成分分析和因子分析,要对矩阵做分解。另外一些方法则单纯一些,比如K均值聚类和判别分析,只用到距离的计算,不过某些距离计算的方法也要用到矩阵分解计算。由此可以得到若干条领域分析的链条:

数据分析——计量经济——回归——估计——LS问题——矩阵计算

数据分析——计量经济——回归——检验——假设检验——分位数计算——特殊函数

数据分析——计量经济——回归——预测——假设检验——分位数计算——特殊函数

数据分析——计量经济——时间序列——估计——MLE——数值最优化

数据分析——计量经济——时间序列——检验——假设检验——分位数计算——特殊函数

数据分析——计量经济——时间序列——预测——假设检验——分位数计算——特殊函数

数据分析——多元统计——矩阵分解——矩阵计算

  通过上述领域分析,可以看出来矩阵计算、统计计算、特殊函数、随机数和数值最优化是NewQuant中最为基础的模块,属于“基础设施层”。其他部分是使用基础模块功能的高级模块,属于“应用层”。这几个基础模块中随机数部分可以直接使用C++标准库中的<random>,只要自己编写一些特殊随机数即可,二其他模块需要自己编写。下面的任务是对每一个具体的模块做分析和设计。

NewQuant的设计(一)——整体的领域设计的更多相关文章

  1. .net ef core 领域设计代码转换(上篇)

    一.前言 .net core 2.0正式版已经发布几个月了,经过研究,决定把项目转移过来,新手的话可以先看一些官方介绍 传送门:https://docs.microsoft.com/zh-cn/dot ...

  2. julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域

    编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ...

  3. 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑

    目录 系列文章 领域逻辑和应用逻辑 多应用层 示例:正确区分应用逻辑和领域逻辑 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落 ...

  4. .net架构设计读书笔记--第二章 设计体系结构

    第五节 探索领域架构 一.领域驱动设计的价值与意义 最初在java中使用,.net要晚些才引入.领域驱动设计出现之初的争议.一个向导,少走弯路   1. 我们真的需要DDD吗? DDD并不适用于每个软 ...

  5. SLAM+语音机器人DIY系列:(四)差分底盘设计——1.stm32主控硬件设计

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  6. SLAM+语音机器人DIY系列:(四)差分底盘设计——2.stm32主控软件设计

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  7. 进阶篇:4.1)DFA设计指南:简化产品设计(kiss原则)

    本章目的:理解kiss原则,明确如何简化产品的设计. 1.前言:kiss原则,优化产品的第一原则 如果要作者选出一个优化产品的最好方法,那一定是kiss原则莫属.从产品的整体设计到公差的分析,kiss ...

  8. 进阶篇:4.3)DFA设计指南:防错设计( 防呆设计)

    本章目的:每一个装配步骤都有设计防错. 1.前言 关于防错设计,作者有想说的话: 1)防错设计是DFA重要的一条.因为太过重要,作者单独开一分章写! 2)只有理解了设计防错的重要,才会去设计防错特征. ...

  9. 【转】App架构设计经验谈:接口的设计

    App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 安全机制的设计 现在,大部分App的接口都采用REST ...

随机推荐

  1. matlab初学之句柄

    文章出处:http://www.cnblogs.com/CBDoctor/archive/2012/04/06/2434072.html 在matlab中,每一个对象都有一个数字来标识,叫做句柄.当每 ...

  2. [SHELL] 修改xml的内容

    解析和修改xml用python比较方便,但如果不方便使用python,可以用sed命令简单替换 例如,欲替换下面一行中的端口号的值: <param name="ftpPort" ...

  3. 题目1203:IP地址

    题目: http://ac.jobdu.com/problem.php?pid=1203 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3052 解决:1504 题目描述: 输入一个ip地 ...

  4. java语法基础

    Java的基本符号(token) Java的单词符号有五种:关键字.标识符.常量.分隔符和操作符. Java的字符集 Java 采用一种称为unicode的字符集,该字符集合是一种新的编码标准,与常见 ...

  5. 长时间停留在calculating requirements and dependencies 的解决方案

    如果Eclipse花费了很长的时间calculating requirements and dependencies(计算需求和依赖性 ) 这个问题通常就是在点击安装之后显示“Calculating ...

  6. mysql数据库引擎 MyISAM和 InnoDB区别

    1. 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩展名为.MYD (MYData).索引文件 ...

  7. @SuppressWarnings("finally")

    @SuppressWarnings.该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默.   批注允许您选择性地取消特定代码段(即,类或方法)中的警告.其中的想法是当您看到 ...

  8. PHP乱码完美解决

    文章来源  http://www.lupaworld.com/forum.php?mod=viewthread&tid=148807 A.首先说下HTML中文乱码问题的解决方法. 比如有个in ...

  9. XML代码生成器——XMLFACTORY 简介(一)

    XML代码生成器——XMLFACTORY 简介(一) 软件开发中经常要和第三方应用交互数据,特别是在银行.电信行业,这种需求更是必不可少,往往一个系统要和三五个其它系统交互数据,而数据交换的报文经常采 ...

  10. IOS-当遇到tableView整体上移时的解决方案

    方案一在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView或collectionView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关 ...