【simulation笔记】建模、模拟和实验

0-0 刚开始的这几个讲稿应该都是宏观讲一下要学的东西,所以这篇主要是理论科学哲学的实践方法,扫了一眼,大概是如何做一个实验! 有趣!

上篇讲了如何建模还记得吗!!来复习一下:
Idealization: 首先建一个数学模型
Discretization: 将它转化为离散/数值问题
Simulation: 计算模拟的结果
Verification:验证是否于数学模型一致
Validation: 看看能不能用在现实世界

两种方法用来建模:

  • 数据驱动模型:一开始看数据来建模的,比如现实世界的图像目标并且对这个模型建模。
  • 方案驱动模型: 用物理定律(数学公式)或者和数据相似的数学模型来建模的。
    会有些争议是数学先还是数据先(先有鸡先有蛋?)。

在建模的时候是需要实验的!也就是

  • verification
  • validation
    这两个!

所以!啥是实验!!!(我们老师真)
字典说:
实验是基于一些可控条件下的一个测试,这个测试是用于展示一个已知的事实,或者是测试一个假设的有效性(真实性),或者是证明之前没有尝试过的东西的效用。

所以我们怎么设计一个好的实验呢?
Hornbæk的建议:

在我们做一个实验之前:

  • 考虑好实验的validity(正确性)和reliability(可靠性)。
  • Design so as to rule out alternative hypotheses (设计这个来排除其他的假设)
  • 考虑好实验方案和措施

在做实验的时候:

  • 最小化实验参数
  • 最小化实验者的影响

在做完实验之后:

  • 做好数理统计分析
  • 讨论正确性和错误的原因

Ingvor的建议是搞清楚以下几个问题:

  • 这个实验的目的是啥?
  • 有多少个参数会影响这个实验?
  • 是否有足够的数据来评价这个实验?
  • 需要多少时间来执行这个实验?
  • 是否将实验的理论期望值也列出?

Erleben(Kenny大神)的建议是:
Start Backwards

  • 在做实验之前要先计划好!
  • 要做一个和你之前的方案不同的解决方法!(原话是Create “competing” solution before your own)
  • 实用性放在首位!

实验的语义(Semantics)

  • Hypotheses (假设)
  • Validity (有效性/真实性)
  • Reliability (可靠性)
  • Variables (变量/参数)

【simulation笔记】建模、模拟和实验_第1张图片
(思考)啥是假设(hypothesis)?
字典解释 :
A tentative explanation for an observation, phenomenon, or scientific problem that can be tested by further investigation. (一个观察,现象或者一个科学性问题的暂时性的解释,这个解释会被测试于将来的研究测试中。)

所以一个好的假设要包括:

  • 有没有提早设计好?
  • 要定义自变量和因变量
  • 有可能是根据理论或经验文法设计的
  • 假设是否具体,明确并且清晰
  • 能不能被证否(Can be shown wrong)

Validity(有效性\正确性)
内有效性:

  • 表明自变量的变化会导致因变量的值变化
  • 排除竞争对手的假设
    外有效性:
  • 这些发现都是可复现的吗?
  • 这些发现都能概括配置和数量吗?(Do findings generalize across settings and populations)

Reliability(可靠性)

  • 可靠性是测量或者测量方案的一致性(大概意思是,重复做这个实验得到的结果不会变化太大变来变去)
  • 可靠性在意的是观察结果相似方案在不同时间的一致性

Variables(变量)

  • 自变量(Independent Variables/Parameters)
  • 因变量 (Dependent Variables/Parameters)
    简单的例子:y=f(x)

数学模型的性质:
主要是两个问题:

  • 存在解决方案吗?
  • 解决方案唯一吗?

离散模型的性质:

  • Robustness 鲁棒性: 对于所有有效选择的初始变量,这一类问题都能解决得很不错。
  • Efficiency 效率: 不用占用太多的计算资源(内存)和时间。
  • Accuracy 准确率: 需要定义一个方法来确定方案的精确程度,而不会对错误数据和浮点计算造成的错误太敏感。(有点模糊)
  • Scaleability 可扩展性:在无约束优化中,如果在某个方向上x的变化引起f值的变化比在另一个方向上x的变化引起f值变化大很多,那么就会说一个问题难以扩展。
  • Stability 稳定性:稳定性是指算法的性质,如果一个算法很稳定那就表明算法能够在这整个类型中well-conditioned的问题表现的很好,给出很好的很精确的结果即使用的是浮点计算。什么叫well-conditioned的问题?是指解决方案不会受到定义问题的数据的小扰动的影响。
  • Sensitivity 敏感度:给定一个测量方案E(期望)是最小化的,也就是给定参数a,b,c…假设一个minimizer dE= 0,然后再验证参数a,b,c…并且计算二阶矩,如果他们都很大,那就很敏感。或者加点可控噪音,看看整个方案会不会烂掉!
  • Convergence 收敛性: 本地收敛性是指如果我们要解决和现在问题临近的问题的话会发生什么?全局收敛是指我们能不能找到一个解决方法?
    对于一个算法,全局收敛是指要有这个特性
    lim ⁡ k → ∞ ∣ ∣ ▽ f ( x k ) ∣ ∣ = 0 \lim_{k\rightarrow \infty } ||\bigtriangledown f(x^k)|| = 0 klimf(xk)=0

(思考)我们如何证明一个方法的正确性?
守恒定律:
物理上:

  • 质量守恒
  • 动量守恒
  • 能量守恒

方法的合理性:

  • 人的观察
  • 用户测试

比较结果:

  • 实测
  • 他人的结果和你的结果对比
  • 其他软件的结果和你的对比
    (看看这方法有没有什么问题)

(思考)啥是错误(error)?
局部错误:

  • 建模错误
  • 离散错误
  • 实现错误
  • 外部资源错误(像电脑有毛病)
  • 你错了!!!(一开始预期的就错了)

最后一个问题!!
你觉得编程测试是实验吗???
我觉得是,上面说到的都可以有。

你可能感兴趣的:(simulation笔记)