Ich implementiere eine Stabschneidoptimierung in Python mit dem FFD -Algorithmus (FIT DEMING MEHRSCHAFT). Ich habe eine Liste von Bestellungen mit jeweils eine Menge und Länge. Der Code sollte alle Teile in Balken mit fester Länge (6000 mm) zuweisen und einen Bericht erstellen. Loops laufen, aber bestimmte Teile werden nie hinzugefügt. < /li>
Gegenüberprüfung zeigt fehlende Mengen.
Ich implementiere eine Stabschneidoptimierung in Python mit dem FFD -Algorithmus (FIT DEMING MEHRSCHAFT). Ich habe eine Liste von Bestellungen mit jeweils eine Menge und Länge. Der Code sollte alle Teile in Balken mit fester Länge (6000 mm) zuweisen und einen Bericht erstellen. Loops laufen, aber bestimmte Teile werden nie hinzugefügt. < /li> Gegenüberprüfung zeigt fehlende Mengen.[code]# -*- coding: utf-8 -*- import pandas as pd from collections import Counter
def optimize_cuts(stock_length, required_pieces): """ Calculates the bar cutting plan using the First Fit Decreasing algorithm. """ # 1. Create a complete list of individual pieces pieces_list = [] for item in required_pieces: for _ in range(item['quantity']): pieces_list.append({ 'name': item['name'], 'length': item['length'] })
# 2. Sort pieces from largest to smallest pieces_list.sort(key=lambda x: x['length'], reverse=True)
used_bars = []
# 3. Allocate each piece for piece in pieces_list: allocated = False # Try to fit the piece in an existing bar for bar in used_bars: used_length = sum(p['length'] for p in bar) if stock_length - used_length >= piece['length']: bar.append(piece) allocated = True break
# If it doesn't fit in any existing bar, create a new one if not allocated: used_bars.append([piece])
return used_bars
def generate_tabular_report(stock_length, cutting_plan): """ Formats the cutting plan result into a table (DataFrame) using pandas. """ print("=" * 80) print(" BAR CUTTING OPTIMIZATION PLAN (TABULAR)") print("=" * 80)
table_data = []
for i, bar in enumerate(cutting_plan, 1): piece_counter = Counter(p['name'] for p in bar) lengths = {p['name']: p['length'] for p in bar}
row_data = {'SEQUENCE': f'CUT {i}'}
piece_idx = 1 for name, qty in piece_counter.items(): row_data[f'NAME_{piece_idx}'] = name row_data[f'QTY_{piece_idx}'] = qty row_data[f'LENGTH_{piece_idx}'] = lengths[name] piece_idx += 1
total_used = sum(p['length'] for p in bar) leftover = stock_length - total_used row_data['TOTAL USED'] = total_used row_data['LEFTOVER'] = leftover
table_data.append(row_data)
if not table_data: print("No pieces to process.") return
df = pd.DataFrame(table_data)
max_pieces = (len(df.columns) - 3) // 3 ordered_columns = ['SEQUENCE'] for i in range(1, max_pieces + 1): ordered_columns.extend([f'NAME_{i}', f'QTY_{i}', f'LENGTH_{i}']) ordered_columns.extend(['TOTAL USED', 'LEFTOVER'])
for col in ordered_columns: if col not in df.columns: df[col] = ''
def verify_quantities(order_list, final_plan): """ Checks if the quantity of pieces in the final plan matches the initial order. """ requested = {item['name']: item['quantity'] for item in order_list}
allocated_pieces = [] for bar in final_plan: for piece in bar: allocated_pieces.append(piece['name']) allocated = Counter(allocated_pieces)
print("\n" + "=" * 80) print(" QUANTITY VERIFICATION") print("=" * 80) if dict(allocated) == requested: print("✅ SUCCESS: All requested quantities were correctly allocated in the plan!") else: print("❌ WARNING: There is a mismatch between the order and the final plan.") for name, qty_requested in requested.items(): qty_allocated = allocated.get(name, 0) if qty_requested != qty_allocated: print(f" - Piece '{name}': Requested={qty_requested}, Allocated={qty_allocated}") print("=" * 80)
# --- INPUT DATA --- if __name__ == "__main__": STOCK_BAR_LENGTH = 6000
final_plan = optimize_cuts(STOCK_BAR_LENGTH, order_list) generate_tabular_report(STOCK_BAR_LENGTH, final_plan) verify_quantities(order_list, final_plan) [/code] Warum überspringt FFD einige Teile wie 'xc9'? Wie kann ich den Code beheben, um sicherzustellen>
Ich frage mich, ob dies die richtige Möglichkeit ist, einen Systemprozess auszuführen und sich vom Elternteil zu lösen, obwohl der Elternteil das Beenden ohne Zombie und/oder das Töten des...
Ich habe ein Objekt, das ich in 3 Segmente teilen und speichern möchte in einzelne OBJ -Dateien. Das Objekt wird in der Mitte und in der X-Y-Ebene platziert. Ich möchte sie entlang der Y-Achse...
Ich habe einen Datensatz mit einer Spalte mit Gruppen, Datumsangaben, Wochentagen und einigen Datenspalten. Für jedes Datum in jeder Gruppe möchte ich den Tagesdurchschnitt der letzten drei Wochen...
Ich habe einen Datensatz mit einer Spalte mit Gruppen, Datumsangaben, Wochentagen und einigen Datenspalten. Für jedes Datum in jeder Gruppe möchte ich den Tagesdurchschnitt der letzten drei Wochen...
Ich habe einen C#-UDP-Socket, von dem ich Daten zu mir nach Hause senden möchte. Der Server-Socket wird bei aws gehostet und der Client ist bei mir zu Hause. Mithilfe des UDPSocket.cs-Beispiels auf...