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

ASP Core-2 哈密顿路径求解器出现无限循环问题求助

问题根因

死循环的核心成因是步骤变量C没有设置上限约束。Clingo的grounding(实例化)阶段需要为规则中的所有变量生成合法取值,你没有限制C的最大值,程序会持续推导C+1的更大取值,即便所有节点都已被访问,也会不断生成无意义的步骤序号,导致程序卡在grounding阶段无法进入求解逻辑。你添加的not visited(Y, _)只能避免同一个节点被重复访问,完全限制不了步骤值的无限增长。

修复后的完整实现
% 统计总节点数
n(Total) :- Total = #count{Node : node(Node)}.

% 选择唯一的起始节点
1 <= {startNode(N) : node(N)} <= 1.

% 初始化第一步访问的节点
visited(X, 1) :- startNode(X).

% 推导后续访问节点,新增步骤上限约束避免无限增长
visited(Y, C+1) :- 
    visited(X, C), 
    edge(X, Y), 
    not visited(Y, _), 
    n(Total), 
    C < Total.

% 约束:所有节点必须被访问到,符合哈密顿路径要求
:- node(N), not visited(N, _).
额外说明
  • 原代码中的inPath谓词属于冗余设计,直接使用edge(X,Y)事实即可减少不必要的候选生成,如果你需要保留inPath做额外逻辑校验,可以补充规则inPath(X,Y) :- visited(X,C), visited(Y,C+1).将路径上的边和inPath绑定
  • 最终输出的visited谓词完全符合要求的visited(节点名, 步骤序号)格式,无需额外转换
  • 如果需要限制路径的起点/终点,只需要在startNode的选择规则上叠加对应约束即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:24:02