Skip to content

Commit 3c02ef3

Browse files
committed
first commit
0 parents  commit 3c02ef3

1 file changed

Lines changed: 170 additions & 0 deletions

File tree

README.md

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
# 三世界理论动态演化模型 (RX-GML / GM4.5.2)
2+
3+
## 项目简介
4+
5+
本项目旨在通过一个动态演化的多主体模型,探索和可视化一个关于个体“现实”构成的理论。该理论源于一段意识流文字,其核心观点认为个体的现实是由“本然”、“应然”和“或然”三个相互作用的世界所构成。
6+
7+
* **本然 (The Inherent/Given):** 代表个体所拥有的客观资源、条件以及面临的限制和障碍。
8+
* **应然 (The Ought-to-be/Normative):** 代表个体的价值观、信念、驱动力、理想和目标。
9+
* **或然 (The Probable/Potential):** 代表个体感知的可能性、选择空间、创新能力和风险承受意愿。
10+
11+
模型中的每个“个体”(或称“状态点”)拥有这三大世界下的多个具体维度。这些维度值在0-10之间动态变化,其演化逻辑基于一系列内部反馈循环、对外部环境的响应、社会交互以及随机事件的影响。
12+
13+
本项目通过一个基于Python Dash构建的Web应用程序,将这些状态点及其演化过程在三维空间中进行可视化,并允许用户通过交互式控件调整参数、观察演化、甚至手动编辑状态点的维度。
14+
15+
**核心特性:**
16+
17+
* **多维度个体建模:** 每个个体包含本然、应然、或然三大类下的多个细分维度。
18+
* **动态演化算法:** 复杂的内部逻辑驱动各维度随时间变化,体现了维度间的相互促进与制约。
19+
* **深化风险与回报机制:** 模拟个体在面对不确定性时的决策、投资、以及成功或失败后的连锁反应。
20+
* **完善的“应然”世界动态:** 强调价值观、驱动力和理想在指导行为、应对现实中的核心作用。
21+
* **社会交互系统:** 引入邻居网络、信任机制、信息传播、声望系统等,模拟个体间的相互影响。
22+
* **事件系统:** 随机或条件触发的全局/个体事件为模型增加不确定性和转折点。
23+
* **全局环境因素:** 模拟宏观环境对个体演化的系统性影响。
24+
* **交互式可视化:** 通过Dash在浏览器中实时展示三维演化过程和相关数据。
25+
26+
## 代码结构与说明
27+
28+
项目主要由一个Python脚本 (`RX-GML.py` 或你最终命名的文件) 构成,其中包含了以下主要部分:
29+
30+
### 1. 全局常量与辅助函数
31+
32+
* `DIM_KEYS`: 包含所有个体维度的键名列表(如 `b1_resource`, `s1_trustworthiness` 等)。
33+
* `DIMENSION_LABELS_MAP_ZH`: 维度键名到中文标签的映射,用于UI显示。
34+
* `AXIS_LABELS_ZH`: 坐标轴标签的中文映射。
35+
* `MAX_LOG_LINES`: 事件日志显示的最大行数。
36+
* `sigmoid(x, k, x0)`: S型函数,用于模拟饱和效应或阈值效应。
37+
* `scale_value(value, old_min, old_max, new_min, new_max)`: 将值从一个范围映射到另一个范围的辅助函数。
38+
39+
### 2. `WorldState`
40+
41+
此类定义了模型中的核心实体——“个体”或“状态点”。
42+
43+
* **`__init__(...)`**: 初始化个体的所有维度值(本然、应然、或然、社交维度),以及历史记录、邻居列表、信任级别字典和上一次风险结果。
44+
* **`get_display_name()`**: 返回个体的中英文显示名称。
45+
* **`get_coords_for_plot(...)`**: 根据选择的坐标系类型(简化或综合)计算个体在三维图中的绘图坐标。
46+
* **`_apply_boundary_effect(...)`**: 内部方法,用于实现维度值在接近0或10边界时的“软边界”效应,减缓变化速度。
47+
* **`_calculate_delta_X(...)`**: 一系列内部方法,分别计算每个维度 (`b1_resource`, `s1_trustworthiness` 等) 在一个演化步骤中的变化量 (`delta`)。这些方法是模型核心算法的体现,包含了:
48+
* 维度间的内部相互作用。
49+
* 对风险项目结果的响应。
50+
* 对邻居效应的整合。
51+
* 对全局环境因素的考虑(间接通过 `evolve` 方法传递的参数)。
52+
* **`_calculate_neighbor_effects(...)`**: 计算来自邻居网络的综合影响,包括:
53+
* 资源竞争与合作(受信任度调节)。
54+
* 应然维度(Y1, Y2, Y3)的社会对齐/传染(受自身声望/自信调节)。
55+
* 社交维度(S1, S2)的社会规范压力。
56+
* 信任动态(`self.trust_levels` 的更新)。
57+
* H2(创新)的信息共享(受信任度和邻居声望调节)。
58+
* **`evolve(params, all_states_objects_dict, active_event_effects_on_self, global_env_factors)`**: 核心演化方法,执行一个时间步的逻辑:
59+
1. **风险项目评估与执行:** 根据H3, Y2, S2等决定是否尝试风险项目,计算投资、潜力、风险,并随机生成回报结果,直接影响B1, B2,并记录 `current_risk_outcome_this_step`
60+
2. **计算全局平均值:** 如平均资源、平均可能性等,供Y3等维度参考。
61+
3. **计算邻居效应:** 调用 `_calculate_neighbor_effects`
62+
4. **计算各维度Deltas:** 调用所有 `_calculate_delta_X` 方法,传入必要的参数(包括本轮的风险结果 `current_risk_outcome_this_step`)。
63+
5. **应用Deltas、噪声、事件效果、和裁剪:** 更新所有维度值,应用学习率、随机噪声、来自`EventManager`的事件效果(考虑个体韧性),并确保值在0-10范围内。
64+
6. **更新 `self.last_risk_outcome_factor`** 为下一轮迭代做准备。
65+
* **`record_history(...)`**: 记录当前绘图坐标到历史轨迹。
66+
* **`clear_history()`**: 清空历史轨迹。
67+
* **`to_dict()` / `from_dict()`**: 用于对象的序列化和反序列化,方便在Dash的 `dcc.Store` 中存储和传递。
68+
69+
### 3. `Event` 类 和 `EventManager`
70+
71+
这两个类共同构成了事件系统。
72+
73+
* **`Event`**: 定义单个事件的属性和行为:
74+
* `name` (事件名称), `trigger_type` (触发类型:概率性、全局条件性、个体条件性), `trigger_params` (触发参数), `target_selector` (目标选择逻辑), `effects` (效果列表), `duration` (持续时间), `one_time` (是否一次性)。
75+
* `check_trigger(...)`: 判断事件在本步骤是否触发(考虑全局环境对概率的修正)。
76+
* `select_targets(...)`: 根据选择器逻辑从所有状态点中选出受影响的目标。
77+
* `get_effects_for_target()`: 生成将应用于目标的具体效果数据(考虑效果值的随机波动)。
78+
* **`EventManager`**: 管理所有事件的生命周期和执行:
79+
* `__init__(...)`: 加载事件定义列表。
80+
* `reset_events()`: 重置事件管理器状态(如清除已触发的一次性事件)。
81+
* `process_step(all_states_objects_dict, global_metrics, global_env_factors)`: 在每个演化步骤中被调用:
82+
1. 检查所有已定义事件的触发条件。
83+
2. 为已触发的事件选择目标。
84+
3. 处理瞬时事件效果和持续性事件效果(通过 `active_timed_effects` 跟踪)。
85+
4. 移除已触发的一次性事件。
86+
5. 返回一个字典,其中包含本步骤需要应用到每个目标状态点的具体效果列表,以及事件触发的日志消息。
87+
88+
### 4. 初始化数据
89+
90+
此部分定义了程序启动时的初始配置:
91+
92+
* `initial_states_templates_gm452`: 包含多个预定义的状态点模板(字典列表),每个模板包含其中文名、英文ID和各个维度的初始值。
93+
* `initial_states_obj_list_gm452`: 根据模板创建 `WorldState` 对象列表。
94+
* `neighbor_config_gm452`: 定义状态点之间的初始邻居关系。
95+
* `initial_world_states_store_data_gm452`: 将状态对象转换为字典,用于Dash `dcc.Store` 的初始数据。
96+
* `default_evolution_params_gm452`: 一个包含模型所有演化参数的字典,包括:
97+
* 全局参数:`learning_rate`, `noise_level`, `base_consumption` 等。
98+
* 各种行为阈值:如风险尝试阈值、理想-现实差距阈值等。
99+
* `coefficients`: 一个嵌套字典,包含所有 `_calculate_delta_X` 方法中使用的具体系数 `k` 值,以及社会交互 `social_interactions` 的系数。**这部分是模型调优的核心。**
100+
* `plot_weights`: 用于计算综合坐标的绘图权重。
101+
* `global_environment_factors_gm452`: 定义初始的全局环境因子。
102+
* `event_definitions_gm452`: 事件定义列表,每个事件是一个字典,描述其属性。
103+
* `event_manager`: `EventManager` 的全局实例。
104+
105+
### 5. Dash 应用布局 (`app.layout`)
106+
107+
使用 `dash.dcc``dash.html` 组件构建Web用户界面,主要包括:
108+
109+
* **标题和全局存储组件 (`dcc.Store`)**: 用于存储状态数据、演化参数、全局环境因子、事件日志等。
110+
* **左侧控制面板**:
111+
* 坐标系类型选择下拉框。
112+
* 状态点选择下拉框。
113+
* **编辑面板 (`edit-panel-div`)**: 根据选定的状态点,动态生成所有维度的滑块,允许用户手动编辑。
114+
* **邻居信息 (`neighbor-info-div`) 和信任信息 (`trust-info-div`) 显示区域。**
115+
* **全局环境因子控制滑块。**
116+
* **动态演化控制**: 开始/暂停按钮、演化一步按钮、重置按钮、演化速度输入框、学习率和噪声水平滑块。
117+
* 迭代步数显示。
118+
* **右侧显示面板**:
119+
* **3D散点图 (`main-3d-scatter-plot`)**: 使用 `plotly.graph_objects.Scatter3d` 实时可视化所有状态点在三维空间中的位置及其历史轨迹。点的颜色和悬停文本提供额外信息。
120+
* **事件与状态日志文本框 (`event-log-textarea`)**: 显示事件触发信息和状态点内部的关键日志(如风险项目结果)。
121+
122+
### 6. Dash 回调函数 (`@app.callback`)
123+
124+
实现应用的交互逻辑和动态更新,主要包括:
125+
126+
* **更新下拉框和编辑面板**: 根据 `world-states-store` 和用户选择动态更新。
127+
* **响应滑块修改**: 将用户对维度滑块、学习率、噪声、全局环境因子滑块的修改更新到相应的 `dcc.Store`
128+
* **演化控制**: 处理开始/暂停、步进、重置按钮的点击事件。
129+
* **核心演化循环 (`run_evolution_step_advanced_gm452`)**:
130+
*`dcc.Interval` 或“演化一步”按钮触发。
131+
* 获取当前所有状态数据、演化参数和全局环境因子。
132+
* 反序列化状态数据为 `WorldState` 对象列表。
133+
* 计算全局指标。
134+
* 调用 `event_manager.process_step` 处理事件。
135+
* 对每个 `WorldState` 对象调用其 `evolve` 方法,传入所需参数。
136+
* 记录历史轨迹。
137+
* 将更新后的状态对象序列化回字典,并更新 `world-states-store`
138+
* 更新UI上的迭代信息和事件日志。
139+
* **更新3D图**: 当 `world-states-store` 或坐标系类型变化时,重新生成并更新3D散点图。
140+
* **更新邻居/信任信息和事件日志显示**
141+
142+
## 如何运行
143+
144+
1. 确保已安装必要的Python库:`dash`, `plotly`, `numpy`
145+
```bash
146+
pip install dash plotly numpy
147+
```
148+
2. 将代码保存为 `.py` 文件 (例如 `RX-GML.py`)。
149+
3. 在终端中运行:
150+
```bash
151+
python RX-GML.py
152+
```
153+
4. 打开浏览器,访问 Dash 应用通常运行的地址 (例如 `http://127.0.0.1:8061/`,端口号可能因你的运行而异,请查看终端输出)。
154+
155+
## 未来可能的扩展方向
156+
157+
* 更细致的演化参数UI控制(允许编辑所有`k`系数)。
158+
* 动态网络结构的形成与演化。
159+
* 更复杂的群体动力学和制度层面影响。
160+
* 引入个体间的“记忆”机制,影响其对其他个体的信任和行为。
161+
* 高级数据记录与离线分析功能。
162+
* 用户自定义初始状态和事件。
163+
164+
## 贡献与反馈
165+
166+
欢迎对该模型提出任何改进建议、发现潜在的bug,或分享基于此模型的有趣发现。
167+
168+
---
169+
170+
希望这个模板能帮助你很好地组织项目说明!你可以根据需要添加更多细节,例如对特定算法决策的解释、参数选择的理由、或者你通过模型观察到的一些初步现象等。

0 commit comments

Comments
 (0)