本项目将《最优化理论与方法》课程中的章节、核心概念、优化方法、定理、问题类型和人工智能应用场景整理成知识三元组,使用 Neo4j 存储,并通过 Streamlit 提供中文交互式可视化界面。
- 从 CSV 文件重复初始化 Neo4j 图谱数据
- 展示课程知识图谱总览并按类型区分节点颜色
- 查询“梯度下降法”“KKT 条件”“ADMM”等知识点的一跳邻居
- 查询从基础概念到目标知识点的前置学习路径
- 查询“神经网络训练”“图像重建”等应用场景关联的优化知识
- 展示可直接用于 Neo4j Browser 演示的 Cypher 查询
- 在 Neo4j 未启动或配置有误时显示中文错误提示
- 图数据库:Neo4j
- 后端与数据导入:Python、Neo4j 官方 Python Driver
- 前端:Streamlit
- 图谱可视化:PyVis
- 数据组织:CSV、python-dotenv
节点类型包括:
| 类型 | 含义 | 示例 |
|---|---|---|
Course |
课程 | 最优化理论与方法 |
Chapter |
章节 | 凸集与凸函数 |
Concept |
核心概念 | 梯度、拉格朗日函数 |
Method |
优化方法 | 梯度下降法、ADMM |
Theorem |
定理或条件 | 强对偶、KKT 条件 |
Problem |
优化问题类型 | 凸优化问题、稀疏优化问题 |
Application |
应用场景 | 神经网络训练、图像重建 |
关系类型包括:
| 类型 | 含义 | 示例 |
|---|---|---|
CONTAINS |
包含 | 课程包含章节 |
BELONGS_TO |
属于 | 知识点属于章节 |
PREREQUISITE_OF |
前置知识 | 增广拉格朗日函数是 ADMM 的前置知识 |
USED_FOR |
用于 | 梯度下降法用于神经网络训练 |
SOLVES |
求解 | 近端梯度法求解稀疏优化问题 |
RELATED_TO |
相关 | 强对偶与 KKT 条件相关 |
BASED_ON |
基于 | 牛顿法基于 Hessian 矩阵 |
DERIVES |
推出 | 拉格朗日函数推出对偶问题 |
optimization-knowledge-graph/
├── README.md
├── LICENSE
├── requirements.txt
├── .env.example
├── .gitignore
├── app.py
├── scripts/
│ └── init_graph.py
├── src/
│ ├── __init__.py
│ ├── neo4j_client.py
│ ├── graph_queries.py
│ └── visualization.py
└── data/
├── nodes.csv
└── relationships.csv
方式一:使用 Neo4j Desktop。
- 安装 Neo4j Desktop。
- 新建本地数据库,设置密码并启动数据库。
- 默认 Bolt 地址通常是
bolt://localhost:7687。
方式二:使用 Docker。
docker run --name optimization-neo4j \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/your_password \
-d neo4j:5Neo4j Browser 地址为 http://localhost:7474。
建议使用 Python 3.10 或更高版本。
cd optimization-knowledge-graph
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtWindows PowerShell 激活虚拟环境的命令为:
.venv\Scripts\Activate.ps1复制示例配置:
cp .env.example .env编辑 .env,填入自己的 Neo4j 密码:
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_password如果使用 Neo4j Aura,请使用实例下载文件中的连接信息:
NEO4J_URI=neo4j+s://your-instance-id.databases.neo4j.io
NEO4J_USER=your_username
NEO4J_PASSWORD=your_password
NEO4J_DATABASE=your_database
# 本机代理无法转发 Bolt 协议时添加:
# NEO4J_FORCE_HTTPS=true项目默认使用 Neo4j 官方 Python Driver。如果本机代理无法转发 Bolt 协议,程序会自动回退到 Aura HTTPS Query API。也可以配置 NEO4J_FORCE_HTTPS=true 跳过 Bolt 连接探测。
python scripts/init_graph.py脚本会先清空当前数据库中的旧数据,再读取 data/nodes.csv 和 data/relationships.csv 导入预置图谱。脚本可以重复运行。
注意:初始化脚本会执行
MATCH (n) DETACH DELETE n。请使用专门为本课程项目创建的数据库,不要对存有其他数据的 Neo4j 数据库运行此脚本。
streamlit run app.py浏览器通常会自动打开 http://localhost:8501。
data/nodes.csv 保存节点:
id,name,label,description
method_admm,ADMM,Method,交替方向乘子法,适合求解具有可分结构的凸优化问题。data/relationships.csv 保存关系:
source,target,type,description
concept_aug_lagrangian,method_admm,PREREQUISITE_OF,增广拉格朗日函数是 ADMM 的前置知识增加课程内容时,只需要补充 CSV 文件并重新运行初始化脚本。
查询部分图谱:
MATCH (n)-[r]->(m) RETURN n, r, m LIMIT 100查询某个知识点的一跳关系:
MATCH (n {name: "梯度下降法"})-[r]-(m) RETURN n, r, m查询 ADMM 的前置知识路径:
MATCH path=(pre)-[:PREREQUISITE_OF*1..4]->(target {name: "ADMM"})
RETURN path查询用于神经网络训练的优化方法:
MATCH (m)-[:USED_FOR]->(a {name: "神经网络训练"})
RETURN m, a查询凸优化问题的理论基础:
MATCH (p {name: "凸优化问题"})-[:BASED_ON]->(basis)
RETURN p, basis确认 Neo4j 已经启动,并检查 .env 中的地址、用户名和密码。修改 .env 后请重新启动 Streamlit。
运行:
python scripts/init_graph.py然后刷新浏览器页面。
本项目使用 MIT License 开源,详见 LICENSE。