《三体》中的“咒语”的 Python实现

先上项目地址:GitHub项目地址

       这个项目在很大程度上证明了《三体》中罗辑的“咒语”是可行的,且很大几率可以被掌握基本数学拥有与人类文明同等的太空技术的文明所反编译,最终推导出指示恒星的位置。所以各位不要使用大功率广播编译出来的音频(当然可能人类也没有满足条件信号发生器)。

以下内容摘自三体wiki,用于讲解“咒语”

黑暗森林法则

黑暗森林法则是贯穿《三体II·黑暗森林》、《三体III·死神永生》的重要存在,由罗辑叶文洁推荐而创立的宇宙社会学所推导的宇宙图景。

概述

黑暗森林法则可简单理解为,一旦某个宇宙文明被发现,就必然遭到中其它文明的毁灭性打击。

主要内容

  • 两大公理
  1. 生存是文明的第一需要。
  2. 文明不断增长和扩张,但宇宙中的物质总量保持不变。

成立原因

        “生存是文明的第一需要”,文明需要通过获取资源来使自己生存,保证自我主观意识存在,使文明延续下去。
        “文明不断增长和扩张,但宇宙中的物质总量保持不变”,文明需要在有限的环境范围内,不断实现尽所能的最大化获取资源,以对抗、吞并其他文明。文明在发展过程中规模原来越大,这种有限的环境便会不断扩大。(互相不知道坐标的文明无法产生竞争关系)
        在此背景下,各文明间充满了激烈的竞争氛围,每一个想要从中脱颖而出(换而言之是追求更好的生存)的文明能做的只能不断的壮大自身,这就有了“技术爆炸”的可能性。“技术爆炸”能够减小高级文明与低级文明之间的差距(除非技术封锁,如书中三体人发射智子到地球),而技术爆炸随时可以产生,对高级文明的生存便会产生威胁和隐患。
        这种威胁来源于“猜疑链”,是文明与文明间未能身同一感的体现,正如“你怎么知道我怎么知道你怎么知道我怎么知道...你是善是恶”,低级的文明发展威胁高级文明,高级文明不屑于与低级文明交流(收获不大),而且交流需要花费更多的代价,这样一来双方很难拥有共同的利益。高级文明往往采取最低廉,高效的方法去解决这样的处境,那便是黑暗森林打击,并隐藏或巩固好自身的存在,这就是歌者所说“藏好自己,做好清理”。
        维护自身生存利益是黑暗森林法则成立的关键因素。

真实的宇宙就是那么黑。

—— 罗辑

推导过程

一.由物质守恒与文明的指数级扩张推导出文明间的根本性矛盾。

二.具体到两个文明A,B的接触。

不妨假设A先发现B。

由于公理1,两方为了保证自己的生存,必须先判断对方善意恶意,“善意文明并不能预先把别的文明也想成善意的”。

(1)若A选择与B交流,则由于上述的相互判断,猜疑链形成,同时A暴露己方存在。若AB实力相当,则猜疑链后B对A构成实际威胁;若B落后于A,则技术爆炸(可能由A的交流引发)可能使B在相对较短的时间内对A形成威胁。

(2)若A选择隐蔽,则B在技术爆炸后仍会发现A,猜疑链发生,A的存在暴露,转化为第一种情况。

由公理1和猜疑链性质,得出结论:若文明A发现文明B,A只能对B施以打击。

总结起来,一、让你知道我的存在;二、让你存在下去,对我来说都是危险的,都违反第一条公理。


三.对于“大寂静”即费米悖论提出了一个可能的解释。技术等级较高的文明倾向于隐藏自己,使其他文明难以探查。暴露自己的文明在黑暗森林打击中被消灭。生存选择的结果是所有的文明都变得难以发现。

咒语实验理论

咒语实验理论是基于罗辑的“咒语实验”所验证的三点客观事实所得出的理论:

  1. 高等文明存在大杀器。
  2. 黑暗森林打击及时准确。
  3. 高等文明优先选择打击而非对其探测。

以罗辑的咒语实验为基础,加上对三体母星毁灭的详细观察,黑暗森林将作为事实客观存在。

缺陷

咒语实验理论的优点在于没有漏洞,缺陷在于所有设定都来自单次观测,而非多次观测的实验总结。(导致在“威慑后纪元”中人类对此理论产生怀疑,直到三体星系在广播纪元7年遭受到光粒打击,才将其彻底证实)


希望大家能给我的GitHub仓库点Star并给我的博文点赞关注我,带你了解并使用Python。

以下是一个基本的三体运动可视化Python代码示例: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 三体的质量 m1 = 1 m2 = 2 m3 = 3 # 初始位置和速度 r1_0 = np.array([1, 0, 0]) r2_0 = np.array([0, 1, 0]) r3_0 = np.array([0, 0, 1]) v1_0 = np.array([0, 1, 1]) v2_0 = np.array([1, 0, 1]) v3_0 = np.array([1, 1, 0]) # gravitational constant G = 1 # 定义加速度函数 def acceleration(r1, r2, r3): r12 = r2 - r1 r13 = r3 - r1 r23 = r3 - r2 a1 = G * m2 * r12 / np.linalg.norm(r12)**3 + G * m3 * r13 / np.linalg.norm(r13)**3 a2 = G * m1 * -r12 / np.linalg.norm(r12)**3 + G * m3 * r23 / np.linalg.norm(r23)**3 a3 = G * m1 * -r13 / np.linalg.norm(r13)**3 + G * m2 * -r23 / np.linalg.norm(r23)**3 return a1, a2, a3 # 模拟时间和步长 t_max = 10 dt = 0.01 t_array = np.arange(0, t_max, dt) # 模拟位置和速度 r1 = np.zeros((len(t_array), 3)) r2 = np.zeros((len(t_array), 3)) r3 = np.zeros((len(t_array), 3)) v1 = np.zeros((len(t_array), 3)) v2 = np.zeros((len(t_array), 3)) v3 = np.zeros((len(t_array), 3)) r1[0], r2[0], r3[0] = r1_0, r2_0, r3_0 v1[0], v2[0], v3[0] = v1_0, v2_0, v3_0 for i in range(1, len(t_array)): a1, a2, a3 = acceleration(r1[i-1], r2[i-1], r3[i-1]) r1[i] = r1[i-1] + v1[i-1] * dt + 0.5 * a1 * dt**2 r2[i] = r2[i-1] + v2[i-1] * dt + 0.5 * a2 * dt**2 r3[i] = r3[i-1] + v3[i-1] * dt + 0.5 * a3 * dt**2 a1_new, a2_new, a3_new = acceleration(r1[i], r2[i], r3[i]) v1[i] = v1[i-1] + 0.5 * (a1 + a1_new) * dt v2[i] = v2[i-1] + 0.5 * (a2 + a2_new) * dt v3[i] = v3[i-1] + 0.5 * (a3 + a3_new) * dt # 画图 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot(r1[:,0], r1[:,1], r1[:,2], label='Body 1') ax.plot(r2[:,0], r2[:,1], r2[:,2], label='Body 2') ax.plot(r3[:,0], r3[:,1], r3[:,2], label='Body 3') ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') ax.legend() plt.show() ``` 该代码将三个质点的初始位置和速度定义为向量,并使用欧拉法模拟了它们的运动。它假设三个质点之间存在万有引力,并使用加速度函数计算它们的加速度。它使用matplotlib创建了一个3D图形实例,将三个质点的路径绘制在其
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值