Python数据分析之锁具装箱问题

简介: 问题重述某厂生产一种弹子锁,其槽数高度可以用1到6中取5个来表示。其限制条件是:至少在5个中有3个不同的数;相邻槽的高度相差不能为5。在实际试验中,发现若二锁对应5个槽的高度中有4个相同,另一个差1则可能互开,否则,不可能互开。

问题重述

某厂生产一种弹子锁,其槽数高度可以用1到6中取5个来表示。其限制条件是:至少在5个中有3个不同的数;相邻槽的高度相差不能为5。在实际试验中,发现若二锁对应5个槽的高度中有4个相同,另一个差1则可能互开,否则,不可能互开。如果60个锁具装一箱,求一批锁的多少及装箱数,并要求提出一种方案,使团体顾客减少或不再抱怨,并对于所提出的方案,求出其最大无互开的箱数,并衡量原来随机装箱时,顾客抱怨互开的程度。

问题分析

  1. 锁具个数
    首先把锁具及装箱问题抽象成数学概念,以5个数字的一个符合条件的组合或组成一个列表数据结构来代表一个相应的锁具,例如[1,2,3,4,5]代表一个锁具。利用排除法的思想,通过Python语言,把问题分为所有可能的组合A6^5,存储到列表结构中;再通过集合的概念,剔除列表中相同槽高,只保留一个,如果个数小于3,则不符合要求,进行剔除;最后,剔除减去相邻差为5的列表。
  2. 装箱方案设计
    归类法:把一批锁具分成两类或按其指数之和分为8~27共20类,其中组合,[1,1,1,2,3]为最小,其数字和为8;[6,6,6,5,4]为最大,其数字和为27;所以共有(27-8+1)=20个数组来表示,在装箱时可依:
    d9→d11→…→d27→d 8→d10→d12→… →d27

    d8→d10→…→d26→d9→ …→d26
    二者类似,其中di表示5槽数字和为i的所有组合。
    事实上,对于一数组来说,其各位数之和相同,所以其本身显然不可能有互开现象。对于其它情况可用下法来鉴别:利用Python中的Numpy第三方库进行列表向量化运算,两个列表相减,再进行求和,绝对值为1则二者可能互开;否则不可能互开,记数字和为i的数组di,另一组数据为d_i^',则有以下结论:
    d_i^'∩d_((i+1))≠∅
    d_i^'∩d_((i))=∅
    d_i^'∩d_((i+j))=∅
    可知:
    d_26^'∩d_27≠∅
    d_8^'∩d_27≠∅
    而对数字和全为偶或全为奇的数组间一定不互开,所以以上设计符合要求。
  3. 顾客抱怨定量度量
    对于原来随机装箱时,求其顾客的不满意程度。定量表示时,我们认为可用下列量来表示:
    A:一定量中出现的互开锁具数;
    B:一定量中可能互开的概率;
    C:用计算机模拟仿真随机装箱过程,随机抽点进行计算。

建模与求解

1.锁具个数
利用排除法的思想,通过Python语言,逐步剔除不符合要求的锁具,可得有5880个锁具,每60个一箱,可装98箱,代码如下:

lists = [1,2,3,4,5,6]
list_alls = []
for list_1 in lists:
    for list_2 in lists:
        for list_3 in lists:
            for list_4 in lists:
                for list_5 in lists:
                    list_alls.append([list_1,list_2,list_3,list_4,list_5])
print(len(list_alls))
list_deletes_1 = []
for list_all in list_alls:
    counts = list(set(list_all))
    if len(counts) <= 2:
        pass
    else:
        list_deletes_1.append(list_all)
print(len(list_deletes_1))
list_deletes_2 = []
for list_all_1 in list_deletes_1:
    if abs(list_all_1[0] - list_all_1[1]) == 5:
        pass
    elif abs(list_all_1[1] - list_all_1[2]) == 5:
        pass
    elif abs(list_all_1[2] - list_all_1[3]) == 5:
        pass
    elif abs(list_all_1[3] - list_all_1[4]) == 5:
        pass
    else:
        list_deletes_2.append(list_all_1)
print(len(list_deletes_2))

2.装箱方案设计
首先证明d9→d11→…→d27→d 8→d10→d12→… →d27无互开现象。设其中某列表为[a,b,c,d,e](a+b+c+d+e=i为奇数),则(a±1)bcde,a(b±1)cde,ab(c±1)de,abc(d±1)e,abcd(e±1),当筛选其含相邻差为5或有位为0的不合条件项外,则可知
a+b+c+d+e±1=i(±1)
则其为偶数,与d9→d27中任一元素(组合)都不可能相同,对于d8→d10→…→d26类似。
由此可证明49箱为最大无互开箱数,也就是奇偶分箱方案。
3.顾客抱怨定量度量
利用Python计算所有可能互开对为22778,平均互开系数α=0.001317,对于一箱互开个数约2.33,二箱互开个数约9.42,代码如下:

import random
i = 0
xiangjian_list = []
hukai_counts = []
list_randoms = random.sample(list_deletes_2,60)
for list_randoms_1 in list_randoms:
    i = i+1
    for list_randoms_2 in list_randoms[i:]:
        list_1 = [list_randoms_1[0] - list_randoms_2[0],list_randoms_1[1] - list_randoms_2[1],list_randoms_1[2] - list_randoms_2[2],list_randoms_1[3] - list_randoms_2[3],list_randoms_1[4] - list_randoms_2[4]]
        xiangjian_list.append(list_1)
for list_2 in xiangjian_list:
    if (list_2.count(0) == 4):
        if (list_2.count(1) == 1 | list_2.count(1) == 1):
            hukai_counts.append('a')
print(len(hukai_counts))
相关文章
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
73 3
|
2月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
94 0
|
2月前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
108 4
数据分析的 10 个最佳 Python 库
|
2月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
|
2月前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
2月前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。
|
2月前
|
数据采集 数据可视化 数据挖掘
深入浅出:使用Python进行数据分析的基础教程
【10月更文挑战第41天】本文旨在为初学者提供一个关于如何使用Python语言进行数据分析的入门指南。我们将通过实际案例,了解数据处理的基本步骤,包括数据的导入、清洗、处理、分析和可视化。文章将用浅显易懂的语言,带领读者一步步掌握数据分析师的基本功,并在文末附上完整的代码示例供参考和实践。
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
52 2