# financial-risk-kg **Repository Path**: dstd181/financial-risk-kg ## Basic Information - **Project Name**: financial-risk-kg - **Description**: 企业金融风险知识图谱系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-02 - **Last Updated**: 2026-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 人工智能课程项目展示系统 本仓库是人工智能课程期末项目的综合展示系统,采用 Spring Boot + MyBatis-Plus + MySQL + 原生 HTML/CSS/JavaScript 实现。系统目前拆分为两个独立页面,既保留原来的企业金融风险知识图谱项目,也新增了非金融方向的遗传算法智能排课项目。 首页入口: ```text http://127.0.0.1:8080/ ``` 两个项目页面: ```text http://127.0.0.1:8080/finance.html http://127.0.0.1:8080/schedule.html ``` ## 项目一:企业金融风险知识图谱 企业金融风险知识图谱面向 A 股、美股和未上市科技企业,围绕企业、市场、交易所、行业、指数、监管政策、产业链、财务指标、估值指标和风险节点构建关系网络,用于展示企业风险画像和风险传导路径。 ### 主要功能 - 企业池选择:支持中国平安、顺丰控股、牧原股份、寒武纪、宁德时代、工商银行、美股七姐妹、博通、SpaceX、奈飞等企业。 - 企业档案展示:展示企业代码、市场、交易所、国家地区和行业。 - 知识图谱展示:使用 ECharts graph 展示企业与市场、交易所、行业、指标、风险因素之间的关系。 - 风险画像生成:根据财务指标、行业风险和关系路径生成综合风险等级。 - 财务指标分析:展示 PE、PB、ROE、股息率、EPS、资产负债率、流动比率、经营现金流等指标。 - 新闻事件模块:围绕当前企业生成公告、市场、财务、政策、产业链、估值和舆情等 8 类新闻摘要。 - 风险原因解释:用文字说明风险等级背后的主要原因。 ### 知识图谱设计 图谱节点主要包括: ```text Company 企业 Market A股 / 美股 / 未上市 Exchange 上海证券交易所 / 深圳证券交易所 / NASDAQ / NYSE 等 Industry 行业 Index 指数 Policy 政策 Metric 财务指标 Risk 风险因素 RiskLevel 风险等级 SupplyChain 产业链节点 ``` 关系类型示例: ```text 企业 -> 属于市场 -> A股 / 美股 企业 -> 上市交易所 -> 上海证券交易所 / NASDAQ 企业 -> 属于行业 -> 银行 / 保险 / 新能源 / 半导体 企业 -> 拥有指标 -> PE / PB / ROE / 股息率 指标 -> 影响 -> 估值风险 / 偿债风险 / 盈利风险 行业 -> 暴露于 -> 政策风险 / 周期风险 / 技术风险 ``` 该模块体现了知识表示、实体关系建模、图谱可视化和可解释风险分析的综合应用。 ## 项目二:遗传算法智能排课与资源调度优化 智能排课项目不再围绕金融主题,而是选择高校课程、教师、教室和时间段之间的真实调度问题。排课问题属于典型的 NP-hard 组合优化问题,穷举搜索成本极高,因此使用遗传算法进行近似优化。 页面入口: ```text http://127.0.0.1:8080/schedule.html ``` 接口入口: ```text GET /api/schedule/optimize ``` ### 业务场景 高校、培训机构、企业内训和实验室管理中经常需要进行课程排布。人工排课容易出现教师冲突、班级冲突、教室冲突、容量不匹配和实验室类型不匹配等问题。当课程、教师、教室和时间段数量增加时,组合空间会快速膨胀。 例如 10 门课程、10 个时间段、12 间教室,每门课有 120 种安排方式,完整搜索空间约为: ```text 120 ^ 10 ``` 这已经远超人工逐一尝试的范围,因此适合使用遗传算法、模拟退火、粒子群优化等智能优化算法。本项目选择遗传算法,是因为它思路清晰、实现可解释,并且适合离散组合优化问题。 ### 遗传算法设计 #### 1. 染色体编码 一条染色体代表一套完整排课方案。染色体由多个基因组成,每个基因对应一门课程。 ```text gene = { timeSlot: 时间段编号, room: 教室编号 } ``` 示例: ```text 人工智能导论 -> 周一 08:00-09:40 + A101 智慧教室 机器学习实验 -> 周二 14:00-15:40 + C401 机房 深度学习实践 -> 周三 08:00-09:40 + D501 GPU实验室 ``` #### 2. 适应度函数 系统将约束分为硬约束和软约束。 硬约束: - 同一教师不能在同一时间上两门课。 - 同一班级不能在同一时间上两门课。 - 同一教室不能在同一时间被两门课占用。 - 教室容量必须满足课程人数。 - 实验课需要匹配机房或 GPU 实验室。 软约束: - 尽量命中课程偏好时间段。 - 尽量减少教师同一天课程过于集中的情况。 - 尽量减少最后一个时间段排课。 - 尽量匹配课程类型与教室类型。 适应度计算示意: ```text fitness = 1200 - hardConflictPenalty - softConstraintPenalty ``` 分数越高,排课方案越好。 #### 3. 进化策略 - 选择:使用锦标赛选择 Tournament Selection。 - 交叉:使用单点交叉 Single Point Crossover。 - 变异:随机改变某门课程的时间段或教室。 - 精英保留:每一代保留适应度最高的前两个个体。 - 迭代:当前设置为种群规模 80、迭代 120 代、交叉率 0.82、变异率 0.08。 ### 页面展示内容 - 最优适应度。 - 硬冲突数量。 - 算法参数。 - 优化后的课程表。 - 适应度收敛曲线。 - 算法解释,包括编码、适应度、选择、交叉、变异和业务价值。 ## 技术栈 | 类型 | 技术 | | --- | --- | | 后端框架 | Spring Boot 2.7 | | ORM | MyBatis-Plus | | 数据库 | MySQL | | 前端 | HTML / CSS / JavaScript | | 图表 | ECharts | | 接口文档 | Knife4j / Swagger | | AI 方法 | 知识图谱、遗传算法 | ## 项目结构 ```text src/main/java/com/example/kg controller CompanyController.java 企业信息接口 GraphController.java 金融知识图谱接口 RiskController.java 风险分析接口 IndustryController.java 行业风险接口 ScheduleController.java 遗传算法排课接口 service CompanyService.java 企业服务 GraphService.java 图谱构建服务 RiskAnalysisService.java 风险画像服务 IndustryService.java 行业风险服务 GeneticScheduleService.java 遗传算法核心实现 dto GraphDTO.java 图谱返回对象 RiskResultDTO.java 风险画像返回对象 ScheduleOptimizationDTO.java 排课优化返回对象 entity / mapper MyBatis-Plus 实体与 Mapper src/main/resources static/index.html 双项目入口首页 static/home.css 首页样式 static/finance.html 企业金融风险知识图谱页面 static/finance.css 金融页面样式 static/finance.js 金融页面交互与图表 static/schedule.html 智能排课页面 static/schedule.css 排课页面样式 static/schedule.js 遗传算法排课页面交互 sql/schema.sql 数据库表结构 sql/data.sql 示例数据 ``` ## 关键代码 ### 金融风险画像接口 ```java @GetMapping("/{companyName}") public ApiResponse analyze(@PathVariable String companyName) { return ApiResponse.ok(riskAnalysisService.analyze(companyName)); } ``` ### 金融知识图谱接口 ```java @GetMapping("/{companyName}") public ApiResponse graph(@PathVariable String companyName) { return ApiResponse.ok(graphService.buildGraph(companyName)); } ``` ### 遗传算法排课接口 ```java @GetMapping("/optimize") public ApiResponse optimize() { return ApiResponse.ok(geneticScheduleService.optimize()); } ``` ### 遗传算法主循环 ```java for (int generation = 0; generation < GENERATIONS; generation++) { evaluate(population); keepElite(population); selectParentsByTournament(); crossover(); mutate(); } ``` 实际代码位置: ```text src/main/java/com/example/kg/service/GeneticScheduleService.java ``` ## 运行方式 ### 1. 准备 MySQL 项目默认连接本地 MySQL: ```text jdbc:mysql://127.0.0.1:3306/financial_risk_kg ``` 数据库会通过 `schema.sql` 和 `data.sql` 初始化。 ### 2. 配置数据库密码 为了避免把真实密码提交到仓库,项目使用环境变量读取数据库密码。 Windows PowerShell 示例: ```powershell $env:DB_USERNAME="root" $env:DB_PASSWORD="你的MySQL密码" mvn spring-boot:run ``` 如果端口没有被占用,启动后访问: ```text http://127.0.0.1:8080/ ``` ### 3. 接口文档 ```text http://127.0.0.1:8080/doc.html ``` ## 操作说明 ### 查看金融知识图谱 1. 打开首页。 2. 点击“企业金融风险知识图谱”。 3. 在企业池中选择企业。 4. 点击“生成风险画像”。 5. 查看企业档案、风险等级、关系网络、财务指标、新闻事件和风险原因。 ### 查看遗传算法排课 1. 打开首页。 2. 点击“智能排课与资源调度优化”。 3. 页面会自动运行一次遗传算法。 4. 也可以点击“运行遗传算法”重新生成方案。 5. 查看最优适应度、冲突数量、课程表和收敛曲线。 ## 项目文档 仓库中已包含两个 Word 项目文档: ```text docs/企业金融风险知识图谱系统项目文档.docx docs/智能排课与资源调度优化系统项目文档.docx ``` 金融文档适合提交知识图谱方向,排课文档适合提交机器学习 / 智能优化方向。 ## 课程提交建议 建议压缩包中包含: - 代码:完整 Spring Boot 项目。 - 文档:Word 项目文档、README.md。 - 数据:`schema.sql`、`data.sql`。 - 录屏:3 分钟以内,展示两个页面入口、金融图谱生成、遗传算法排课运行、接口文档。 项目仓库: ```text https://gitee.com/dstd181/financial-risk-kg.git ```