ECLiPSe CLP:在ic库中搜索/ 6找到的子结果之间暂停

时间:2016-03-26 12:13:39

标签: prolog eclipse-clp

(这个问题关注search/6。)

我想知道是否有一种方法 - 而不是手动跟踪 - 每次找到单个变量的新解决方案时暂停执行search / 6?

我想完成此任务以进一步调查在约束模型中搜索期间发生的事情。

例如,如果您正在尝试解决经典的数独问题,并且已经为您的电路板编写了一组约束和打印方法,那么在设置约束后打印电路板会很有用,但在搜索之前,为了评估你的约束的强度。但是,一旦调用搜索来解决数独游戏,除非你进行跟踪,否则你不会真正了解在底层构建的单个结果。

如果可能出现以下情况,那将非常有用:

(这只是一个抽象的例子)

Traceback (most recent call last):
  File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 3677, in <module>
    main()
  File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 3671, in main
    if not cmd.run(args):
  File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 3429, in run
    die("fast-import failed: %s" % self.gitError.read())
  File "C:\Program Files\Git\mingw64/libexec/git-core\git-p4", line 122, in die
    raise Exception(msg)
Exception: fast-import failed: warning: Not updating refs/remotes/p4/master (new tip 85c94d84335bb1441a7f959b384729b2a4d633f4 does not contain 3222bdc29799d1fe5fff91c36524481b1469f1d9)

现在进行搜索:

% Let's imagine this is a (very poorly) constrained sudoku board
?- problem(Sudoku),constraint(Sudoku),print(Sudoku).
    [[1,3,_,2,_,_,7,4,_],
     [_,2,5,_,1,_,_,_,_],
     [4,8,_,_,6,_,_,5,_],
     [_,_,_,7,8,_,2,1,_],
     [5,_,_,_,9,_,3,7,_],
     [9,_,_,_,3,_,_,_,5],
     [_,4,_,_,_,6,8,9,_],
     [_,5,3,_,_,1,4,_,_],
     [6,_,_,_,_,_,_,_,_]]

1 个答案:

答案 0 :(得分:2)

使用现有的可视化工具

查看Visualization Tools Manual。通过在代码中添加viewable_create/2注释,并从 TkECLiPSe&#39> 工具中启动可视化客户端,您可以获得所需的矩阵显示。菜单。

使用您自己的检测搜索程序

您可以使用用户定义的方法替换search/6中的indomain_xxx选项方法,您可以在传播之前和/或之后打印信息。

如果这还不够,您可以用自己的内置search/6替换整个内置?- suspend(printf("X was instantiated to %w%n",[X]), 1, X->inst), writeln(start), X=3, writeln(end). start X was instantiated to 3 end ,这不是很难,例如, ECLiPSe Tutorial chapter on tree search或我对this question的回答。

使用数据驱动设施进行跟踪

使用ECLiPSe的数据驱动控制工具,您可以在变量发生某些事情时轻松显示信息。在最简单的情况下,您可以在变量实例化上执行某些操作:

<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="asset/css/vendor/bootstrap.min.css">
    <link rel="stylesheet" href="asset/css/vendor/datatables/dataTables.jqueryui.min.css">
    <link rel="stylesheet" href="asset/css/vendor/datatables/dataTables.bootstrap.min.css">
    <link rel="stylesheet" href="asset/css/vendor/datatables/responsive.bootstrap.min.css"> 

  </head>

  <body>
<table id="example" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0" width="100%">
        <thead>
            <tr>
                <th>First name</th>
                <th>Last name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
                <th>Extn.</th>
                <th>E-mail</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Tiger</td>
                <td>Nixon</td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
                <td>5421</td>
                <td>t.nixon@datatables.net</td>
            </tr>
            <tr>
                <td>Jennifer</td>
                <td>Chang</td>
                <td>Regional Director</td>
                <td>Singapore</td>
                <td>28</td>
                <td>2010/11/14</td>
                <td>$357,650</td>
                <td>9239</td>
                <td>j.chang@datatables.net</td>
            </tr>
            <tr>
                <td>Zenaida</td>
                <td>Frank</td>
                <td>Software Engineer</td>
                <td>New York</td>
                <td>63</td>
                <td>2010/01/04</td>
                <td>$125,250</td>
                <td>7439</td>
                <td>z.frank@datatables.net</td>
            </tr>
            <tr>
                <td>Zorita</td>
                <td>Serrano</td>
                <td>Software Engineer</td>
                <td>San Francisco</td>
                <td>56</td>
                <td>2012/06/01</td>
                <td>$115,000</td>
                <td>4389</td>
                <td>z.serrano@datatables.net</td>
            </tr>
            <tr>
                <td>Jennifer</td>
                <td>Acosta</td>
                <td>Junior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>43</td>
                <td>2013/02/01</td>
                <td>$75,650</td>
                <td>3431</td>
                <td>j.acosta@datatables.net</td>
            </tr>
        </tbody>
    </table>
    <script src="asset/js/vendor/jquery-1.12.0.min.js"></script>   
    <script src="asset/js/vendor/bootstrap.min.js"></script>
    <script src="asset/js/vendor/jquery.responsiveTabs.min.js"></script>
    <script src="asset/js/vendor/jquery.dataTables.min.js"></script>
    <script src="asset/js/vendor/dataTables.bootstrap.min.js"></script>
    <script src="asset/js/vendor/dataTables.responsive.min.js"></script>
    <script src="asset/js/vendor/responsive.bootstrap.min.js"></script>   

<script>

$(document).ready(function() {
    $('#example').DataTable( {
        responsive: {
            details: {
                display: $.fn.dataTable.Responsive.display.modal( {
                    header: function ( row ) {
                        var data = row.data();
                        return 'Details for '+data[0]+' '+data[1];
                    }
                } ),
                renderer: function ( api, rowIdx, columns ) {
                    var data = $.map( columns, function ( col, i ) {
                        return '<tr>'+
                                '<td>'+col.title+':'+'</td> '+
                                '<td>'+col.data+'</td>'+
                            '</tr>';
                    } ).join('');

                    return $('<table class="table"/>').append( data );
                }
            }
        }
    } );
} );

</scirpt>
  </body>
</html>

基于这个想法,即使它们发生在黑盒搜索例程中,您也可以编写code that allows you to follow labeling and propagation steps。有关详细信息,请参阅链接。