Lass es uns erklären! Das Problem beim Verpacken von Behältern besteht darin, dass versucht wird, die Anzahl der Behälter eines Artikels mit zufälliger Größe und mehrere Behälter derselben Größe zu minimieren, um sie zu verpacken.
Es gibt oneDpack. mit anaconda prompt
pip install oneDpack
Wie benutzt man Geben Sie die Größe des Behälters als Kappe und die Größe der Elemente ein, die Sie einfügen möchten. Wenn die Kappe groß ist, ist sie sehr langsam.
from oneDpack import*
cap=60
items=[2,4,5,2,7,4,7,3,7,3,7,43,8,2,4,13,6,4,3,2,4,7,9,10,40,23]
for i in packing(cap,items):
print(i)
print(sum(i))
Ausgabe
[4, 13, 43]
60
[2, 3, 4, 4, 7, 40]
60
[2, 2, 3, 3, 4, 7, 7, 7, 7, 8, 10]
60
[2, 4, 5, 6, 9, 23]
49
Es gibt ein Repackpack. mit anaconda prompt
pip install reckpack
Wie benutzt man Geben Sie die Größe der Behälter sowie die vertikale und horizontale Größe der Ladung ein.
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from collections import*
from rectpack import newPacker
from pandas import*
from numpy import*
bins = [(50,50)]
cargo = [(15,20),(30,20),(15,20),(10,20),(20,14),(15,20),(11,20),(30,10)]
packer = newPacker()
#Stellen Sie den Container ein.
for i, b in enumerate(bins):
packer.add_bin(*b, bid=i)
#Stellen Sie die Box ein.
for i, r in enumerate(cargo):
packer.add_rect(*r, rid=i)
#Massenfüllung durchführen.
packer.pack()
for i, abin in enumerate(packer,1):
for r in abin:
print(r.x,r.y,r.width, r.height)
Ausgabe
Gibt die x-Koordinate von links unten, die y-Koordinate von links unten, die Länge von links nach rechts und die Länge von unten nach oben aus.
0 0 30 20
30 0 20 15
30 15 20 15
0 30 15 20
0 20 30 10
15 30 14 20
29 30 11 20
40 30 10 20
In der Visualisierung sieht es so aus.
%matplotlib inline
def draw_result(packer):
#Bildschirmgröße
fig = plt.figure(figsize=(20,10))
for i, abin in enumerate(packer,1):
ax = fig.add_subplot(i, len(packer), 1, aspect="equal")
#Zeichne den Behälter.
ax.add_patch(Rectangle((0,0), abin.width, abin.height, fc="none", ec="g", lw=2, zorder=10))
for r in abin:
#Zeichne eine Kiste.
ax.add_patch(Rectangle((r.x, r.y), r.width, r.height, fc="lightblue", ec="k"))
cx, cy = r.x + r.width / 2, r.y + r.height / 2
ax.text(cx, cy, r.rid, ha ="center",va="center", color="k", fontsize=14)
ax.relim()
ax.autoscale_view()
draw_result(packer)
Wir suchen gerade. Bitte teilen Sie uns in den Kommentaren mit, ob Sie Empfehlungen haben.
Recommended Posts