基于弧一致性的回溯作业调度推理异常问题求助
维持弧一致性(MAC)回溯求解器作业调度推理问题排查方向
检查弧一致性传播的闭环逻辑
维持弧一致性(MAC)的核心是通过队列持续传播域变化,若仅处理当前赋值变量的直接关联弧,会导致约束链中断,无法触达非直接关联变量。确认:- 每次从变量域中移除值后,是否将**所有受影响约束的反向弧(即约束另一端变量指向当前变量的弧)**加入传播队列?
- 传播队列是否被处理至为空,而非仅执行一轮直接关联弧的检查?
验证Constraint类的邻接关系覆盖
作业调度问题的约束存在传递性(如作业A依赖B、B依赖C,则A与C间接关联),检查:- Constraint类是否完整记录了约束涉及的所有变量邻接关系,而非仅当前赋值变量的直接约束?
- 遍历约束时,是否能通过中间变量迭代触发后续关联约束的检查,而非停留在直接关联层?
排查removeDomains函数的传播触发逻辑
调整该函数后问题仍存在,需确认:- 当变量域被修改时,是否正确触发了所有相关约束的弧一致性检查,包括通过中间变量间接关联的约束?
- 函数返回的域修改状态是否被正确传递,用于驱动后续的传播循环?
拆解首次推理循环的输出差异
将首次循环的输出按以下维度拆解对比预期结果:- 当前赋值变量的域状态
- 直接关联变量的域变化
- 非直接关联变量的域状态
定位哪一步传播未触发——比如是否中间变量的域未被修改,导致后续关联变量无法被推理?
需补充的信息
请提供以下内容以便精准定位问题:
- Problem类中MAC传播队列的初始化与处理代码
- Constraint类中获取邻接变量的方法实现
- removeDomains函数的完整代码
- 首次推理循环的输入、实际输出及预期输出示例
内容的提问来源于stack exchange,提问作者eliainnocenti
相关产品推荐
相关产品推荐

