def main(): # Usage if len(sys.argv) < 4: print "usage:", sys.argv[0], "order.xml packlist.xml scoring.xml" exit(1) # Create a new dictionary from the order orderline = xmlfiletodict(sys.argv[1]) # Get pallet sub-dictionary from order dictionary pallet = get_pallet(orderline) # Get articles sub-dictionary from the order dictionary articles = get_articles(orderline) # Create a dictionary that separates each height into a separate bin aStack = sortLarge(articles) layers = get_layers(aStack, pallet) for layer in layers: print '\n' for article in layer: print '%.2f - %d - %dx%d' % ( density(article), article['Article']['Height'], article['Article']['Length'], article['Article']['Width']) score_max = [0] result_max = [None] evaluate_layers(layers, score_max, pallet, result_max) print score_max[0] lock = open("score_max.lock", "w") fcntl.lockf(lock, fcntl.LOCK_EX) if os.path.isfile("score_max"): with open("score_max", "r") as f: score_max_f = float(f.read()) else: score_max_f = 0.0 if score_max[0] > score_max_f: with open(sys.argv[2], "w+") as f: f.write(result_max[0]) with open("score_max", "w+") as f: f.write(str(score_max[0])) lock.close()
def main(): # Usage if len(sys.argv) < 4: print "usage:", sys.argv[0], "order.xml packlist.xml scoring.xml" exit(1) # Create a new dictionary from the order orderline = xmlfiletodict(sys.argv[1]) # Get pallet sub-dictionary from order dictionary pallet = get_pallet(orderline) # Get articles sub-dictionary from the order dictionary articles = get_articles(orderline) # Create a dictionary that separates each height into a separate bin aStack = sortLarge(articles) layers = get_layers(aStack, pallet) for layer in layers: print '\n' for article in layer: print '%.2f - %d - %dx%d'%(density(article), article['Article']['Height'], article['Article']['Length'], article['Article']['Width']) score_max = [0] result_max = [None] evaluate_layers(layers, score_max, pallet, result_max) print score_max[0] lock = open("score_max.lock", "w") fcntl.lockf(lock, fcntl.LOCK_EX) if os.path.isfile("score_max"): with open("score_max", "r") as f: score_max_f = float(f.read()) else: score_max_f = 0.0 if score_max[0] > score_max_f: with open(sys.argv[2], "w+") as f: f.write(result_max[0]) with open("score_max", "w+") as f: f.write(str(score_max[0])) lock.close()
def main(): if len(sys.argv) != 2: print "usage:", sys.argv[0], "order.xml" exit(1) orderline = xmlfiletodict(sys.argv[1]) pallet = get_pallet(orderline) articles = get_articles(orderline) bins = dict() for article in articles: abin = bins.get(article['Article']['Height']) if abin: abin.append(article) else: bins[article['Article']['Height']] = [article] if os.environ.get("rot_article"): try_rot_article = bool(int(os.environ["rot_article"])) else: try_rot_article = True if os.environ.get("rot_pallet"): try_rot_pallet = bool(int(os.environ["rot_pallet"])) else: try_rot_pallet = True if os.environ.get("rot_article_default"): rot_article_default = bool(int(os.environ["rot_article_default"])) else: rot_article_default = False if os.environ.get("rot_pallet_default"): rot_pallet_default = bool(int(os.environ["rot_pallet_default"])) else: rot_pallet_default = False if os.environ.get("iterations"): max_iter = int(os.environ["iterations"]) else: max_iter = -1 if os.environ.get("randomize"): try_random = bool(int(os.environ["randomize"])) else: try_random = False if try_rot_article and try_rot_pallet: if try_random: product_it = starmap(random.randint, itertools.repeat((0, 3))) else: product_it = product_varlength(4) elif try_rot_article or try_rot_pallet: if try_random: product_it = starmap(random.randint, itertools.repeat((0, 1))) else: product_it = product_varlength(2) i = 0 while True: rests = list() layers = list() try: if try_rot_article and try_rot_pallet: rot_article, rot_pallet = get_bitmask(product_it.send(True), 2) elif try_rot_article and not try_rot_pallet: rot_article = get_bitmask(product_it.send(True), 1)[0] rot_pallet = rot_pallet_default elif not try_rot_article and try_rot_pallet: rot_article = rot_article_default rot_pallet = get_bitmask(product_it.send(True), 1)[0] else: rot_article = rot_article_default rot_pallet = rot_pallet_default except TypeError: if try_rot_article and try_rot_pallet: rot_article, rot_pallet = get_bitmask(product_it.next(), 2) elif try_rot_article and not try_rot_pallet: rot_article = get_bitmask(product_it.next(), 1)[0] rot_pallet = rot_pallet_default elif not try_rot_article and try_rot_pallet: rot_article = rot_article_default rot_pallet = get_bitmask(product_it.next(), 1)[0] else: rot_article = rot_article_default rot_pallet = rot_pallet_default except StopIteration: break # generator empty it = get_layers(bins, pallet, rot_article, rot_pallet) layer, rest = it.next() if layer: layers.append(layer) if rest: rests.append(rest) while True: try: if try_rot_article and try_rot_pallet: layer, rest = it.send( get_bitmask(product_it.send(False), 2)) elif try_rot_article and not try_rot_pallet: layer, rest = it.send( (get_bitmask(product_it.send(False), 1)[0], rot_pallet_default)) elif not try_rot_article and try_rot_pallet: layer, rest = it.send((rot_article_default, get_bitmask(product_it.send(False), 1)[0])) else: layer, rest = it.send( (rot_article_default, rot_pallet_default)) if layer: layers.append(layer) if rest: rests.append(rest) except StopIteration: break print b2a_base64(zlib.compress(cPickle.dumps( (layers, rests, pallet)))), if not try_rot_article and not try_rot_pallet: break # only one iteration if both are deactivated i += 1 if max_iter != -1 and i >= max_iter: break
def main(): if len(sys.argv) != 2: print "usage:", sys.argv[0], "order.xml" exit(1) orderline = xmlfiletodict(sys.argv[1]) pallet = get_pallet(orderline) articles = get_articles(orderline) bins = dict() for article in articles: abin = bins.get(article['Article']['Height']) if abin: abin.append(article) else: bins[article['Article']['Height']] = [article] if os.environ.get("rot_article"): try_rot_article = bool(int(os.environ["rot_article"])) else: try_rot_article = True if os.environ.get("rot_pallet"): try_rot_pallet = bool(int(os.environ["rot_pallet"])) else: try_rot_pallet = True if os.environ.get("rot_article_default"): rot_article_default = bool(int(os.environ["rot_article_default"])) else: rot_article_default = False if os.environ.get("rot_pallet_default"): rot_pallet_default = bool(int(os.environ["rot_pallet_default"])) else: rot_pallet_default = False if os.environ.get("iterations"): max_iter = int(os.environ["iterations"]) else: max_iter = -1 if os.environ.get("randomize"): try_random = bool(int(os.environ["randomize"])) else: try_random = False if try_rot_article and try_rot_pallet: if try_random: product_it = starmap(random.randint, itertools.repeat((0,3))) else: product_it = product_varlength(4) elif try_rot_article or try_rot_pallet: if try_random: product_it = starmap(random.randint, itertools.repeat((0,1))) else: product_it = product_varlength(2) i = 0 while True: rests = list() layers = list() try: if try_rot_article and try_rot_pallet: rot_article, rot_pallet = get_bitmask(product_it.send(True), 2) elif try_rot_article and not try_rot_pallet: rot_article = get_bitmask(product_it.send(True), 1)[0] rot_pallet = rot_pallet_default elif not try_rot_article and try_rot_pallet: rot_article = rot_article_default rot_pallet = get_bitmask(product_it.send(True), 1)[0] else: rot_article = rot_article_default rot_pallet = rot_pallet_default except TypeError: if try_rot_article and try_rot_pallet: rot_article, rot_pallet = get_bitmask(product_it.next(), 2) elif try_rot_article and not try_rot_pallet: rot_article = get_bitmask(product_it.next(), 1)[0] rot_pallet = rot_pallet_default elif not try_rot_article and try_rot_pallet: rot_article = rot_article_default rot_pallet = get_bitmask(product_it.next(), 1)[0] else: rot_article = rot_article_default rot_pallet = rot_pallet_default except StopIteration: break # generator empty it = get_layers(bins, pallet, rot_article, rot_pallet) layer, rest = it.next() if layer: layers.append(layer) if rest: rests.append(rest) while True: try: if try_rot_article and try_rot_pallet: layer, rest = it.send(get_bitmask(product_it.send(False), 2)) elif try_rot_article and not try_rot_pallet: layer, rest = it.send((get_bitmask(product_it.send(False), 1)[0], rot_pallet_default)) elif not try_rot_article and try_rot_pallet: layer, rest = it.send((rot_article_default, get_bitmask(product_it.send(False), 1)[0])) else: layer, rest = it.send((rot_article_default, rot_pallet_default)) if layer: layers.append(layer) if rest: rests.append(rest) except StopIteration: break print b2a_base64(zlib.compress(cPickle.dumps((layers, rests, pallet)))), if not try_rot_article and not try_rot_pallet: break # only one iteration if both are deactivated i+=1 if max_iter != -1 and i >= max_iter: break
# # 2. free 3d packing import sys import subprocess import itertools import shutil from util import xmlfiletodict, dicttoxmlfile, get_pallet, get_articles, get_packlist_dict if len(sys.argv) != 3: print "usage:", sys.argv[0], "order.xml packlist.xml" exit(0) orderline = xmlfiletodict(sys.argv[1]) pallet = get_pallet(orderline) articles = get_articles(orderline) # bins of items of equal height bins = dict() for article in articles: abin = bins.get(article['Article']['Height']) if abin: abin.append(article) else: bins[article['Article']['Height']] = [article] def arrange_in_layer(abin, plength, pwidth): # articles are longer than wider
# # Copyright 2012 Johannes 'josch' Schauer <*****@*****.**> # # This file is part of Sisyphus. # # Sisyphus is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Sisyphus is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Sisyphus. If not, see <http://www.gnu.org/licenses/>. import sys from util import xmlfiletodict, get_pallet, get_articles if len(sys.argv) != 2: print "usage:", sys.argv[0], "order.xml" exit(1) orderline = xmlfiletodict(sys.argv[1]) pallet = get_pallet(orderline) articles = get_articles(orderline) print len(articles)