-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
三世界理论动态演化模型 (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): 核心演化方法,执行一个时间步的逻辑:- 风险项目评估与执行: 根据H3, Y2, S2等决定是否尝试风险项目,计算投资、潜力、风险,并随机生成回报结果,直接影响B1, B2,并记录
current_risk_outcome_this_step。 - 计算全局平均值: 如平均资源、平均可能性等,供Y3等维度参考。
- 计算邻居效应: 调用
_calculate_neighbor_effects。 - 计算各维度Deltas: 调用所有
_calculate_delta_X方法,传入必要的参数(包括本轮的风险结果current_risk_outcome_this_step)。 - 应用Deltas、噪声、事件效果、和裁剪: 更新所有维度值,应用学习率、随机噪声、来自
EventManager的事件效果(考虑个体韧性),并确保值在0-10范围内。 - 更新
self.last_risk_outcome_factor: 为下一轮迭代做准备。
- 风险项目评估与执行: 根据H3, Y2, S2等决定是否尝试风险项目,计算投资、潜力、风险,并随机生成回报结果,直接影响B1, B2,并记录
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): 在每个演化步骤中被调用:- 检查所有已定义事件的触发条件。
- 为已触发的事件选择目标。
- 处理瞬时事件效果和持续性事件效果(通过
active_timed_effects跟踪)。 - 移除已触发的一次性事件。
- 返回一个字典,其中包含本步骤需要应用到每个目标状态点的具体效果列表,以及事件触发的日志消息。
4. 初始化数据
此部分定义了程序启动时的初始配置:
initial_states_templates_gm452: 包含多个预定义的状态点模板(字典列表),每个模板包含其中文名、英文ID和各个维度的初始值。initial_states_obj_list_gm452: 根据模板创建WorldState对象列表。neighbor_config_gm452: 定义状态点之间的初始邻居关系。initial_world_states_store_data_gm452: 将状态对象转换为字典,用于Dashdcc.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.dcc 和 dash.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): 显示事件触发信息和状态点内部的关键日志(如风险项目结果)。
- 3D散点图 (
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散点图。 - 更新邻居/信任信息和事件日志显示。
如何运行
- 确保已安装必要的Python库:
dash,plotly,numpy。pip install dash plotly numpy
- 将代码保存为
.py文件 (例如RX-GML.py)。 - 在终端中运行:
python RX-GML.py
- 打开浏览器,访问 Dash 应用通常运行的地址 (例如
http://127.0.0.1:8061/,端口号可能因你的运行而异,请查看终端输出)。
未来可能的扩展方向
- 更细致的演化参数UI控制(允许编辑所有
k系数)。 - 动态网络结构的形成与演化。
- 更复杂的群体动力学和制度层面影响。
- 引入个体间的“记忆”机制,影响其对其他个体的信任和行为。
- 高级数据记录与离线分析功能。
- 用户自定义初始状态和事件。
贡献与反馈
欢迎对该模型提出任何改进建议、发现潜在的bug,或分享基于此模型的有趣发现。
希望这个模板能帮助你很好地组织项目说明!你可以根据需要添加更多细节,例如对特定算法决策的解释、参数选择的理由、或者你通过模型观察到的一些初步现象等。
Metadata
Metadata
Assignees
Labels
No labels