You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AMPL装箱模型约束优化求助:允许空箱的订单分配问题

装箱问题AMPL模型修正方案

问题根源

你的模型总成本随Max_Carts增大反而上升的核心原因是:目标函数对每个cart强制累加固定成本1,无论该cart是否被使用。新增的空cart也会贡献这部分固定成本,直接推高总成本。同时现有约束未明确区分cart的使用状态,无法让模型自动忽略空cart的无效成本。

修正后的完整代码

set ORDERS;            # 订单集合

param Cost{ORDERS};  # 每个订单的成本
param Max_Order_Per_Cart = 20;  # 每个cart最多容纳的订单数
param Max_Carts = 10; 

var Assign{ORDERS, c in 1..Max_Carts} binary;  # 订单到cart的分配变量(1=分配,0=不分配)
var Cart_Used{c in 1..Max_Carts} binary;  # cart是否被使用(1=已使用,0=未使用)
var Cart_Cost{c in 1..Max_Carts} >= 0;  # 每个cart的成本

minimize Total_Cost: sum {c in 1..Max_Carts} (Cart_Cost[c] + 1*Cart_Used[c]);  # 仅对使用的cart计算固定成本

subject to Cart_Assignment{o in ORDERS}:
    sum {c in 1..Max_Carts} Assign[o, c] = 1;  # 每个订单必须分配到恰好一个cart
    
subject to Cart_Usage_Constraint{c in 1..Max_Carts}:
    sum {o in ORDERS} Assign[o, c] <= Max_Order_Per_Cart * Cart_Used[c];  # 未使用的cart不能分配订单
    
subject to Max_Order_Per_Cart_Constraint{c in 1..Max_Carts}:
    sum {o in ORDERS} Assign[o, c] <= Max_Order_Per_Cart;  # 每个cart最多装20个订单
    
subject to Cart_Cost_Constraint{c in 1..Max_Carts}:
    Cart_Cost[c] = sum {o in ORDERS} Cost[o] * Assign[o, c];  # cart成本等于其分配订单的总成本

关键修正点说明

  • 新增Cart_Used二进制变量:明确标记cart的使用状态,将固定成本与使用状态绑定,空cart不再产生额外成本。
  • 调整目标函数逻辑:仅对实际使用的cart(Cart_Used=1)计算固定成本,避免空cart的无效成本累加。
  • 新增Cart_Usage_Constraint约束:确保未使用的cart无法分配任何订单,但不强制cart必须被使用,完全符合允许空箱的需求。
  • 简化成本约束:直接让cart成本等于其分配订单的总成本,消除原约束中>=可能导致的成本冗余,提升模型计算效率。

内容的提问来源于stack exchange,提问作者Developppeur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:35:03