Skip to content

wayaairon/optimization-knowledge-graph

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于 Neo4j 的《最优化理论与方法》课程知识图谱

本项目将《最优化理论与方法》课程中的章节、核心概念、优化方法、定理、问题类型和人工智能应用场景整理成知识三元组,使用 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

运行步骤

1. 安装并启动 Neo4j

方式一:使用 Neo4j Desktop。

  1. 安装 Neo4j Desktop
  2. 新建本地数据库,设置密码并启动数据库。
  3. 默认 Bolt 地址通常是 bolt://localhost:7687

方式二:使用 Docker。

docker run --name optimization-neo4j \
  -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/your_password \
  -d neo4j:5

Neo4j Browser 地址为 http://localhost:7474

2. 创建 Python 环境并安装依赖

建议使用 Python 3.10 或更高版本。

cd optimization-knowledge-graph
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Windows PowerShell 激活虚拟环境的命令为:

.venv\Scripts\Activate.ps1

3. 配置 Neo4j 连接

复制示例配置:

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 连接探测。

4. 初始化图谱数据

python scripts/init_graph.py

脚本会先清空当前数据库中的旧数据,再读取 data/nodes.csvdata/relationships.csv 导入预置图谱。脚本可以重复运行。

注意:初始化脚本会执行 MATCH (n) DETACH DELETE n。请使用专门为本课程项目创建的数据库,不要对存有其他数据的 Neo4j 数据库运行此脚本。

5. 启动前端

streamlit run app.py

浏览器通常会自动打开 http://localhost:8501

CSV 数据格式

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 文件并重新运行初始化脚本。

示例 Cypher 查询

查询部分图谱:

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

确认 Neo4j 已经启动,并检查 .env 中的地址、用户名和密码。修改 .env 后请重新启动 Streamlit。

页面连接成功但图谱为空

运行:

python scripts/init_graph.py

然后刷新浏览器页面。

开源许可

本项目使用 MIT License 开源,详见 LICENSE

About

Neo4j 和 Streamlit 构建的最优化课程知识图谱

Resources

License

Stars

5 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages