🚀 一款融合 UPICF 改进协同过滤与 MOPSO 多目标粒子群优化算法的开源智能饮食推荐平台
在信息爆炸的时代,推荐系统早已成为我们生活中不可或缺的一部分。但当推荐算法遇上营养科学 ,会碰撞出怎样的火花?今天,我们将深度剖析一个来自 Gitee 的优秀开源项目------Dietify 。它不仅是一个简单的菜谱应用,更是一个集用户画像建模 、个性化推荐 、精准营养规划于一体的综合性技术解决方案。
🔗 项目地址 :https://gitee.com/cqiemushuo/diet
📖 目录
🎯 项目背景与定位
Dietify 致力于解决传统饮食类 App 的两大痛点:
- 推荐同质化:所有用户看到的推荐结果千篇一律,缺乏个性化。
- 营养规划缺失:只推荐菜品,不考虑是否符合用户的个人健康需求。
Dietify 的核心理念是:让饮食推荐更懂你,让营养规划更科学。它通过三大核心特色脱颖而出:
|-------------|------------------------|
| 特色 | 说明 |
| 🤖 智能推荐 | 基于 UPICF 算法的个性化菜品推荐 |
| 🥗 营养规划 | 基于 MOPSO 算法的精准营养配餐方案 |
| 📱 多端适配 | 支持 APP、小程序、H5,一套代码多端运行 |
| 👤 用户画像 | 深度学习用户口味偏好,持续优化推荐效果 |
| ⚖️ 营养均衡 | 结合《中国居民膳食营养素参考摄入量》科学配餐 |
| 🎨 管理后台 | 基于若依框架的完整后台管理系统 |
🏗️ 技术架构全景图
Dietify 采用清晰的三层架构设计,各层职责明确,易于扩展和维护。
🖥️ 后端核心 ------ Dietify-back(基于若依框架)
技术栈:
- Spring Boot 2.5.15
- MyBatis Plus
- Spring Security + JWT
- MySQL 8.0
- Redis
- Swagger 3.0
职责:处理业务逻辑、用户认证、权限管理、数据持久化,并提供后台管理界面。
📱 移动端应用 ------ Dietify-App-master(UniApp)
技术栈:
- UniApp 3.0+
- Vue.js 2.6+
- uni-ui
- ECharts 5.4
职责:用户交互界面,一套代码编译为 APP、小程序、H5,实现跨平台一致体验。
🧠 算法微服务 ------ recommend-python(Python)
技术栈:
- Python 3.8+
- FastAPI
- Uvicorn
- 核心算法: UPICF, MOPSO, TF-IDF
职责:独立部署的智能大脑,通过 API 与 Java 后端通信,负责计算密集型的推荐与优化任务。
💡 微服务设计亮点:将算法服务独立出来,既避免了 Java 与 Python 混合开发的复杂性,又便于未来对算法模型进行独立升级和扩展。
🔬 核心算法深度解密
Dietify 的灵魂在于其两大核心算法:UPICF 和 MOPSO。
🤖 UPICF 推荐算法:让推荐真正"懂你"
传统的协同过滤算法往往只依赖用户-物品交互矩阵,存在数据稀疏和冷启动问题。Dietify 提出的 UPICF(User Profile Improved Collaborative Filtering) 算法在传统协同过滤基础上进行了三重改进:
1. 用户画像建模(基于 TF-IDF)
系统不再把用户看作一个简单的 ID,而是通过 TF-IDF 算法计算用户对不同属性(如"辣"、"清淡"、"高蛋白")的兴趣权重,构建精细的用户画像。
# 示例:用户画像向量
user_profile = {
"口味_辣": 0.85,
"食材_鸡肉": 0.62,
"营养_高蛋白": 0.91,
...
}
2. 时间权重修正(参考艾宾浩斯遗忘曲线)
用户的兴趣会随时间变化。UPICF 引入时间权重函数,参考艾宾浩斯遗忘曲线,对历史行为进行衰减,使推荐结果更能反映用户当前的口味。
def time_weight(days_ago):
# 基于遗忘曲线的时间衰减函数
return math.exp(-days_ago / 30) # 30天半衰期
3. 相似度计算优化
采用修正的余弦相似度,并结合用户影响因子,进一步提升相似用户寻找的准确性。
最终,算法为用户生成 TOP-N 个性化推荐列表,有效解决了数据稀疏和兴趣漂移问题。
🥗 MOPSO 营养规划算法:科学配餐的最优解
营养规划是一个典型的多目标优化问题:如何在满足能量、蛋白质、脂肪、碳水化合物、膳食纤维等多种营养素需求(在推荐摄入量 RNI 和可耐受最高摄入量 UL 之间)的同时,让菜品组合更符合用户口味?
Dietify 引入多目标粒子群优化算法(MOPSO) 来解决这一复杂问题。
算法流程
-
目标设定:以《中国居民膳食营养素参考摄入量》为依据,根据用户个人信息计算每日营养素需求范围(RNI~UL)。
-
食材编码与迭代:将菜品及其核心食材作为优化变量,通过粒子群算法在食材组合空间中搜索"帕累托最优解"。
-
方案生成 :从最优解集中为每个用户生成多套可选营养配餐方案,并计算每套方案的营养偏差率(≤8%),确保符合健康标准。
-
三餐分配:遵循"早餐:午餐:晚餐 = 3:4:3"的科学能量分配比例。
MOPSO 输出示例:一套营养配餐方案
nutrition_plan = {
"早餐": ["燕麦粥", "水煮蛋", "苹果"],
"午餐": ["香煎鸡胸肉", "糙米饭", "西兰花"],
"晚餐": ["清蒸鲈鱼", "杂粮馒头", "凉拌菠菜"],
"营养偏差率": 5.2%,
"总热量": 1850 kcal
}
✨ 功能模块一览
Dietify 的功能覆盖了从用户注册到饮食记录的全流程,模块划分清晰,便于学习和二次开发。
🔐 身份验证模块
- 手机号注册/登录
- 短信验证码集成
- 图形验证码防护
- 密码找回功能
🏠 首页展示模块
- 营养知识轮播图
- 快捷功能入口
- 热门菜品 TOP10
- 个性化内容推荐
🤖 智能推荐模块(核心)
- 个性化菜品推荐(UPICF)
- 冷启动处理(新用户热门推荐)
- 实时反馈与模型更新
🥗 营养规划模块(核心)
- 营养需求分析(基于用户信息)
- 智能配餐(MOPSO)
- 多方案生成与对比
- 营养偏差率计算
🔍 菜品搜索模块
- 智能模糊搜索
- 热门搜索标签
- 搜索历史管理
- 多维度筛选排序
👤 用户中心模块
- 个人信息管理
- 饮食习惯设置
- 健康目标管理
- 收藏与饮食记录
🛠️ 后台管理模块(基于若依)
- 用户管理
- 菜品/食材管理
- 营养数据管理
- 系统监控与数据统计
🚀 快速上手指南
想要亲自体验 Dietify?按照以下步骤,5 分钟即可在本地跑起来!
环境要求
|-----------|------------------|
| 组件 | 版本要求 |
| JDK | 8+ |
| MySQL | 8.0+ |
| Redis | 6.0+ |
| Node.js | 14+ |
| Maven | 3.6+ |
| Python | 3.8+ |
| HBuilderX | 可选(用于 UniApp 开发) |
1️⃣ 克隆项目
git clone https://gitee.com/cqiemushuo/diet.git
cd diet
2️⃣ 配置数据库
CREATE DATABASE dietify_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql -u root -p dietify_db < sql/diet.sql
3️⃣ 启动后端服务
cd Dietify-back
# 修改 application.yml 中的数据库和 Redis 配置
mvn clean package
java -jar diet-admin/target/diet-admin.jar
后端服务默认运行在 http://localhost:8080
4️⃣ 启动 Python 算法服务
cd recommend-python
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8001 --reload
算法服务默认运行在 http://localhost:8001
5️⃣ 运行移动端应用
cd Dietify-App-master
npm install
npm run dev:h5 # 以 H5 方式运行
访问 http://localhost:8081 即可看到移动端界面。
📌 小贴士 :记得修改 config.js 中的后端 API 地址和算法服务地址。
🌟 项目亮点与学习价值
Dietify 不仅仅是一个开源项目,更是一份宝贵的学习资源:
🎓 学习价值
- 算法与工程实践的完美结合:不仅实现了前沿的推荐和优化算法,更展示了如何将这些算法工程化,以微服务形式集成到 Spring Boot 应用中。
- 完整的业务闭环:从用户注册、画像采集、智能推荐、营养规划到饮食记录,涵盖健康类应用的完整业务流程。
- 优秀的技术选型:
-
- 后端:基于若依框架,学习快速构建后台管理系统的最佳实践。
- 算法:独立 Python 微服务,体现服务拆分思想。
- 前端:UniApp 跨端方案,一次学习多端复用。
- 详尽的文档支持:项目包含 API 接口文档、数据库设计、架构说明、算法模型说明等,学习曲线平滑。
💡 可扩展方向
- 接入更多数据源(如可穿戴设备数据)
- 引入深度学习模型(如 Wide&Deep)提升推荐效果
- 增加社交功能(如饮食分享、社区)
- 商业化包装(会员服务、定制食谱)
📝 结语与引流
Dietify 是一个充满潜力的开源项目,它将前沿的智能算法、科学的营养知识与成熟的工程架构融为一体。无论你是对推荐系统 、多目标优化算法 感兴趣的研究者,还是希望学习 Spring Boot + UniApp + Python 微服务全栈开发的工程师,Dietify 都值得你深入研究和学习。
🔗 项目地址 :https://gitee.com/cqiemushuo/diet
🌟 在线体验:
- 管理员:admin / admin123
- 普通用户:user / user123
如果这个项目对你有帮助,请给作者一个 Star 支持一下! ⭐
欢迎在评论区留言交流,如果你基于本项目做了有趣的二次开发,也欢迎分享你的经验!
版权声明:本文为原创技术博客,转载请保留出处。项目遵循 AGPL-3.0 开源协议。