問題重述
某廠生產(chǎn)一種彈子鎖二鳄,其槽數(shù)高度可以用1到6中取5個來表示蛇摸。其限制條件是:至少在5個中有3個不同的數(shù);相鄰槽的高度相差不能為5垄琐。在實際試驗中,發(fā)現(xiàn)若二鎖對應5個槽的高度中有4個相同经柴,另一個差1則可能互開此虑,否則,不可能互開口锭。如果60個鎖具裝一箱朦前,求一批鎖的多少及裝箱數(shù),并要求提出一種方案鹃操,使團體顧客減少或不再抱怨韭寸,并對于所提出的方案,求出其最大無互開的箱數(shù)荆隘,并衡量原來隨機裝箱時恩伺,顧客抱怨互開的程度。
問題分析
- 鎖具個數(shù)
首先把鎖具及裝箱問題抽象成數(shù)學概念椰拒,以5個數(shù)字的一個符合條件的組合或組成一個列表數(shù)據(jù)結構來代表一個相應的鎖具晶渠,例如[1,2,3,4,5]代表一個鎖具。利用排除法的思想燃观,通過Python語言褒脯,把問題分為所有可能的組合A6^5,存儲到列表結構中缆毁;再通過集合的概念番川,剔除列表中相同槽高,只保留一個脊框,如果個數(shù)小于3颁督,則不符合要求,進行剔除浇雹;最后沉御,剔除減去相鄰差為5的列表。 - 裝箱方案設計
歸類法:把一批鎖具分成兩類或按其指數(shù)之和分為8~27共20類昭灵,其中組合,[1,1,1,2,3]為最小吠裆,其數(shù)字和為8聂儒;[6,6,6,5,4]為最大,其數(shù)字和為27硫痰;所以共有(27-8+1)=20個數(shù)組來表示,在裝箱時可依:
d9→d11→…→d27→d 8→d10→d12→… →d27
或
d8→d10→…→d26→d9→ …→d26
二者類似,其中di表示5槽數(shù)字和為i的所有組合窜护。
事實上效斑,對于一數(shù)組來說,其各位數(shù)之和相同柱徙,所以其本身顯然不可能有互開現(xiàn)象缓屠。對于其它情況可用下法來鑒別:利用Python中的Numpy第三方庫進行列表向量化運算,兩個列表相減护侮,再進行求和敌完,絕對值為1則二者可能互開;否則不可能互開羊初,記數(shù)字和為i的數(shù)組di滨溉,另一組數(shù)據(jù)為d_i^',則有以下結論:
d_i^'∩d_((i+1))≠?
d_i^'∩d_((i))=?
d_i^'∩d_((i+j))=?
可知:
d_26^'∩d_27≠?
d_8^'∩d_27≠?
而對數(shù)字和全為偶或全為奇的數(shù)組間一定不互開长赞,所以以上設計符合要求晦攒。 - 顧客抱怨定量度量
對于原來隨機裝箱時,求其顧客的不滿意程度得哆。定量表示時脯颜,我們認為可用下列量來表示:
A:一定量中出現(xiàn)的互開鎖具數(shù);
B:一定量中可能互開的概率贩据;
C:用計算機模擬仿真隨機裝箱過程栋操,隨機抽點進行計算。
建模與求解
1.鎖具個數(shù)
利用排除法的思想饱亮,通過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無互開現(xiàn)象戈锻。設其中某列表為[a,b,c,d,e](a+b+c+d+e=i為奇數(shù))歼跟,則(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)
則其為偶數(shù)她倘,與d9→d27中任一元素(組合)都不可能相同,對于d8→d10→…→d26類似作箍。
由此可證明49箱為最大無互開箱數(shù)硬梁,也就是奇偶分箱方案。
3.顧客抱怨定量度量
利用Python計算所有可能互開對為22778胞得,平均互開系數(shù)α=0.001317,對于一箱互開個數(shù)約2.33荧止,二箱互開個數(shù)約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))