我的眼睛看世界

2021年01月14日

这东西有什么用

Filed under: 感悟 — gcd0318 @ 16:16

人到中年不得已,保温杯里泡枸杞,所以我买了个高科技的保温杯,和普通保温杯的唯一区别在于,杯子盖可以测量杯子里的水温。产品没问题,广告上宣称的功能基本都实现了,保温效果还不错,在 28 度的室内,灌满刚开的开水,盖紧放了八九个小时,杯盖显示温度是 70 左右,基本符合预期——假设杯盖测温准确的话
但是现在,我对这个购买行为的评价只有四个字:脑子抽风。因为我突然就想不通,为什么保温杯要在杯盖上测水温
保温杯的设计目的就是要在短时间内保持杯内温度几乎不变,比如我灌进去的是 90 度的开水,盖紧杯盖,就算不测温度我也知道,起码一个小时以内,这杯里的水都是烫嘴的。如果我着急喝水,那么我会打开杯盖,甚至不用保温杯,那么杯盖上的测温功能就完全用不上了,这个温度显示岂不是毫无意义
上学时候老师说的,要发现一直被掩盖的问题,要解决真实存在的问题,温度只是个数据,本身什么都不说明,只有在扯皮的时候有用,比如室内温度不到 18 度可以不交暖气费,官方天气预报超过 40 度可以有高温福利,超过 80 度的水被 WHO 登记在册为一级致癌物之类,但是真正对我们有意义的其实还是冷或者热这种无法相通的感官体验,可以量化温度,但无法量化感受
科学提出一种可能,技术实现这个结果,工程做出可用的实物,产品最终进入生活,现在这个时代,科学技术工程都是过剩的能力,给这些能力找到发挥的领域太难了
俗话说,方法总比问题多——那么多出来的方法的用武之地在哪?就在这个保温杯上

2021年01月4日

fail fast

Filed under: 科普 — gcd0318 @ 19:58
今天在向年轻工程师解释 fail fast 的时候话题扯远了一点,就一不留神滑倒了小朋友们最感兴趣的恋爱问题,于是说起了我年轻的时候听说过的“多追快换”模型。简单说就是:
在若干男女之间,每个人都按照自己对每个异性的喜欢程度对所有异性做排序,然后没有女友的男人按照自己的排序去追,女人被追的时候,如果当前没有男友,就答应;如果有男友但是在自己的排序里低于追求者,就换掉——都很符合人的本性
这样经过若干轮,总可以达到稳定的平衡,所有人都配了对。从数学上其实可以完成这个证明,并且计算出大致需要多少轮次才能达到这样的平衡。上学时候我还计算过,现在不太记得最后的答案了,而且甚至,我对我当时的计算是不是对的都不确定……毕竟我的概率课成绩挺烂的
其实多追快换的模型基本依据就是人的本性,达到平衡的时候,每个男人都是和自己能追到的在自己排名里最高的女人配对,而女人则都是和在自己排序里最高的那个对自己有兴趣的男人配对,而最终保持单身的人也无可奈何,因为他们也算是尽力了
当然了,这个模型有几个前提,比如参与者不变,每个参与者的排序不变,等等——新冠封校期间的同学们,别说我没教你们,这么好的机会一辈子最多也就赶上一回,你们懂的
这个模型是符合 fail fast 的,就是让可能发生的事尽早发生,然后再做出判断,决定如何处理。讲到这个例子本来也是顺着 fail fast 下来的,但是因为都是小朋友们在听课,所以他们的注意力就迅速的滑到了什么是渣的问题上
也许对于大部分人来说,理性的态度在面对情感问题时,就是这么不堪一击吧
随手写了一段代码,大略可以验证这个模型的有效性。为了偷懒,我把人定义为类,其实用 dict 可能代码会更清楚
class Person():
    def __init__(self, name, sex, order=[]):
        self.name = name
        self.sex = sex
        self.order = order
        self.mate = None
def connect(p1, p2):
    if p2.mate is not None:
        p2.mate.mate = None
    p1.mate = p2
    p2.mate = p1

def match(p1, p2):
    if ('F' == p1.sex) and ('M' == p2.sex):
        match(p2, p1)
    elif('M' == p1.sex) and ('F' == p2.sex):
        if (p1.mate is None) and ((p2.mate is None) or (p2.order.index(p1.name) < p2.order.index(p2.mate.name))):
            connect(p1, p2)

def output():
    for man in men:
        print(man.name, man.mate.name if man.mate else None, man.order)
    print('=' * 20)
    for woman in women:
        print(woman.name, woman.mate.name if woman.mate else None, woman.order)

def stop(men, women):
    i = 0
    match = True
    while match and (i < N):
        match = (men[i].mate is not None) and (women[i].mate is not None)
        i = i + 1
    return i == N

import random

N = 10
men = []
women = []
for i in range(N):
    women_order = list(range(N))
    random.shuffle(women_order)
    men.append(Person(i, 'M', women_order))
    men_order = list(range(N))
    random.shuffle(men_order)
    women.append(Person(i, 'F', men_order))

print('start')
output()
x = 0
while not stop(men, women):
    x = x + 1
    for man in men:
        for i in range(N):
            if match(man, women[man.order[i]]):
                connect(man, women[man.order[i]])
print('finish in', x, 'rounds')
output()

2021年01月3日

怎样才算一个人

Filed under: 视听 — gcd0318 @ 23:30

这不是 Bob Dylan 的歌词,而是这两天看电影的时候想到的问题
这两天看了几个电影,包括赤狐书生(https://baike.baidu.com/item/%E8%B5%A4%E7%8B%90%E4%B9%A6%E7%94%9F), WW 1984(https://baike.baidu.com/item/%E7%A5%9E%E5%A5%87%E5%A5%B3%E4%BE%A01984),标准的超级英雄套路片,还有真假美猴王之大圣无双(https://baike.baidu.com/item/%E7%9C%9F%E5%81%87%E7%BE%8E%E7%8C%B4%E7%8E%8B%E4%B9%8B%E5%A4%A7%E5%9C%A3%E6%97%A0%E5%8F%8C),烂片无疑,而且百度百科的剧情介绍是错的——提了个修改,看什么时候能通过吧。这几个片都涉及到了相似的问题,所以,罗嗦几句吧
白十三还是一只普通狐狸的时候被王子进的前世救过,到了这一世两个人的关系和前世有没有关系?Barbra 本来是个特别普通的小透明,虽然很热心也很善良,但是却是个标准的小人物,职场上微不足道,生活里内向自卑,但是因为神秘的许愿石,她成为了拥有神奇力量的超人,而且突然就获得了所有人的关注和认可。于是,她的心态变了,为了留住这种过去想都不敢想的快乐,她成了反派。而 Steve 这个角色,说实话我有点没看懂,是因为相貌变了导致 Diana 没有认出他,还是他只是借尸还魂,进入了别人的躯壳,所以结尾出现的那个看雪的男人并不认识 Diana。但是这两个角色都恰好是两个表象:Barbra 的外表没有变化——好吧其实 Barbra 的外表也变了,但那只是她的气质变化,而且更会打扮了——但是内心完全变成了另外的样子,那么她还是 Barbra 吗?而 Steve 的外表变了,内心却仍然是那个爱飞机爱 Diana 的 Steve,那么他还是 Steve 吗?六耳猕猴受孔雀王指使,冒充孙悟空骗取九环锡杖,但是如果他得到了孙悟空的全部记忆,那么他到底是六耳猕猴还是孙悟空?或者一般的,我们认定这个人就是他本人,是根据什么
这好像是个哲学问题,这种问题也只能以特定类型的电影去呈现,比如科幻武侠童话神话,或者有的人喜欢再细分为魔幻玄幻之类,总之都是超现实的片子,因为这种片不必受限于客观世界的规律,可以自行建构起一套逻辑世界,另设规则,在这里可以把一些问题极端化,来引起更多的思考
短期内社会地位发生了变化,导致心态改变,这在现实里固然存在,但是只有在超现实的片子里在可以把它极端到一夜之间发生了变化,让 Barbra 完全没有准备好去应对,因此心态发生了巨大的改变,变的不再谦卑,甚至不再善良,那么她还是 Barbra 吗?她需要为这期间的行为负责吗?我觉得很多人都会觉得她还是 Barbra,要为这些行为负责,因为这种变化是她自己可以控制的,或者说这种心态失控是她自己无法做出调整的结果。那么 Steve 内心不变而外形变了,应该绝大部分人也会认为他还是 Steve 吧,起码 Diana 认为他是 Steve,但是结尾看雪的那个男人,恐怕不会有人觉得这是 Steve 吧
而真假美猴王的电影,它当然是和西游记原著毫无干系的剧情,只是借用西游记的人物框架,减少了许多背景的交代。在这个设定里,六耳猕猴长的和孙悟空一样,又有孙悟空的记忆,甚至还失去了自己的记忆,那么他到底是孙悟空还是六耳猕猴?我们是不是可以说,六耳猕猴就是孙悟空?Barbra 变身后,有 Barbra 的外形而没有 Barbra 的思想,Steve 只有思想而改变了外形,如果这样我们都认可他们还是 Barbra 和 Steve,那么像六耳猕猴这种外形和思想都和孙悟空一样的,应该也就没理由不是孙悟空了吧——但是恐怕不会有人这么认为
至于赤狐书生,好像又复杂一点。转世投胎是佛教进入中国之后被反复使用的编故事的手法,至今还有这类故事。经过投胎,理论上是要在阴间喝了孟婆汤,抹去关于前世的记忆,样子变了,记忆也没了,那么投胎后的王子进和前世的小孩是不是同一个人?投胎后和前世还有没有关系?还要不要报恩或者报仇?甚至白蛇还要不要嫁给许仙?这都成了问题。民间传说倒是简单粗暴的给了个答案:今生的遭遇都是前世的注定,所以三国人物都是楚汉争的人物投胎,才会有这一世的恩怨
哲学系第一学期就会讨论这种问题:怎样才算一个人,以及,怎样才算同一个人。而且,老师应该都不会给答案——如果某位哲学系的老师给了标准答案,那么,他不配在哲学系教书。但是这个问题确实值得反复思考。比如 X-man 里的变异人具有人类的基因,是人类的后代,有人类的思想,但是在剧情里的人类为什么不承认他们也是人?Wolverine 被替换个金属骨骼,那么他还是不是之前的 Wolverine?超人是外星生命,被人类抚养长大,有人类的外形和思想,但是没有人类基因,他们他是不是人?机械战警的身体几乎被毁,只剩下一个头,连接了机械的身体,那么他是不是人?Vice 里的机器人都有了自己的意识和判断,那么他们是不是人?Ederlezi Rising 里的女机器人最终有没有变成人?机械画皮里不断升级学做女人并且可以随时改变容貌的机器人算不算人?这些触及人类标准的哲学问题,大概也只好在科幻片里去讨论了……甚至,机械画皮还牵涉到,女机器人如果能算人,那么她伤人就要由她来负责,否则就是那个天才博士制造者来负责,因为他制造的机器失控,造成他人死亡
哲学上还会讨论一种问题,比如,机械战警的头还是原来的头,但是身体换成了机器,如果这样还可以承认他还是 Alex,那么是不是可以一般化的认为,Alex 的一部分被换掉,还是 Alex,那么如果是一台电脑控制着 Alex 的钢铁身体,那么他(或者它)还是不是 Alex?哲学课上一般是换个说法,比如,一条船每次换掉一块木板,当所有的木板都被换过一次之后,这条船还是不是原来的船?其实更直接的问法就是,人类的细胞每天都在新陈代谢,旧的细胞死亡脱落排泄,新的细胞生成,当我们全身的细胞都换过一遍之后,是不是就等于换了个人?甚至,比如 Death Pool 具有无限修复的超能力,身体被砍掉一部分之后还会再生,那么如果从正中间把 Death Pool 一刀劈开,是不是就会得到两个 Death Pools?就像蚯蚓那样——那可真是灾难,两个话痨,太可怕了
其实我在看真假美猴王的时候,满脑子还是在想着那个从小就困扰着我的那个问题:六耳猕猴到底怎么回事。好吧针对西游记里这个故事的解读很多,我见过的最流行的说法是,六耳猕猴其实是孙悟空对取经事业并不坚定时候的内心的阴暗面,是孙悟空的影子,所以他有孙悟空的记忆,知道孙悟空的所有黑历史——但是这些再怎么也无法解释一个问题:大禹治水的时候应该只用了一根如意金箍棒测量水深吧?六耳猕猴手里那根能和定海神针对攻而势均力敌不落下风的铁棒是哪来的