def random_bin(): name_len = random.randrange(5, 10) bin_name = get_random_string(7).upper() w = round(random.uniform(5000.0, 10000.0), 2) h = round(random.uniform(5000.0, 10000.0), 2) d = round(random.uniform(5000.0, 10000.0), 2) mw = round(random.uniform(50000.0, 100000.0), 2) new_bin = Bin(bin_name, w, h, d, mw) print(new_bin.string()) return new_bin
def solve(self, bins, items): for bin in bins: self.packer.add_bin( Bin(bin.name, bin.width, bin.height, bin.depth, bin.max_weight)) for item in items: self.packer.add_item( Item(item.name, item.width, item.height, item.depth, item.weight)) self.packer.pack(distribute_items=True) return self.parse_solution()
def generate_data(self): self.packer = Packer() bin_W =60#random.uniform(self.bin_W_range[0],self.bin_W_range[1]) bin_H =40#random.uniform(self.bin_H_range[0],self.bin_H_range[1]) bin_L =40#random.uniform(self.bin_L_range[0],self.bin_L_range[1]) bin_volume=bin_W*bin_H*bin_L self.packer.add_bin(Bin('FirstBin', bin_W, bin_H, bin_L , 1)) current_volume=0 index=0 while (current_volume<bin_volume): index+=1 item_W =random.randint(10,20)#random.uniform(self.item_W_range[0],self.item_W_range[1]) item_H =random.randint(10,20)#random.uniform(self.item_H_range[0],self.item_H_range[1]) item_L =random.randint(10,20)#random.uniform(self.item_L_range[0],self.item_L_range[1]) current_volume+=item_W*item_H*item_L self.packer.add_item(Item('Item '+str(index), item_W, item_H, item_L, 0)) self.packer.pack() item_list=[] for b in self.packer.bins: #draw bin origin bin_origin=o3d.geometry.TriangleMesh.create_coordinate_frame(size=10.0, origin= [0., 0., 0.] ) item_list.append(bin_origin) print(":::::::::::", b.string()) mesh_bin = self.create_mesh_box(width = b.width, height = b.height, depth = b.depth)#, dx=b.position[0], dy=b.position[1], dz=b.position[2])#position mesh_bin.compute_vertex_normals() mesh_bin.paint_uniform_color([random.uniform(0,1), random.uniform(0,1), random.uniform(0,1)]) lineset_bin=o3d.geometry.LineSet.create_from_triangle_mesh(mesh_bin) item_list.append(lineset_bin) print("FITTED ITEMS:") for item in b.items: print("====> ", item.string()) dim=item.get_dimension() mesh_box = self.create_mesh_box(width = dim[0], height = dim[1], depth = dim[2], dx=item.position[0], dy=item.position[1], dz=item.position[2])#position mesh_box.compute_vertex_normals() mesh_box.paint_uniform_color([random.uniform(0,1), random.uniform(0,1), random.uniform(0,1)]) item_list.append(mesh_box) print("UNFITTED ITEMS:") for item in b.unfitted_items: print("====> ", item.string()) print("***************************************************") print("***************************************************") o3d.visualization.draw_geometries(item_list)
def loading(Container_vehicle, final_set, n_customer, N, V, Cat, IT, IT_num, nv, locationtuples, RP, A, nmaps, dist, historical_routes, historical_routes_tuples): packer = Packer() # The maximum volum and weight that a container can carry (length, width, height, weight) # Add bins packer.add_bin( Bin(Container_vehicle[0], Container_vehicle[1], Container_vehicle[2], Container_vehicle[3], Container_vehicle[4])) # add items to corresponding containers for customeritems in final_set: for items in customeritems: packer.add_item( Item( list(items.keys())[0], list(items.values())[0][0], list(items.values())[0][1], list(items.values())[0][2], list(items.values())[0][3])) packer.pack(number_of_decimals=0) return packer
def get_bin(vehicle): ''' Constroi e retorna o objeto Bin a partir dos dados de um veículo vehicle = { name: string dimentions: { 'length': float (cm) 'height': float (cm) 'depth': float (cm) 'weight': float (kg) } } ''' bin_ = Bin( vehicle['name'], # name vehicle['dimentions']['length'], # max length vehicle['dimentions']['height'], # max height vehicle['dimentions']['depth'], # max depth vehicle['dimentions']['weight'], # max weigth ) return bin_
def generate_data_test(sefl): packer = Packer() packer.add_bin(Bin('small-envelope', 11.5, 6.125, 0.25, 10)) packer.add_bin(Bin('large-envelope', 15.0, 12.0, 0.75, 15)) packer.add_bin(Bin('small-box', 8.625, 5.375, 1.625, 70.0)) packer.add_bin(Bin('medium-box', 11.0, 8.5, 5.5, 70.0)) packer.add_bin(Bin('medium-2-box', 13.625, 11.875, 3.375, 70.0)) packer.add_bin(Bin('large-box', 12.0, 12.0, 5.5, 70.0)) packer.add_bin(Bin('large-2-box', 23.6875, 11.75, 3.0, 70.0)) packer.add_item(Item('50g [powder 1]', 3.9370, 1.9685, 1.9685, 1)) packer.add_item(Item('50g [powder 2]', 3.9370, 1.9685, 1.9685, 2)) packer.add_item(Item('50g [powder 3]', 3.9370, 1.9685, 1.9685, 3)) packer.add_item(Item('250g [powder 4]', 7.8740, 3.9370, 1.9685, 4)) packer.add_item(Item('250g [powder 5]', 7.8740, 3.9370, 1.9685, 5)) packer.add_item(Item('250g [powder 6]', 7.8740, 3.9370, 1.9685, 6)) packer.add_item(Item('250g [powder 7]', 7.8740, 3.9370, 1.9685, 7)) packer.add_item(Item('250g [powder 8]', 7.8740, 3.9370, 1.9685, 8)) packer.add_item(Item('250g [powder 9]', 7.8740, 3.9370, 1.9685, 9)) packer.pack() for b in packer.bins: print(":::::::::::", b.string()) print("FITTED ITEMS:") for item in b.items: print("====> ", item.string()) print("UNFITTED ITEMS:") for item in b.unfitted_items: print("====> ", item.string()) print("***************************************************") print("***************************************************")
from py3dbp import Item, Bin, Packer print('start') from copy import deepcopy packer = Packer() packer.add_bin(Bin('small-envelope 1', 85, 85, 85, 124)) for j in range(11): a = Item('Beauty & Personal Care {}'.format(j), 19, 19, 19, 12) packer.add_item(a) for j in range(14): a = Item('Tools & Home Improvement {}'.format(j), 6, 6, 6, 4) packer.add_item(a) for j in range(8): a = Item('Audible Books & Originals {}'.format(j), 15, 15, 15, 8) packer.add_item(a) import time now = time.time() packer_1 = deepcopy(packer) packer_2 = deepcopy(packer) packer = packer_1 packer.algorithm_1() print('start') for b in packer.bins: print(b.string()) for i in b.items:
from py3dbp import Packer, Bin, Item packer = Packer() packer.add_bin(Bin('small-envelope', 11.5, 6.125, 0.25, 10)) packer.add_bin(Bin('large-envelope', 15.0, 12.0, 0.75, 15)) packer.add_bin(Bin('small-box', 8.625, 5.375, 1.625, 70.0)) packer.add_bin(Bin('medium-box', 11.0, 8.5, 5.5, 70.0)) packer.add_bin(Bin('medium-2-box', 13.625, 11.875, 3.375, 70.0)) packer.add_bin(Bin('large-box', 12.0, 12.0, 5.5, 70.0)) packer.add_bin(Bin('large-2-box', 23.6875, 11.75, 3.0, 70.0)) packer.add_item(Item('50g [powder 1]', 3.9370, 1.9685, 1.9685, 1)) packer.add_item(Item('50g [powder 2]', 3.9370, 1.9685, 1.9685, 2)) packer.add_item(Item('50g [powder 3]', 3.9370, 1.9685, 1.9685, 3)) packer.add_item(Item('250g [powder 4]', 7.8740, 3.9370, 1.9685, 4)) packer.add_item(Item('250g [powder 5]', 7.8740, 3.9370, 1.9685, 5)) packer.add_item(Item('250g [powder 6]', 7.8740, 3.9370, 1.9685, 6)) packer.add_item(Item('250g [powder 7]', 7.8740, 3.9370, 1.9685, 7)) packer.add_item(Item('250g [powder 8]', 7.8740, 3.9370, 1.9685, 8)) packer.add_item(Item('250g [powder 9]', 7.8740, 3.9370, 1.9685, 9)) packer.pack() for b in packer.bins: print(":::::::::::", b.string()) print("FITTED ITEMS:") for item in b.items: print("====> ", item.string())
for t in range(len(trucks)): packer = Packer() #packer.add_bin(Bin('small-envelope', 11.5, 6.125, 0.25, 10)) #packer.add_bin(Bin('large-envelope', 15.0, 12.0, 0.75, 15)) #packer.add_bin(Bin('small-box', 8.625, 5.375, 1.625, 70.0)) #packer.add_bin(Bin('medium-box', 11.0, 8.5, 5.5, 70.0)) #packer.add_bin(Bin('medium-2-box', 13.625, 11.875, 3.375, 70.0)) #packer.add_bin(Bin('large-box', 240, 244, 1360, 70.0)) #packer.add_bin(Bin('large-2-box', 23.6875, 11.75, 3.0, 70.0)) truckX = trucks[t][0] truckY = trucks[t][1] truckZ = trucks[t][2] packer.add_bin(Bin('LB', truckX, truckY, truckZ, 3000.0)) for i in range(300): packer.add_item(Item('boxL' + str(i), 20, 40, 20, 1)) for i in range(10): packer.add_item(Item('boxU' + str(i), 100, 100, 100, 1)) for i in range(5): packer.add_item(Item('boxU' + str(i), 200, 100, 50, 1)) for i in range(10): packer.add_item(Item('boxU' + str(i), 40, 40, 20, 1)) #packer.pack() packer.pack(bigger_first=False)
from py3dbp import Packer, Bin, Item packer = Packer() a = Bin('large-3-box', 23.6875, 11.2, 35.0, 1000.0) #packer.add_bin(Bin('small-envelope', 11.5, 6.125, 0.25, 10)) #packer.add_bin(Bin('large-envelope', 15.0, 12.0, 0.75, 15)) #packer.add_bin(Bin('small-box', 8.625, 5.375, 1.625, 70.0)) #packer.add_bin(Bin('medium-box', 11.0, 8.5, 5.5, 70.0)) #packer.add_bin(Bin('medium-2-box', 13.625, 11.875, 3.375, 70.0)) #packer.add_bin(Bin('large-box', 12.0, 12.0, 5.5, 70.0)) #packer.add_bin(Bin('large-2-box', 23.6875, 11.75, 3.0, 70.0)) packer.add_bin(a) packer.add_item(Item('1', 3.9370, 1.9685, 11.9685, 1)) packer.pack() #packer.add_item(Item('2', 23.6875, 11.2, 30, 10)) #packer.pack() packer.add_item(Item('2', 3.9370, 1.9685, 1.9685, 2)) packer.pack() packer.add_item(Item('3', 3.9370, 1.9685, 1.9685, 3)) packer.pack() packer.add_item(Item('4', 7.8740, 3.9370, 1.9685, 4)) packer.pack() packer.add_item(Item('5', 7.8740, 3.9370, 1.9685, 5)) packer.pack() packer.add_item(Item('6', 7.8740, 3.9370, 1.9685, 6)) packer.pack() packer.add_item(Item('7', 15.5, 6, 20, 6)) packer.pack()