Skip to content

三个世界理论 #1

Description

@SAY683

三世界理论动态演化模型 (RX-GML / GM4.5.2)

项目简介

本项目旨在通过一个动态演化的多主体模型,探索和可视化一个关于个体“现实”构成的理论。该理论源于一段意识流文字,其核心观点认为个体的现实是由“本然”、“应然”和“或然”三个相互作用的世界所构成。

  • 本然 (The Inherent/Given): 代表个体所拥有的客观资源、条件以及面临的限制和障碍。
  • 应然 (The Ought-to-be/Normative): 代表个体的价值观、信念、驱动力、理想和目标。
  • 或然 (The Probable/Potential): 代表个体感知的可能性、选择空间、创新能力和风险承受意愿。

模型中的每个“个体”(或称“状态点”)拥有这三大世界下的多个具体维度。这些维度值在0-10之间动态变化,其演化逻辑基于一系列内部反馈循环、对外部环境的响应、社会交互以及随机事件的影响。

本项目通过一个基于Python Dash构建的Web应用程序,将这些状态点及其演化过程在三维空间中进行可视化,并允许用户通过交互式控件调整参数、观察演化、甚至手动编辑状态点的维度。

核心特性:

  • 多维度个体建模: 每个个体包含本然、应然、或然三大类下的多个细分维度。
  • 动态演化算法: 复杂的内部逻辑驱动各维度随时间变化,体现了维度间的相互促进与制约。
  • 深化风险与回报机制: 模拟个体在面对不确定性时的决策、投资、以及成功或失败后的连锁反应。
  • 完善的“应然”世界动态: 强调价值观、驱动力和理想在指导行为、应对现实中的核心作用。
  • 社会交互系统: 引入邻居网络、信任机制、信息传播、声望系统等,模拟个体间的相互影响。
  • 事件系统: 随机或条件触发的全局/个体事件为模型增加不确定性和转折点。
  • 全局环境因素: 模拟宏观环境对个体演化的系统性影响。
  • 交互式可视化: 通过Dash在浏览器中实时展示三维演化过程和相关数据。

代码结构与说明

项目主要由一个Python脚本 (RX-GML.py 或你最终命名的文件) 构成,其中包含了以下主要部分:

1. 全局常量与辅助函数

  • DIM_KEYS: 包含所有个体维度的键名列表(如 b1_resource, s1_trustworthiness 等)。
  • DIMENSION_LABELS_MAP_ZH: 维度键名到中文标签的映射,用于UI显示。
  • AXIS_LABELS_ZH: 坐标轴标签的中文映射。
  • MAX_LOG_LINES: 事件日志显示的最大行数。
  • sigmoid(x, k, x0): S型函数,用于模拟饱和效应或阈值效应。
  • scale_value(value, old_min, old_max, new_min, new_max): 将值从一个范围映射到另一个范围的辅助函数。

2. WorldState

此类定义了模型中的核心实体——“个体”或“状态点”。

  • __init__(...): 初始化个体的所有维度值(本然、应然、或然、社交维度),以及历史记录、邻居列表、信任级别字典和上一次风险结果。
  • get_display_name(): 返回个体的中英文显示名称。
  • get_coords_for_plot(...): 根据选择的坐标系类型(简化或综合)计算个体在三维图中的绘图坐标。
  • _apply_boundary_effect(...): 内部方法,用于实现维度值在接近0或10边界时的“软边界”效应,减缓变化速度。
  • _calculate_delta_X(...): 一系列内部方法,分别计算每个维度 (b1_resource, s1_trustworthiness 等) 在一个演化步骤中的变化量 (delta)。这些方法是模型核心算法的体现,包含了:
    • 维度间的内部相互作用。
    • 对风险项目结果的响应。
    • 对邻居效应的整合。
    • 对全局环境因素的考虑(间接通过 evolve 方法传递的参数)。
  • _calculate_neighbor_effects(...): 计算来自邻居网络的综合影响,包括:
    • 资源竞争与合作(受信任度调节)。
    • 应然维度(Y1, Y2, Y3)的社会对齐/传染(受自身声望/自信调节)。
    • 社交维度(S1, S2)的社会规范压力。
    • 信任动态(self.trust_levels 的更新)。
    • H2(创新)的信息共享(受信任度和邻居声望调节)。
  • evolve(params, all_states_objects_dict, active_event_effects_on_self, global_env_factors): 核心演化方法,执行一个时间步的逻辑:
    1. 风险项目评估与执行: 根据H3, Y2, S2等决定是否尝试风险项目,计算投资、潜力、风险,并随机生成回报结果,直接影响B1, B2,并记录 current_risk_outcome_this_step
    2. 计算全局平均值: 如平均资源、平均可能性等,供Y3等维度参考。
    3. 计算邻居效应: 调用 _calculate_neighbor_effects
    4. 计算各维度Deltas: 调用所有 _calculate_delta_X 方法,传入必要的参数(包括本轮的风险结果 current_risk_outcome_this_step)。
    5. 应用Deltas、噪声、事件效果、和裁剪: 更新所有维度值,应用学习率、随机噪声、来自EventManager的事件效果(考虑个体韧性),并确保值在0-10范围内。
    6. 更新 self.last_risk_outcome_factor 为下一轮迭代做准备。
  • record_history(...): 记录当前绘图坐标到历史轨迹。
  • clear_history(): 清空历史轨迹。
  • to_dict() / from_dict(): 用于对象的序列化和反序列化,方便在Dash的 dcc.Store 中存储和传递。

3. Event 类 和 EventManager

这两个类共同构成了事件系统。

  • Event: 定义单个事件的属性和行为:
    • name (事件名称), trigger_type (触发类型:概率性、全局条件性、个体条件性), trigger_params (触发参数), target_selector (目标选择逻辑), effects (效果列表), duration (持续时间), one_time (是否一次性)。
    • check_trigger(...): 判断事件在本步骤是否触发(考虑全局环境对概率的修正)。
    • select_targets(...): 根据选择器逻辑从所有状态点中选出受影响的目标。
    • get_effects_for_target(): 生成将应用于目标的具体效果数据(考虑效果值的随机波动)。
  • EventManager: 管理所有事件的生命周期和执行:
    • __init__(...): 加载事件定义列表。
    • reset_events(): 重置事件管理器状态(如清除已触发的一次性事件)。
    • process_step(all_states_objects_dict, global_metrics, global_env_factors): 在每个演化步骤中被调用:
      1. 检查所有已定义事件的触发条件。
      2. 为已触发的事件选择目标。
      3. 处理瞬时事件效果和持续性事件效果(通过 active_timed_effects 跟踪)。
      4. 移除已触发的一次性事件。
      5. 返回一个字典,其中包含本步骤需要应用到每个目标状态点的具体效果列表,以及事件触发的日志消息。

4. 初始化数据

此部分定义了程序启动时的初始配置:

  • initial_states_templates_gm452: 包含多个预定义的状态点模板(字典列表),每个模板包含其中文名、英文ID和各个维度的初始值。
  • initial_states_obj_list_gm452: 根据模板创建 WorldState 对象列表。
  • neighbor_config_gm452: 定义状态点之间的初始邻居关系。
  • initial_world_states_store_data_gm452: 将状态对象转换为字典,用于Dash dcc.Store 的初始数据。
  • default_evolution_params_gm452: 一个包含模型所有演化参数的字典,包括:
    • 全局参数:learning_rate, noise_level, base_consumption 等。
    • 各种行为阈值:如风险尝试阈值、理想-现实差距阈值等。
    • coefficients: 一个嵌套字典,包含所有 _calculate_delta_X 方法中使用的具体系数 k 值,以及社会交互 social_interactions 的系数。这部分是模型调优的核心。
    • plot_weights: 用于计算综合坐标的绘图权重。
  • global_environment_factors_gm452: 定义初始的全局环境因子。
  • event_definitions_gm452: 事件定义列表,每个事件是一个字典,描述其属性。
  • event_manager: EventManager 的全局实例。

5. Dash 应用布局 (app.layout)

使用 dash.dccdash.html 组件构建Web用户界面,主要包括:

  • 标题和全局存储组件 (dcc.Store): 用于存储状态数据、演化参数、全局环境因子、事件日志等。
  • 左侧控制面板:
    • 坐标系类型选择下拉框。
    • 状态点选择下拉框。
    • 编辑面板 (edit-panel-div): 根据选定的状态点,动态生成所有维度的滑块,允许用户手动编辑。
    • 邻居信息 (neighbor-info-div) 和信任信息 (trust-info-div) 显示区域。
    • 全局环境因子控制滑块。
    • 动态演化控制: 开始/暂停按钮、演化一步按钮、重置按钮、演化速度输入框、学习率和噪声水平滑块。
    • 迭代步数显示。
  • 右侧显示面板:
    • 3D散点图 (main-3d-scatter-plot): 使用 plotly.graph_objects.Scatter3d 实时可视化所有状态点在三维空间中的位置及其历史轨迹。点的颜色和悬停文本提供额外信息。
    • 事件与状态日志文本框 (event-log-textarea): 显示事件触发信息和状态点内部的关键日志(如风险项目结果)。

6. Dash 回调函数 (@app.callback)

实现应用的交互逻辑和动态更新,主要包括:

  • 更新下拉框和编辑面板: 根据 world-states-store 和用户选择动态更新。
  • 响应滑块修改: 将用户对维度滑块、学习率、噪声、全局环境因子滑块的修改更新到相应的 dcc.Store
  • 演化控制: 处理开始/暂停、步进、重置按钮的点击事件。
  • 核心演化循环 (run_evolution_step_advanced_gm452):
    • dcc.Interval 或“演化一步”按钮触发。
    • 获取当前所有状态数据、演化参数和全局环境因子。
    • 反序列化状态数据为 WorldState 对象列表。
    • 计算全局指标。
    • 调用 event_manager.process_step 处理事件。
    • 对每个 WorldState 对象调用其 evolve 方法,传入所需参数。
    • 记录历史轨迹。
    • 将更新后的状态对象序列化回字典,并更新 world-states-store
    • 更新UI上的迭代信息和事件日志。
  • 更新3D图: 当 world-states-store 或坐标系类型变化时,重新生成并更新3D散点图。
  • 更新邻居/信任信息和事件日志显示

如何运行

  1. 确保已安装必要的Python库:dash, plotly, numpy
    pip install dash plotly numpy
  2. 将代码保存为 .py 文件 (例如 RX-GML.py)。
  3. 在终端中运行:
    python RX-GML.py
  4. 打开浏览器,访问 Dash 应用通常运行的地址 (例如 http://127.0.0.1:8061/,端口号可能因你的运行而异,请查看终端输出)。

未来可能的扩展方向

  • 更细致的演化参数UI控制(允许编辑所有k系数)。
  • 动态网络结构的形成与演化。
  • 更复杂的群体动力学和制度层面影响。
  • 引入个体间的“记忆”机制,影响其对其他个体的信任和行为。
  • 高级数据记录与离线分析功能。
  • 用户自定义初始状态和事件。

贡献与反馈

欢迎对该模型提出任何改进建议、发现潜在的bug,或分享基于此模型的有趣发现。


希望这个模板能帮助你很好地组织项目说明!你可以根据需要添加更多细节,例如对特定算法决策的解释、参数选择的理由、或者你通过模型观察到的一些初步现象等。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions