1. 引言
随着人工智能的发展,智能配餐算法已经被广泛的应到各种配餐软件及系统中,这对非营养学专业人员来说,使用该智能软件进行配餐是非常容易的,因此,它不需要你拥有太多的营养学、医学和计算机学等多门学科的专业知识,只需简单的熟悉该软件后即可配出适合自己的饮食套餐。而在早期的配餐软件中,使用人员不仅需要手动的输入各种食材信息,还要具有专业知识能够对配餐结果进行调整,特别不适合普通用户使用。
近几年,智能配餐算法的研究取得了显著的效果,该算法不仅能够进行数值计算,还能够通过计算挖掘用户的兴趣点,从而指导用户的配餐方案。随着配餐软件的不断更新,其功能变得越来越丰富,对于只有配餐需求的用户来说,这软件便显得有些臃肿,而且大多数配餐软件需要付费才能使用,这也使得很多用户选择放弃配餐软件。对于一些专业营养师来说,由于配餐软件能够很大地提高工作效率,即使付费也不会放弃使用,而且付费不仅能够使用更多的功能还能拥有更好地服务。对于研究配餐算法人员来说,拥有一个较为完整的公开数据集会带来很多便利。
为此,本文基于对于营养学中配餐流程的研究,使用Multi-Agent建模方法构建了一个智能配餐系统模型,并使用该模型开发了一个基于C/S架构模式的智能配餐客户端。
2. 相关工作
2.1. 营养配餐
营养配餐 [1] 就是按照人们的健康状况和营养需求等特点,根据食物中各种营养素的含量,为人们打造一天或一周的饮食规划。它是一种科学的饮食配比方式 [2],是在营养学理论的基础上配比出合理均衡的餐食。在配餐过程中,不仅需要考虑到配餐食材中营养素的种类和数量,还需要保证各种营养素的比例合理,对于特殊用户,还要考虑食材的相克与宜搭等特点。
均衡饮食体现在多方面的平衡。例如,食物能量和人体生理需求及体力活动量相平衡,三大营养素供应能量比例之间要达到合理的平衡等。要完成如此复杂的目标,需要把配餐过程分为挑选食材和计算重量两个步骤。而食物交换份法 [3] 和计算法是两个计算膳食中营养素的计算方法。中国居民平衡膳食宝塔 [4] 是把平衡膳食原则转化为各类食物的数量和所占比例的图形化表示,体现了在营养上比较理想的基本食物构成。
在为用户进行配餐时,首先根据用户的饮食状况、健康状况、经济状况从所有食材中挑选合适的食材,并且根据膳食宝塔对挑选的食材进行分类处理。然后再根据用户的年龄、性别、劳动强度等信息并参考中国居民膳食能量需求量表和中国居民膳食营养素参考摄入量表得到用户当日的能量需求量和营养素摄入量,通过食物成分表得到食材中能量和营养素的含量,根据平衡膳食原理得到各种营养素之间的比例或阈值,使用计算法或食物交换份法通过复杂的计算确定食材的重量。最后,对食材重量进行调整使得配餐食材中的指标值接近标准指标值。
2.2. Multi-Agent技术
Multi-Agent技术 [5] 是研究大量相对简单的个体模型之间的复杂交互,它包括个体模型之间的协作和对信息环境的适应两个关键点,个体模型之间的协作通常有任务共享和结果共享两种方式,结果共享是指个体模型之间通过共享部分结果的形式互相协助。
在复杂的实际系统中,Multi-Agent技术在已经成功地被应用到不同的软件系统建模中,例如智能检测系统、智能家居系统等 [6] [7],同时也被应用在工作流建模 [8] 中。Multi-Agent技术的发展促进了智能化水平的不断提高,配餐系统也正从传统的系统向智能系统进化,把该技术应用到配餐系统的建模中同样非常合适。
2.3. 智能算法
在人工智能算法 [9] 中,机器学习 [10] 、深度学习等智能算法被广泛的应用在软件开发中 [11] [12],使得软件拥有更加丰富的功能,为用户带来了更好地使用体验。与传统算法相比,智能不需要设计者具备较强的数据结构以及相关经验等专业知识,借助人工智能开发工具即可进行算法设计。
在智能配餐算法研究中,文献 [13] 把数据挖掘技术和营养配餐相结合提出了一种新型的智能营养配餐系统设计方案,该方案能够智能化地选取不同种类的食物并优化结果,通过反馈机制可以自动判别配餐结果的合理性;文献 [14] 根据食材和营养素、营养素和功效的关系创建了一种食材搭配框架,并提出了一种加入用户偏好的多目标优化遗传算法来完成食材搭配的方法;文献 [15] 提出一种基于交互式进化计算的食谱智能优化方法;文献 [16] 提出一种基于注意力属性异构网络嵌入的饮食推荐模型,并把一种改进快速非支配遗传算法应用到营养配餐系统中;文献 [17] 基于多目标规划营养配餐模型对遗传算法进行改进后并设计出一种新的营养配餐模型。
3. 建立模型
智能配餐系统是一个复杂系统,它需要把系统运行环境、配餐算法和食材相关数据以及不同类型人员工作流程等资源整合在一起,并且能够使得所有人员的工作有序进行。基于配餐系统的研究,本文把每个实体对象定义为一个Agent,并把实体对象之间的关系看做Agent之间的交互,设计出一种Multi-Agent的智能配餐系统模型,如图1所示。在本模型中,一共有5个管理Agent,其主要负责Agent之间的交互工作,可以完全由程序自动完成,对于需要与用户进行交互的Agent,根据用户的工作流程手动的完成与Agent的交互工作。例如,算法开发人员Agent与该系统进行交互的方式如图2所示,当他在搭建工作环境时需要通过算法管理Agent才能与环境管理Agent进行交互;当他在构建数据集时可以通过用户管理Agent与数据管理Agent进行交互,也可以通过算法管理Agent与数据管理Agent进行交互,图2选择前者交互方式;当他发布算法时则直接与算法管理Agent进行交互。其交互时间都是由算法开发人员决定。
4. 客户端设计
基于对该智能配餐系统模型的分析,接下来将利用该系统模型为了终端使用者设计一个GUI客户端模型,并根据算法开发人员的需求设计相关数据库,以便测试和使用。
4.1. 模型设计
基于智能配餐系统模型设计的客户端模型如图3所示,用户打开客户端后与用户管理Agent进行交互并加载用户数据,然后根据用户的操作进行相应的处理。当用户进行配餐时,会与用户管理Agent进行交来会验证用户身份信息,然后与算法管理Agent、数据管理Agent和环境管理Agent进行交互来为用户进行配餐。
![](//html.hanspub.org/file/71-2570764x7_hanspub.png?20230322095454733)
Figure 1. Model diagram of the intelligent catering system
图1. 智能配餐系统模型图
![](//html.hanspub.org/file/71-2570764x8_hanspub.png?20230322095454733)
Figure 2. Agent interaction diagram of the algorithm developer
图2. 算法开发人员Agent交互图
为了能让终端用户能有更好的体验,采用C/S架构模式来设计该客户端是一个不错的选择。如图4所示,C/S架构模式通过网络设备来实现客户端与服务器的通信,使得用户可以进行远程访问,其客户端响应快的优点使得用户等待加载数据的时间更短。其中数据库服务和配餐算法是在服务器端运行,其余操作任务则由客户端完成。当用户打开客户端软件时,客户端会自动的从服务器端的数据库中获取用户和食材的相关数据,然后以图形界面的形式呈现给用户;当客户端接收到用户配餐请求后,客户端会把配餐请求发送给服务器,服务器配餐完成后再把结果返回给客户端,客户端对配餐结果进行加工处理后并呈现给用户。
![](//html.hanspub.org/file/71-2570764x10_hanspub.png?20230322095454733)
Figure 4. Diagram of the C/S architecture pattern
图4. C/S架构模式图
4.2. 功能设计
客户端的功能模块可分为界面模块、数据处理模块、数据库模块、Socket通信模块、算法管理模块等五部分,其中智能算法模块是用Python语言实现,其他模块则采用C++语言实现。
界面模块的作用是为用户展示信息,它包括展示用户信息和配餐结果两个界面。对于用户信息展示页面,需要把用户的性别、年龄、劳动强度、食材偏好和上次配餐结果等信息展示出来,方便用户查看。配餐结果页面则需要把配餐食材的名称和重量列表展示给用户,并且还需要按照膳食宝塔和三大营养素的要求计算各种指标值,以图表的形式展示给用户。
数据处理模块主要负责数据的简单加工处理,例如字符串的拼接、分割、类型转换等。数据库模块是把与数据库相关的增、删、改、查等操作通过C++语言进行封装,以便开发过程中使用。Socket通信模块的功能是在网络空上为两个独立的程序建立信息通道,以便程序之间进行数据传输。算法管理模块则负责管理配餐算法,当用户配餐时,可以选择适当的算法进行配餐。
在本系统的五个功能模块中,将基于Qt框架开发界面模块、数据库模块和Socket通信模块,数据处理模块将使用纯C++语言进行开发,由于配餐算法在服务器端运行,可采用不同的语言进行开发,本系统将使用科研人员经常使用的Python语言进行开发,为Python语言的配餐算法与本系统的融合提供了便利。
4.3. 数据库设计
本系统采用MySql数据库来存储数据信息。根据系统模型图可知,数据库分为用户信息数据库和食材信息数据库。通过对多个智能配餐算法进行研究,本文归纳总结出与配餐相关的数据,如表1和表2所示,该数据是由用户信息、食物信息、症状信息和摄入量信息共4部分数据组成,这些数据信息能够满足大多数研究人员对配餐数据集的需求。为了方便存储,本文根据这些数据的特点设计了用户信息表、食物信息表、症状信息表和摄入量信息表共4个相关联的数据表。
5. 客户端实现
5.1. 开发环境
对于客户端的实现,本文使用Linux环境进行开发,所使用的开发环境及工具如表3所示。
![](Images/Table_Tmp.jpg)
Table 1. User information table and symptom information data table
表1. 用户信息表和症状信息表
![](Images/Table_Tmp.jpg)
Table 2. Food information table and intake information table
表2. 食物信息表和摄入量信息表
![](Images/Table_Tmp.jpg)
Table 3. Table of the development environment and tools
表3. 开发环境与工具表
5.2. 建立数据集
从客户端模型中可以看出,数据集共分为用户数据和食材数据,从数据库设计来看,还需要一些配餐指标数据以及用户症状和食材特性相关的数据。对于数据集的建立,将使用Python爬虫工具在相关公开网站上进行获取。
首先,本文通过http://db.foodmate.net/yingyang/网站一共收集了1512种食材的相关数据,该数据主要为100克食材中能量、蛋白质、碳水化合物、脂肪等营养素的含量信息。然后,在香哈网上收集了462种食材的相克与宜搭数据和199条与用户症状相关的宜吃食材和忌吃食材的数据信息,香哈网的地址为https://www.xiangha.com。最后,从中国居民膳食能量需求量表和蛋白质、碳水化合物、脂肪等营养素参考摄入量表以及中国居民平衡膳食宝塔中获取配餐指标数据。
对于用户数据,由于难以获取公开的数据集,将模拟出2000个用户数据用于实验测试,模拟的数据包括用户的性别、年龄、劳动强度、食材偏好和健康状况以及上次配餐食材等。
5.3. 实现效果
客户端的用户信息界面如图5所示。使用者可以通过点击右侧的列表来选择配餐用户,同时会展示该用户的一些基本信息,选择好用户后点击菜单栏中的主界面按钮或者下方的返回配餐按钮会跳转到配餐主界面。客户端的主界面如图6所示,点击该界面中的开始配餐按钮,系统会自动的为该用户配餐,配餐结束后把配餐结果呈现给用户。在该主界面中,用户既能直观的从膳食宝塔和三大营养素的角度来分析配餐结果好坏,也能从智能算法优化的指标值来分析该算法好坏,从而指导用户选择合适的配餐算法。
![](//html.hanspub.org/file/71-2570764x11_hanspub.png?20230322095454733)
Figure 5. Figure of the page of the user information
图5. 用户信息界面
![](//html.hanspub.org/file/71-2570764x12_hanspub.png?20230322095454733)
Figure 6. Figure of the main page of the client
图6. 客户端主界面
6. 结论
智能配餐是餐饮行业智能化发展的方向,提升用户体验并满足用户的需求是一个行业蓬勃发展的动能。本文试图采用Multi-Agent建模方法来对智能配餐系统进行建模,使其能够让更多的用户使用该系统模型并加以改进。之后,本文基于设计的智能配餐系统模型设计并实现了一个配餐客户端,其食材数据集的收集与智能配餐算法的融入使得该客户端能够正常的为用户进行配餐。而且,数据集的构建也为研究营养配餐算法人员提供了一个较为完善的实验环境。