python如何利用算法解决业务上的【分单问题】

这篇具有很好参考价值的文章主要介绍了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如何利用算法解决业务上的【分单问题】文章来源地址https://www.toymoban.com/news/detail-457826.html

到了这里,关于python如何利用算法解决业务上的【分单问题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.cnblogs.com/new-june/p/17429797.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何利用Socks5代理IP提升网络安全与跨境电商业务

    在今天的数字时代,网络安全对于个人和企业来说都至关重要。随着跨境电商和在线游戏等业务的不断发展,保护网络安全变得尤为重要。Socks5代理IP是一项强大的工具,可以帮助您实现更高水平的网络安全,同时促进跨境电商和游戏领域的增长。本文将探讨Socks5代理IP的作用

    2024年02月09日
    浏览(12)
  • 利用Python解决利率相关计算问题(利率计算器):本金翻倍,定期取款,多重利率,通货膨胀等问题

    目录 一.原理 二.实际问题举例 多利率问题  存款与本金翻倍  存款与定期取款   存款与通货膨胀 利用python中的for循环或者while循环来计算利率或者解决复利问题。 其中涉及到不同场景下的不同利率问题,利用不同的公式与方法解决。 1.问题描述:小A的爸爸有5万元积蓄存入

    2024年02月06日
    浏览(9)
  • 遗传算法解决tsp问题(基于python)

    目录 1.遗传算法简要介绍 2.tsp问题简要介绍 3.遗传算法解决tsp问题的几个特殊点 4.源码         简单来说,遗传算法是用于解决最优化问题的一种搜索算法。其核心基于自然界种群进化的规律,即初始种群进行交配,在基因层面上,其中会发生交叉互换、基因突变等变异

    2023年04月12日
    浏览(12)
  • python使用贪心算法解决作业调度问题

    对于作业调度问题,其实至今都还不能找到一个最优的解决方案,对与如何将任务和机器进行一个合理安排和分配,让其能够在最短时间内将所有任务全部完成,和计算机操作系统的任务调度过程相类似。 这里主要是给定n个作业和m台相同的机器,使用这些机器来对给定的作

    2024年01月20日
    浏览(7)
  • 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题)  蚁群算法解决旅行商问题(最优路径问题)

    2024年02月09日
    浏览(11)
  • 解决ssh远程登录不上的问题

    2024年02月06日
    浏览(7)
  • 数据分析师如何用SQL解决业务问题?

    本文来自问答。 提问:数据分析人员需要掌握sql到什么程度? 请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?会增删改查就可以了吗?还是说关于开发的内容也要会?不同阶段会有不同的要求吗? 正文: 作为专注数据分析结论/项目在业务落地以实现增长的分

    2024年02月14日
    浏览(12)
  • GPT帮我快速解决工作上的问题案例

    Python入门容易,但精通不易。自从跟着郭老师学Python后,工作中也想偷点懒,之前排班表的问题一直困扰着我,福音来了,现在随着郭老师的小蜜蜂AI出来,说干就干。马上来到郭老师为我们提供的AI网站:http://zglg.work/index.html,选择AI智能问答,输入我想问的问题: 在这个修

    2024年01月23日
    浏览(5)
  • 如何解决python安装mysqlclient失败问题

    在使用Django等框架来操作MySQL时,实际上底层还是通过Python来操作的,首先需要安装一个驱动程序,在Python3中,驱动程序有多种选择,比如有pymysql以及mysqlclient等。使用pip命令安装mysqlclient失败应如何解决?   机器同时安装了python2和python3版本,以安装的Python 3.7.0 (32 bit)为例

    2024年03月27日
    浏览(14)
  • 解决树莓派4B连接wifi连接不上的问题

    打开树莓派,利用触摸屏和键盘(没有触摸屏,请使用鼠标)关闭树莓派的热点模式,连接wifi。 连接时会遇到正确输入密码连接,但是连接不上的情况。 解决办法如下: 方法一 : 当烧录好树莓派的系统,请将读卡器拔下再插上识别,然后打开system-boot盘添加ssh文件(注意

    2024年02月06日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包