python如何利用算法解决业务上的【分单问题】
分单是很多企业日常工作中非常典型的一项内容,它非常复杂,但同时又极为重要,如何合理的分单是企业管理中一个很重要的课题。
之所以说分单很复杂,是因为影响单据该分给谁,分多少量这个事儿本身就有太多的影响因子;一旦管理者在分单的公平性上出现大的问题,厚此薄彼了,往大了讲,员工的做事积极性有可能都会被挫伤。
简单列举几类:
1、员工的技能矩阵;
2、员工的出勤数据;
3、各种类型单据的SPT(标准作业时间);
4、员工手中已有的单据量;
5、不同类型单据量的分布情况;
6、某种类型的单据不够分时,该优先分给谁;
7、每次单据的来件数量、来件的类型高度不确定;
8、当某种类型给某些员工少分了一些数量,如何在另外一些类型上尽量多分他一些,使得每个人分到的总量尽可能均衡;
9、单据的黑白名单策略(某些类型,某些申请人提的优先不分给哪些人,优先分给哪些人);
10、某个单据被被驳回过,如何在第二次分单时优先分给当初的处理人;
11、某些人可以同时处理两个环节,如何保证他不处理同一个单据的前后两个环节,避免内控管理失效;
12、多个领单小组共享某些流程端口,如何区分单据优先分给哪个组;
13、如何保证每个人能处理能力范围内的尽可能多的类型的单据,以确保员工的能力得到充分锻炼;
……
您瞅瞅,我觉没撒谎,这可一点都不简单。偏偏在小爬我的实际业务中,就被要求解决这么头疼的问题。但是你以为小爬我这就怕了?NO NO NO,需求越有挑战,小爬越高兴。
先说说如何解决每个人分配的单据量不均衡的问题,其中一种思路:我们把总单据量基于业务类型分成N组,然后基于每个员工能处理的业务类型和当天的出勤情况,找到能处理每种业务类型的人员列表,假设是M个人。我们可以利用算法,每次分单前将人员列表的顺序随机打乱,那么每次分单时,每个人都有一定概率出现在队列末尾,也就是单据不够分给他的情况,最终只要我们把N组类型的单据都分完时,大家的概率总体上是均衡的,不过概率的事儿没人能说它绝对公平。
下面这段代码,就可以完美地打乱某个列表的顺序,让它彻底重排:
import random
def shuffle_list(lst):
'''将列表的顺序随机打乱,得到一个新的列表'''
new_lst = lst[:] # 复制原列表,否则会影响原列表
random.shuffle(new_lst) # 打乱顺序
return new_lst
可是它依然不是绝对公平的,没法保证每个人分到的单据量尽可能一样多,因为它只是在模拟扔色子,寄希望于概率均匀分布。如何保证大家的数量相对公平呢?
我们不妨利用python的字典,存储每个人(key)已经分到的单据号的列表合集,把列表作为字典的Value。当我们在对某种类型的N个单据分给M个人时,就好比是发扑克牌,但是又不能简单去按顺序发牌,而是看谁手上的牌少,就优先把剩余的牌发给它,这样手上牌少的人,总是能被照顾,直到最后大家手上发到的牌数接近。如何知道这个特殊的字典中,到底哪个Key的牌最少(列表的长度最短)呢?您不妨参考下下面的算法。
def get_Dic_shortest_key(keyList,my_dict):
'''根据输入的字典,字典的键对应的值都是一个列表,如果哪个键对应的列表的长度最短,则返回该键'''
shortest_key = None
shortest_length = float('inf')
for key, value in my_dict.items():
if key in keyList and len(value) < shortest_length:
shortest_key = key
shortest_length = len(value)
# Return the key with the shortest list value
return shortest_key
有了上面的算法,我们也就解决了每次的发牌优先分给谁的问题,怎么把牌发完到对的人手上,就不是个问题了,代码示例如下:
def seperate_list(lst,personList, personFormNumber_dic):
"""
将一个列表拆分成n个子列表组成的二维列表,要求每个子列表元素的长度尽可能接近
:param lst: 待分配的单据号列表
:param personList: 可以参与此次分单的人员列表
:param personFormNumber_dic:字典结构,每个人key手上已有的单据列表value
:return: personFormNumber_dic 返回这个字典(每个人手上的单据清单)
"""
m = len(lst)
for i in range(m): # 从后往前遍历列表
targetPerson=""
targetPerson=get_Dic_shortest_key(personList,personFormNumber_dic)
for random_element in lst:
personFormNumber_dic[targetPerson].append(random_element)
lst.remove(random_element)
break
return personFormNumber_dic
希望这些对现实业务的思考和代码实现,能对您的工作有所启发。不管咋说,活到老,学到老。拒绝躺平,一起卷起来!
快来关注本公众号 获取更多爬虫、数据分析的知识!
python如何利用算法解决业务上的【分单问题】的更多相关文章
- 解决resteasy上传表单文件名乱码
Dubbo在2.6版本后合并了dubbox的resteasy代码后,可以支持rest风格的接口发布,但是在使用form表单上传文件的时候,获取的文件名称是乱码. 下面通过对源码分析一下原因,并提供一种 ...
- JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入
1 学习计划 1.业务受理需求分析 n 业务通知单 n 工单 n 工作单 2.创建业务受理环节的数据表 n 业务通知单 n 工单 n 工作单 3.实现业务受理自动分单 n 在CRM服务端扩展方法根据手 ...
- 完整数据分析流程:Python中的Pandas如何解决业务问题
开篇 作为万金油式的胶水语言,Python几乎无所不能,在数据科学领域的作用更是不可取代.数据分析硬实力中,Python是一个非常值得投入学习的工具. 这其中,数据分析师用得最多的模块非Pandas莫 ...
- 如何解决Python脚本在Linux和Windows上的格式问题
python是一种对缩进有严格要求的语言, Python脚本可以使用非常多的工具进行编写,笔者在Linux系统使用JEdit进行Python脚本编写,由于在Linux编写脚本比较痛苦,比如想一眼看出相 ...
- xsank的快餐 » Python simhash算法解决字符串相似问题
xsank的快餐 » Python simhash算法解决字符串相似问题 Python simhash算法解决字符串相似问题
- Python开发——利用正则表达式实现计算器算法
Python开发--利用正则表达式实现计算器算法 (1)不使用eval()等系统自带的计算方法 (2)实现四则混合运算.括号优先级解析 思路: 1.字符串预处理,将所有空格去除 2.判断是否存在括号运 ...
- SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题——Jason niu
%SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题——Jason niu X = [16.4700 96.1000 16.4700 94.4400 20.0900 92.5400 2 ...
- 史上最详细的C语言和Python的插入排序算法
史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- 02_利用numpy解决线性回归问题
02_利用numpy解决线性回归问题 目录 一.引言 二.线性回归简单介绍 2.1 线性回归三要素 2.2 损失函数 2.3 梯度下降 三.解决线性回归问题的五个步骤 四.利用Numpy实战解决线性回 ...
随机推荐
- CentOS7环境下数据库运维---主从复制、读写分离
1.理解MySQL主从复制原理 主服务器开启binlog日志,从库生成log dump线程,将binlog日志传给从库I/O线程,从库生成俩个线程,一个是I/O线程,一个是SQL线程,I/O线程去请主 ...
- markdown---->Typora搭配uPic
记录一下在mac上面使用Typora和uPic来发表博客的过程,图床用的是阿里Oss.We all, whether we know it or not, are fighting to make t ...
- C++ 测试框架 GoogleTest 初学者入门篇 甲
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/BS_u9A4EY50y4vDDuxkCAQ 开发者虽然主要负责工程 ...
- Edge解决默认Bing搜索跳转到国内版的问题
近期BingGPT申请通过以后,每次用PC端Edge去跳转的时候不管是否念Proxy咒都会进入国内版本Bing,排查得到默认Bing参数如下 因此,在edge://settings/searchEng ...
- 【原创】Ubuntu Pro 中的RealTime linux(Real-time Ubuntu/PREEMPT-RT/ubuntu官方PREEMPT-RT)
[原创]Ubuntu Pro 订阅中的realtime linux(Real-time Ubuntu/PREEMPT-RT) 目录 [原创]Ubuntu Pro 订阅中的realtime linux( ...
- c++实战开发程序
非常感谢您的进一步提问,以下是一个对于实战开发小程序的更具体的建议: 第1周实战开发小程序建议:写一个简单的计算器程序,要求包含加.减.乘.除四种基本运算,并进行错误处理,例如输入了非法字符或者除数为 ...
- Gartner最新报告,分析超大规模边缘解决方案
当下,酝酿能量的超级边缘. 最近,我们在谈视频化狂飙.谈AIGC颠覆.谈算力动能不足,很少谈及边缘.但"边缘"恰恰与这一切相关,且越发密不可分,它是未来技术发展的极大影响因子. & ...
- servlet 没有实例化可以直接调用非静态方法??
今天练习servlet时,居然发现没有实例化可以直接调用非静态方法.看了好长时间发现:省去了this关键字.记录一下. public class Servlet2 extends GenericSer ...
- PyInstaller打包的文件闪退
问题描述:使用PyInstaller打包的pycharm写的python程序,打包好后从windows上打开一直闪退 一.双击exe文件闪退,从cmd命令行中与加载程序,可以看到具体的报错 D:\di ...
- 【机器学习入门与实践】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)
[机器学习入门与实践]数据挖掘-二手车价格交易预测(含EDA探索.特征工程.特征优化.模型融合等) note:项目链接以及码源见文末 1.赛题简介 了解赛题 赛题概况 数据概况 预测指标 分析赛题 数 ...