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

Clingo约束失效问题:包裹配送优化程序重量与体积限制未生效

问题分析

你的约束失效核心原因是:当前的求和约束是计算所有配送包裹的总重量/体积,而非单辆车各自承载的重量/体积。另外代码中缺少parcelType的事实定义,导致体积约束的求和逻辑无法正确获取体积值。

修正后的代码
weightLimit(500).
volumeLimit(1000).

cars(2).

parcel(1,a,1,400).
parcel(2,b,1,400).
parcel(3,c,1,400).
% 补充parcelType事实,根据业务需求定义对应类型的体积
parcelType(1, 300).

% 每辆车的重量约束:单辆车Y承载的包裹总重量不能超过重量限制
:- Y in 1..cars, #sum {W, X: assign(X, Y), parcel(X,_,_,W)} > weightLimit.

% 每辆车的体积约束:单辆车Y承载的包裹总体积不能超过体积限制
:- Y in 1..cars, #sum {V, X: assign(X, Y), parcel(X,_,T,_), parcelType(T,V)} > volumeLimit.

% 补充必要规则:每个包裹必须分配给一辆车
:- parcel(X,_,_,_), not exists Y: assign(X,Y).
关键修改点
  • 按车辆分组约束:在求和约束前增加Y in 1..cars,确保对每一辆车单独计算承载的重量/体积,而非全局总和。
  • 补全parcelType事实:体积约束依赖parcelType(T,V)获取包裹类型对应的体积值,必须补充该事实才能让体积约束生效。
  • 增加包裹分配强制规则:确保所有包裹都被分配到车辆,避免程序生成未分配包裹的无效解。

运行修正后的代码后,由于3个包裹每个重400,2辆车最多承载800,无法装下1200的总重量,程序会正确返回不可满足的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:32:12