基于分群迭代算法的中药颗粒配药系统药罐动态预编组方法
2021-04-04张硕瑞许东来
张硕瑞,许东来
(北京工业大学 机械工程与应用电子技术学院,北京 100124)
0 引言
我国超过50%的人治病时服用中药;患病就医时,首选中药治疗者占24%;几乎所有人在一生中都使用过中药[1]。中药能提高人体的免疫力,有利于病人恢复健康;中药毒副作用小,方剂配方复杂,病毒不容易产生耐药性;中药价格低廉,生产工艺简单,病人容易接受[2]。随着西药的广泛使用,病原体往往产生了抗药性,中药的作用逐渐凸显出来。
针对传统的中医临床用药的剂型主要是中药汤剂,但中药汤剂熬制过程比较复杂、不便于携带、味道较苦。中药界近年来在中药汤剂的基础上逐渐发展出了中药配方颗粒剂,中药配方颗粒剂性能稳定、易于吸收、安全性高[3]。几年来,我国已陆续制订了多种有关中药配方颗粒的工艺规程和质量标准,随着中药配方颗粒剂应用的普及发展,对于中药配方颗粒剂配药系统的需求也不断显现出来,而医院药房服务向电子化、网络化发展的趋势使得中药配方颗粒自动配药系统的功能有了愈加广阔的拓展空间。目前中药配方颗粒药剂已逐步形成强大的推广态势,许多中药配方颗粒生产厂商开始主动为医院中药房配备低成本的半自动中药配方颗粒配药设备,为患者提供了配方颗粒中药药剂的新型服务[4,5]。鉴于中药颗粒剂的不断发展,中药颗粒自动化药房的社会需求也愈发突出,当今社会人们对医药行业的规划化、标准化、科学化有着较高的要求,这对中药自动配药产业的发展是一种严格的挑战,也是社会发展的必然趋势[6]。由此,本文提出的基于分群迭代算法的中药颗粒配药系统药罐动态预编组方法就是对中药颗粒自动配药系统发展方向的一种探索思路。
1 问题描述及数据采集
通过对北京市多家大型医院和中西药药房的实地走访和调查了解得知,目前大部分医院及药房的配药流程均由人工完成,即通过药剂师查看药方,再步行往返药柜和出药窗口之间为患者配药,即使有小部分医院采用了半自动化配药系统,其调配系统整体水平也都不太高,没有根本摆脱人工配药方式的思维定式的影响,由于药库落地固定、药瓶或药盒由人工行走拿取、大多单通道串行配药,造成配药用时漫长、效率低下、占地偏大、出错率高等问题,患者因拿药而排长队的现象屡见不鲜。
针对人工配药或者半自动配药系统存在的问题,则提高配药系统的自动化程度是关键,但如果只是简单堆砌自动装置而不彻底摆脱人工配药方式的思维定式也将难以有所突破,必须在充分分析实际需求的基础上,借鉴其他行业的成功设计经验(如物联网、立体仓储、快递分拣、列车编组、柔性并行生产线、高速食品生产线等),并在设计理论的指导下,融合机电一体化设计技术深入分析与其发展相关联的科学问题,在此基础上开展配药系统的创新性设计,把高效、密集、并行的设计理念充分体现到构成新系统的创新设计之中,才能根本上实现配药系统的技术创新与变革。
本文算法样本数据采集自某同仁堂大药房,通过对中药药理和药方功用的学习了解与分析,完成了对药房所提供原始数据的整理与再编组,并汇总成EXCEL表格,其分为全年1~12月共12个子工作簿,每个工作簿行向量为药方名称,并以解表、泄下、清热、补益、固涩、安神、开窍、理气、理血、治风、治燥、祛湿、祛痰、消食、驱虫、涌吐、治殇共17个中药基本功用分类为分组依据,工作簿列向量为药方开药量及其组成的基本成分(例如,解表方的麻黄汤由麻黄、桂枝、杏仁、甘草调配煎制而成),由于涉及商业机密,详细药方成分用量及出药量不在本文列出讨论。
2 配药系统平台搭建
随着国内外机械与自动化技术的不断发展,目前中药颗粒配药系统方面已取得一些研究成果。例如北京工业大学的万梦等人提出了垂直旋转药柜[7]的新思路,其工作原理是药罐排架通过拉杆铰接在传动链条的链节上,排架之上放置有储药罐,整个排架通过置于侧边的平衡导轨以支撑保持水平。药柜运行时,上位机通过分析药方得到药品所在排架后发出指令发送给下位机,下位机驱动伺服电机,带动驱动轴链轮转动,排架随链条转动到指定位置后,完成垂直方向定位。上药时,药师通过手动控制指定排架转到药柜背面后从药罐上药口处进行上药。如图1所示。其由:1.支撑轴,2.钢架,3.减速箱,4.驱动轴,5.安全栅,6.平衡导轨,7.驱动轴轴承座,8.拉杆,9.链条张紧装置,10.固定排架,11.滑动排架,12.储药罐,13.链轮,14.链条,15.支撑轴轴承座构成。
图1 垂直旋转药柜结构示意图
为进一步提高出药速度,系统设置25个通道用于并行密集出药,即出药区为每个药品罐位一对一配置25个出药驱动装置,每个出药装置都具有同时独立为用户药盒出药的能力,并且每个药盒又隔离成6个小仓位,每个仓位对应1贴方剂药,有效提高了出药的密集度,使系统具有同时调配25盒颗粒方剂的极限能力。出药机构示意图如下图2所示,其由:1.伺服电机,2.齿形带,3.驱动电机,4.升降电机,5.称重传感器,6.药盒,7.储药箱,8.外围托架构成。
图2 出药机构示意图
出药机构中的盘式多通道出药也是该药柜的创新点之一,在出药过程中,药盒底部配有驱动电机进行对接,驱动药箱下药口旋转一定的角度,对药盒的六个储药格进行下药,然后盘式调剂机构旋转60°,进行第二个药盒的出药。该机构属于串行多通道的出药方式,在很大程度上提高了出药的效率。盘式出药机构三维示意图和药盒如图3和图4所示。
图3 盘式出药机构三维图
图4 药盒实物图
综上,本文以该垂直旋转药柜为基础,应用机器学习领域的分群算法和迭代算法实现了中药颗粒药罐的动态预编组,可进一步加快该装置的配药速度,提高其配药效率。
3 药罐分群算法设计
3.1 设计目标
如何实现进一步提高现有配药系统配药效率的目标,达到取药路径最优化是关键,目的是使当前任务配方对应的药品以最小的时间成本均编入进同一编组中,但前提是现有的组里存在与任务配方十分相近的药品罐组。药品储料罐的动态编组属运筹学及路径优化问题,只有系统根据既往药方迭代计算得当,所获分组才更有代表性,才能使已排在队列中的药方在现存药品分组中找到非常接近的药品罐组,才能以最少量的调换步骤快速实现动态编组,实现药盒取药路径最优。如何合理的分配药品到各组形成合理的组合搭配是该问题的核心。具体要选择适合的算法及合适的步长等参数,使各组的药品搭配自动跟随药方的变化趋势,进而为动态编组奠定有利的基础。
3.2 算法简介
本文药罐分群主要采用了k-means算法。k-means算法是一种基于划分的聚类算法,即依据相似性原则,把具有较高相似度的数据对象划分到同一类簇中,把具有较高相异度的数据对象划分到不同类簇中。
3.3 算法原理
k-means算法又被称为k均值算法。其中的k代表类簇的个数,而means代表类簇内数据对象的均值,该均值是一种对类簇中心的量度。k-means算法将距离视作数据对象间相似度判定的标准,即如果数据对象间的距离越小,则它们的相似度就越高,进而它们在同一个类簇的可能性就越大。其核心思想为:先把样本全集中随机选出的k个样本作为假定的簇中心,并由此计算出其他所有样本与该k个假定簇中心的距离,然后针对每个样本,把其划分到与之距离最近的假定簇中心所处的簇中,然后对新生成的簇计算各个簇的新簇中心。样本数据对象彼此之间的距离有很多种计算方式,如给定样本其中i,j=1,2,…,m表示样本数,n表示特征数,由于样本总体为药品集为无序属性,则样本间距的度量方法为无序属性距离度量VDM:
在机器学习领域,k-means算法可由多种软件和计算机编程语言实现,本文中药罐动态编组过程采用的k-means算法基于Python语言,利用Anaconda软件平台实现。k-means算法聚类过程如图5所示。
图5 k-means算法聚类过程
根据从中药药房得到的全年中药方剂出药量数据,可经数据处理以设计出垂直旋转药柜的药罐动态预编组策略:以药房全年出药量数据中每个方剂的成分为一个特征,方剂根据拥有的成分,形成一个特征向量;利用k-means算法,根据方剂的特征,计算不同方剂之间的相似度;根据方剂之间的相似度,将具有较相似的特征的方剂分为一个群,以此分出20个群(即20个药罐组);根据属于同个群下的所有方剂各个成分的出现频率进行排序,选择频率最高的20个成分作为代表该群的基本成分,其余低频的方剂成分和在其他群下出现但未在本群出现的方剂成分作为补充成分;当患者出示药方进行抓药时,根据药方所需要的方剂成分,转成特征向量;计算代表药方的特征向量与不同群基本成分之间的相似度,寻找最匹配的群;从匹配到的群中提取患者所需方剂的主要成分;患者所需方剂的剩余成分从补充成分中抓取。具体操作如下:
运行得到包含所有药剂成分的分群结果共20组,包含药方数据库中全部的药品种类,同时在Windows资源管理器中自动生成9个文件夹:
000 basic_data 基础训练药方数量资料表
001 added_data 系统每日新增的配药数据,用来作为迭代学习的资料数据
002 test_data 配药系统平时运行维护所用的测试资料
003 processed_data 配药过程中处理好的中间数据,用以查询配药记录
004 diagram_data 配药系统存放的中间统计图表,包含柱状图、频率分布表等
005 dictionary_data 分群的字典,算法的中间数据
006 result_data 每日配药系统运行的结果记录
007 for_reference 配药过程中缓存的有关说明和记录文件
008 run_result.html 配药系统输出的用以导出的每日配药结果文件
配药系统输出的部分药剂群成分频数直方图如图6所示。
图6 部分药剂成分频数图示例
算法的评价方式为得分制,即患者单次取药的得分=(患者药方所需成分从族群的基本成分中获取的数量)/(患者药方所需成分从族群的补充成分中获取的数量),且算法得分与迭代次数成正相关。药罐预编组抓药流程图如图7所示。
4 药罐群迭代算法设计
由于存在季节变化、流行性疾病传播等因素,患者抓药所提供的药方存在很大的动态性,故由上述分群算法计算重组出的药罐群组也应具有动态性,能跟踪患者抓药药方的规律性变化,及时地、不断地、智能地优化自身的编组序列,以更快更好地适应患者的抓药需求。
图7 药罐预编组抓药策略流程图
故本文将机器学习领域的迭代算法引入药罐动态预编组系统,使系统记录每次配药的输出结果并周期性自行训练,迭代学习和药罐分群编组抓药过程组成闭环系统。患者每次抓药完毕,系统都会将出药数据转存到既往药方数据中,再次运行分群算法,不断迭代,从而不断优化药罐编组序列,使下次出药更加精确、迅速。具体操作如下:
综上,结合了k-means分群和迭代算法的药罐动态预编组抓药完整过程如图8所示。
图8 药罐动态预编组闭环抓药过程
5 实验测定
最后在出药部分样机搭建和模拟出药实验环节中,进行了出药速度的测定。上位机的硬件平台选用工控机和触摸屏,工控机型号ARB-8900,主要配置为:Intel® Core™2 Duo处理器,支持最大4GB的内存扩展,2个标准PCI槽扩展,1个miniPCI槽扩展,1个TypeII CF扩展,2个千兆以太网口、5个串口、4个USB2.0接口、2个SATA接口,12V直流电压输入。触摸屏型号为TPC1061TX,主要配置为:额定电压24V,额定功率5.5w,内存128M,支持RS232和RS485串口通讯。下位机的硬件平台选用西门子PLC系列S7-200 smart,其CPU模块本体集成了三轴100kHz高速脉冲输出,支持PWM(脉宽调制)和PTO脉冲输出,1个以太网接口和1个RS485/232接口,通过扩展CM01信号板,其通信端口数量最多可增至3个,支持TCP/IP协议与串口通讯,串口支持Modbus-RTU和PPI协议,CPU ST30模块本身具有24路输入、12路输出共计36个数字量I/O点。由于本系统的盘式出药对于24贴药只需出4盒方剂药,假设患者所持药方具有15个药品,由秒表测得出药系统对每贴药品出药时间10次算数平均值约为5秒,药盒换位间隔时间10次算数平均值约为5秒,则由此计算4盒药只需约(15+3)×5=90秒,折合每贴药出药用时约90/24=3.75秒,与人工配药模拟测时结果每贴120秒相比,速度提高约120/3.75=32倍。实验实况如图9所示。
图9 出药样机实验图
6 结语
本文以一种全新的思维优化改进了现有的中药颗粒配药技术,将机器学习领域的分群算法及迭代算法引入到现有的中药颗粒配药系统中来,由于国内的相关研究还没有较多的技术积累,现有设备自动化程度和出药效率还不高,没有吸引到产业链的重视,也没有较大规模的商业应用,本文恰好可以丰富我国在该方面的技术积累与储备,有利于中药配药系统的自动化和高速化发展,提高配药效率,提升广大中药消费者的取药体验,未来应用前景十分广阔。