```python import pulp # 定义订单需求 orders = [ {'order_id': 1, 'quantity': 10, 'width': 1.6, 'height': 2.2, 'price': 480}, {'order_id': 2, 'quantity': 20, 'width': 1.8, 'height': 2.4, 'price': 680}, {'order_id': 3, 'quantity': 20, 'width': 1.7, 'height': 2.3, 'price': 550}, {'order_id': 4, 'quantity': 15, 'width': 1.5, 'height': 2.0, 'price': 420} ] # 定义原材料 raw_materials = [ {'length': 5.5, 'price': 18}, {'length': 6.2, 'price': 22}, {'length': 7.8, 'price': 28} ] # 考虑锯口宽度 saw_width = 0.005 # 定义决策变量 x = pulp.LpVariable.dicts("x", ((i, j) for i in range(len(orders)) for j in range(len(raw_materials))), lowBound=0, cat='Integer') # 创建问题 prob = pulp.LpProblem("OptimalCuttingProblem", pulp.LpMaximize) # 目标函数:总利润 = 总收益 - 总成本 total_profit = pulp.lpSum([orders[i]['price'] * orders[i]['quantity'] - pulp.lpSum([x[i, j] * raw_materials[j]['price'] for j in range(len(raw_materials))]) for i in range(len(orders))]) prob += total_profit # 约束条件:满足订单数量需求 for i in range(len(orders)): prob += pulp.lpSum([x[i, j] for j in range(len(raw_materials))]) >= orders[i]['quantity'] # 切割长度约束 for j in range(len(raw_materials)): used_length = pulp.lpSum([x[i, j] * (2 * (orders[i]['width'] + saw_width) + 2 * (orders[i]['height'] + saw_width)) for i in range(len(orders))]) prob += used_length <= raw_materials[j]['length'] # 求解问题 prob.solve() # 输出结果 print("Status:", pulp.LpStatus[prob.status]) for i in range(len(orders)): for j in range(len(raw_materials)): if x[i, j].value() > 0: print(f"Order {orders[i]['order_id']} cut from raw material {j + 1}: {x[i, j].value()}") ``` [2025-04-26 12:06:16 | AI问答 | 644点数解答]