我讨厌皮亚诺空间和科赫曲线

瞄了一眼《代码本色·用编程模拟自然系统》豆瓣书评区,似乎看得人并不多,部分评价低的我觉得要么是其水平太高,要么是没认真看完。写差评的好处就是让自己的水平看起来显得高。我庸俗,我肤浅,我向广大热爱编程、热爱理工科的初高中同学强烈推荐此书。作为一个不会写代码的准IT工作者,这是我看过的编程类书籍中最好的一部(掐指一算,除去学生时教科书,似乎看过的编程类书籍不会超过5本)。

边读变敲代码的阅读过程真是美妙,感觉如此亲切,这就是初恋的感觉……哦,不对,是学生时代的感觉。有趣的理论,简洁灵巧的模拟实现方式。可惜编程能力渣渣的我学生时代没看到这么好的入门书籍,真枉为数学物理小霸王:)。就像基因有内在编码和外在表现一样,好的理论也需要表现的载体,processing IDE虽然简陋了点,但简单易用,很贴心的工具。书中内容虽然不难,但行文中推荐了一些相关论文及业内研究进展链接,为有志深入学习的同学指明方向。此书结合理查德道金斯的书一起看,想来也是很好的。


列维飞行

img

蒙特卡洛算法,以一个随机概率判断目标随机数被选中的概率

perlin噪声,随时间的变化获得平滑连续的噪声,噪声的平滑度受时间增速影响。

静态函数:通过类名调用,原有变量保持不变 PVector.add(u, v),定义时加static
非静态函数:通过实力调用,原有变量变化 v.add(u)

如果调用函数时传入参数是对象的引用,函数内对该对象的操作会改变对象值。如果对一个静态全局类对象重复调用,可以使用该对象的副本。

下述功能类似setMode,使用时先调用函数声明 rectMode()
translate()
rotate()
scale()
radians()

ArrayList<> 动态列,遍历时如删除元素需采用反向遍历,防止剔除元素时后续元素位置前移而被遗漏处理。或者使用迭代器iterator()

box2d 库 $定义的路径$\libraries\box2d_processing\library 定义一个物体,box2d的世界中,如果你想要创建一个物体,先要创建一个物体的定义。物体可以被定义成3类:动态,静态和kinematic。定义主要属性包括起始位置、转向、摩擦力、阻尼系数等。

需要注意box2d世界和像素世界的坐标映射

关节: 距离关节DistanceJoint
旋转关节RevoluteJoint
鼠标关节MouseJoint 类似距离关节

用积分处理物体的运动
Verlet积分法(韦尔莱积分法),特别适用于粒子系统,尤其是弹簧连接的粒子系统

2

自治智能体

转向力=所需速度-当前速度
主要行为:寻觅、逃跑、跟随路径、群集

流场:

  • 构造一个二维向量数组
  • 通过极坐标和笛卡尔坐标的转换给二维数组赋值
  • 根据位置获取所需速度向量
  • 流程中的flower根据当前位置所需速度向量计算转向力

3

多折线路径法线焦点选取条件:1.距离近;2.焦点在路径内

4

复杂系统:

  1. 个体间存在小范围的联系
  2. 个体的动作是并行的
  3. 系统在整体上会存在一种自发现象

对应特性:1.非线性、蝴蝶效应、混沌;2.竞争与合作;3.反馈

一些优化:
群集计算O(n*n)算法优化:网格空间分割算法;
如果比较向量长度,尽量避免用开平方,可以直接比较平方后数值
v.mag() > 10 ==> v.magSq() > 100
耗时的计算有种固定的模式,平方根及三角函数运算都比较耗时。
如果涉及频繁使用三角函数,应该一次计算保存到变量,后续取变量值使用。
因尽量减少对象的创建,防止内存消耗。如可以用全局变量,只new一次,每次调用时修改变量值

细胞自动机:最有意义且篇幅最长的科学研究是Stephen Wolfram与2002年发表的A New Kind of Science

分形

病态的怪物!恐怖的数学家在嘶叫,它们每个在我眼里都是刺 我讨厌皮亚诺空间和科赫曲线 我害怕康托尔三分点集 谢尔宾斯基垫片让我想哭 一百万英里之外有一只蝴蝶在扇动翅膀 在寒冷11月的某一天,一个叫曼德博的人出生了 ——Jonathan Coulton, Mandelbrot Set

L系统=字母表+公理+规则

51

String和StringBuffer
String对象是“不可变”的,创建以后如果更改,实际是从新new了一个对象再赋值,尽管是同一个变量名。因此如果遇到字符拼接,可使用StringBuffer提高效率

int factorial(int n) {
    if (n == 1) {
        return 1;
    } else {
        return n * factorial(n-1);
    }
}

5

遗传算法:创建种群–选择–繁殖
几个影响大的要素:变量、适应度函数、基因型和表现型
蒙特卡洛算法:需要两个随机数,第二个用来做资格判断,决定第一个随机数是否被选中
Karl Sims的Evolved Virtual Creatures

神经网络–模式识别
监督式学习
非监督式学习
增强式学习

多层神经网络的权重优化方案:反向传播