Example #1
0
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()
Example #2
0
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()
Example #3
0
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
Example #4
0
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
Example #5
0
#
# 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
Example #6
0
#
# 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)