prepare for multiple pallets
This commit is contained in:
parent
1f830df11c
commit
2617de0ed3
1 changed files with 45 additions and 21 deletions
|
@ -14,6 +14,43 @@ import ctypes
|
||||||
libpallet = ctypes.cdll.LoadLibrary('./libpallet.so.0.0.0')
|
libpallet = ctypes.cdll.LoadLibrary('./libpallet.so.0.0.0')
|
||||||
libpallet.evaluate.restype = ctypes.c_double
|
libpallet.evaluate.restype = ctypes.c_double
|
||||||
|
|
||||||
|
if os.environ.get("multi_pallet"):
|
||||||
|
multi_pallet = os.environ["multi_pallet"]
|
||||||
|
else:
|
||||||
|
multi_pallet = False
|
||||||
|
|
||||||
|
def pack_single_pallet(permut_layers, rest_layers, pallet):
|
||||||
|
pack_sequence = 1
|
||||||
|
pack_height = 0
|
||||||
|
|
||||||
|
articles_to_pack = list()
|
||||||
|
|
||||||
|
for layer in list(permut_layers)+rest_layers:
|
||||||
|
pack_height += layer[0]['Article']['Height']
|
||||||
|
#if pack_height > pallet['Dimensions']['MaxLoadHeight']:
|
||||||
|
# break
|
||||||
|
for article in layer:
|
||||||
|
article['PackSequence'] = pack_sequence
|
||||||
|
article['PlacePosition']['Z'] = pack_height
|
||||||
|
articles_to_pack.append(article)
|
||||||
|
pack_sequence += 1
|
||||||
|
|
||||||
|
return get_packlist_dict(pallet, articles_to_pack)
|
||||||
|
|
||||||
|
def pack_multi_pallet(permut_layers, rest_layers, pallet):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def evaluate_single_pallet(packlist):
|
||||||
|
tmp_fh, tmp = tempfile.mkstemp()
|
||||||
|
dicttoxmlfile(packlist, tmp)
|
||||||
|
result = libpallet.evaluate(sys.argv[1], tmp, sys.argv[3])
|
||||||
|
os.close(tmp_fh)
|
||||||
|
os.remove(tmp)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def evaluate_multi_pallet(packlist):
|
||||||
|
pass
|
||||||
|
|
||||||
def evaluate_layers_rests(layers, rests, scores, pallet, result_max):
|
def evaluate_layers_rests(layers, rests, scores, pallet, result_max):
|
||||||
rest_layers = list()
|
rest_layers = list()
|
||||||
# sort rests by space they cover and move them to the center of the pile
|
# sort rests by space they cover and move them to the center of the pile
|
||||||
|
@ -40,34 +77,21 @@ def evaluate_layers_rests(layers, rests, scores, pallet, result_max):
|
||||||
rest_layers.append(layer)
|
rest_layers.append(layer)
|
||||||
|
|
||||||
for permut_layers in itertools.permutations(layers):
|
for permut_layers in itertools.permutations(layers):
|
||||||
pack_sequence = 1
|
if multi_pallet:
|
||||||
pack_height = 0
|
packlist = pack_multi_pallet(permut_layers, rest_layers, pallet)
|
||||||
articles_to_pack = list()
|
else:
|
||||||
|
packlist = pack_single_pallet(permut_layers, rest_layers, pallet)
|
||||||
for layer in list(permut_layers)+rest_layers:
|
|
||||||
pack_height += layer[0]['Article']['Height']
|
|
||||||
#if pack_height > pallet['Dimensions']['MaxLoadHeight']:
|
|
||||||
# break
|
|
||||||
for article in layer:
|
|
||||||
article['PackSequence'] = pack_sequence
|
|
||||||
article['PlacePosition']['Z'] = pack_height
|
|
||||||
articles_to_pack.append(article)
|
|
||||||
pack_sequence += 1
|
|
||||||
|
|
||||||
packlist = get_packlist_dict(pallet, articles_to_pack)
|
|
||||||
|
|
||||||
tmp_fh, tmp = tempfile.mkstemp()
|
|
||||||
dicttoxmlfile(packlist, tmp)
|
|
||||||
|
|
||||||
# ugly, ugly, ugly, ugly hack - dont copy this...
|
# ugly, ugly, ugly, ugly hack - dont copy this...
|
||||||
#score = float(subprocess.check_output(sys.argv[3]+" -o "
|
#score = float(subprocess.check_output(sys.argv[3]+" -o "
|
||||||
# +sys.argv[1]+" -p "+tmp
|
# +sys.argv[1]+" -p "+tmp
|
||||||
# +" -s "+sys.argv[4]+" --headless | grep Score", shell=True).split(' ')[1].strip())
|
# +" -s "+sys.argv[4]+" --headless | grep Score", shell=True).split(' ')[1].strip())
|
||||||
score = libpallet.evaluate(sys.argv[1], tmp, sys.argv[3])
|
if multi_pallet:
|
||||||
|
score = evaluate_multi_pallet(packlist)
|
||||||
|
else:
|
||||||
|
score = evaluate_single_pallet(packlist)
|
||||||
if score >= max(scores+[0]):
|
if score >= max(scores+[0]):
|
||||||
result_max[0] = dicttoxmlstring(packlist)
|
result_max[0] = dicttoxmlstring(packlist)
|
||||||
os.close(tmp_fh)
|
|
||||||
os.remove(tmp)
|
|
||||||
scores.append(score)
|
scores.append(score)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
Loading…
Reference in a new issue