ECLIPSe-CLP中自动域传播行为的识别、禁用及替代方案问询
ECLiPSe-CLP中自动域传播的机制、禁用方法及替代方案
我正在ECLiPSe-CLP中研究、评估并对比多种搜索方法,采用lib(ic_search)中的search/6谓词统计回溯次数作为复杂度与效能的核心评估方式。
测试中发现,系统在进入search前会自动执行类似域传播的过程,该过程不受控制,可直接解决部分问题(如SEND+MORE=MONEY、澳大利亚地图着色问题)且回溯次数为0,导致无法控制传入search的变量域及问题状态,严重阻碍了搜索方法的评估。
现需明确以下两点:
- 该自动域传播过程的具体机制
- 是否可以禁用该过程,或有什么替代方案能满足控制问题初始状态的需求
测试代码
:- lib(ic), lib(ic_global), lib(ic_search). go :- simpleproblem(Vars). simpleproblem(Vars) :- Vars = [A,B], Vars :: [0..1], A + B #= 2, search(Vars,0,input_order,indomain,complete,[backtrack(Backtracks)]), writeln(backtracks:Backtracks), writeln(Vars).
追踪日志
(1) 1 CALL go (2) 2 CALL simpleproblem(_598) (3) 3 CALL ... = ... (3) 3 EXIT ... = ... (4) 3 CALL '::_body'([_1028, _1030], [0 .. 1], eclipse) (4) 3 EXIT '::_body'([_1476{[0, ...]}, _1490{[...]}], [0 .. 1], eclipse) (5) 3 CALL _1490{[0, ...]} + _1476{[0, ...]} #= 2 (9) 4 CALL wake (6) 5 RESUME<2> 0 #= 0 (6) 5 EXIT<2> 0 #= 0 (9) 4 EXIT wake (5) 3 EXIT 1 + 1 #= 2 (10) 3 CALL search_body([1, 1], 0, input_order, indomain, complete, [backtrack(_3046)], eclipse)
内容的提问来源于stack exchange,提问作者Hugo Ye
相关产品推荐
相关产品推荐

