Dietify 智能饮食推荐系统全解析 —— 当协同过滤遇上营养科学,构建你的私人饮食管家

🚀 一款融合 UPICF 改进协同过滤与 MOPSO 多目标粒子群优化算法的开源智能饮食推荐平台

在信息爆炸的时代,推荐系统早已成为我们生活中不可或缺的一部分。但当推荐算法遇上营养科学 ,会碰撞出怎样的火花?今天,我们将深度剖析一个来自 Gitee 的优秀开源项目------Dietify 。它不仅是一个简单的菜谱应用,更是一个集用户画像建模个性化推荐精准营养规划于一体的综合性技术解决方案。

🔗 项目地址https://gitee.com/cqiemushuo/diet


📖 目录


🎯 项目背景与定位

Dietify 致力于解决传统饮食类 App 的两大痛点:

  1. 推荐同质化:所有用户看到的推荐结果千篇一律,缺乏个性化。
  2. 营养规划缺失:只推荐菜品,不考虑是否符合用户的个人健康需求。

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 的灵魂在于其两大核心算法:UPICFMOPSO

🤖 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) 来解决这一复杂问题。

算法流程
  1. 目标设定:以《中国居民膳食营养素参考摄入量》为依据,根据用户个人信息计算每日营养素需求范围(RNI~UL)。

  2. 食材编码与迭代:将菜品及其核心食材作为优化变量,通过粒子群算法在食材组合空间中搜索"帕累托最优解"。

  3. 方案生成 :从最优解集中为每个用户生成多套可选营养配餐方案,并计算每套方案的营养偏差率(≤8%),确保符合健康标准。

  4. 三餐分配:遵循"早餐:午餐:晚餐 = 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 不仅仅是一个开源项目,更是一份宝贵的学习资源:

🎓 学习价值

  1. 算法与工程实践的完美结合:不仅实现了前沿的推荐和优化算法,更展示了如何将这些算法工程化,以微服务形式集成到 Spring Boot 应用中。
  2. 完整的业务闭环:从用户注册、画像采集、智能推荐、营养规划到饮食记录,涵盖健康类应用的完整业务流程。
  3. 优秀的技术选型
    • 后端:基于若依框架,学习快速构建后台管理系统的最佳实践。
    • 算法:独立 Python 微服务,体现服务拆分思想。
    • 前端:UniApp 跨端方案,一次学习多端复用。
  1. 详尽的文档支持:项目包含 API 接口文档、数据库设计、架构说明、算法模型说明等,学习曲线平滑。

💡 可扩展方向

  • 接入更多数据源(如可穿戴设备数据)
  • 引入深度学习模型(如 Wide&Deep)提升推荐效果
  • 增加社交功能(如饮食分享、社区)
  • 商业化包装(会员服务、定制食谱)

📝 结语与引流

Dietify 是一个充满潜力的开源项目,它将前沿的智能算法、科学的营养知识与成熟的工程架构融为一体。无论你是对推荐系统多目标优化算法 感兴趣的研究者,还是希望学习 Spring Boot + UniApp + Python 微服务全栈开发的工程师,Dietify 都值得你深入研究和学习。

🔗 项目地址https://gitee.com/cqiemushuo/diet

🌟 在线体验

  • 管理员:admin / admin123
  • 普通用户:user / user123

如果这个项目对你有帮助,请给作者一个 Star 支持一下!

欢迎在评论区留言交流,如果你基于本项目做了有趣的二次开发,也欢迎分享你的经验!


版权声明:本文为原创技术博客,转载请保留出处。项目遵循 AGPL-3.0 开源协议。

相关推荐
WZTTMoon2 小时前
Spring Boot 启动报错:OpenFeign 隐性循环依赖,排查了整整一下午
java·spring boot·后端·spring cloud·feign
欣然~2 小时前
基于Python的自动化数据采集与语音播报系统设计与实现
python
小付爱coding2 小时前
跟着官网学LangChain【第02章:提示词和消息】
windows·python·langchain
菜鸡儿齐5 小时前
Unsafe方法学习
java·python·学习
老师好,我是刘同学8 小时前
Python执行命令并保存输出到文件
python
啵啵鱼爱吃小猫咪10 小时前
机械臂阻抗控制github项目-mujoco仿真
开发语言·人工智能·python·机器人
MaximusCoder10 小时前
等保测评命令——Centos Linux
linux·运维·经验分享·python·安全·centos
yunyun3212310 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
m0_6625779710 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python