多个python编译器指定_clingo编译器计算多个值

在ASP的clingo Version 4+环境中,遇到在使用Python脚本进行聚合/优化时,编译器未能正确注册所有谓词,导致计算最小值时输出错误。问题在于连续计算最小值而非一次性输出所有正确值。如何修改Python脚本以避免此问题并确保计算出正确的模型,如在示例中找到min_sel_weight(19)作为唯一解决方案。
摘要由CSDN通过智能技术生成

在ASP/`clingo(Version 4+)中使用python脚本时,我遇到了一个基本问题。为了说明这一点,我用一个最小的例子重新构造了这个问题。显然,在这个例子中,我不需要使用脚本。然而,在我更复杂的应用程序中,我确实这样做了,在那里我以更容易理解的方式人为地重新创建了问题。在

问题是,在调用聚合/优化时,编译器不知何故没有注册用于索引值的所有完整谓词。相反,它似乎在连续计算最小值,结果是一路输出所有值。(参见下面的输出:注意最小值从59变为19,然后没有变为29。这对代码的#script (python)部分中prg.ground调用的顺序高度敏感。)

这是非常不可取的,我想知道如何避免这个问题。一、 例如,如何修改下面的代码仍然使用python脚本(可能已修改),以便计算出正确的模型。(在这个例子中,显然,谓词min_sel_weight/1的解决方案是min_sel_weight(19),没有其他值。在

节目。weight("ant",3). weight("bat",53). weight("cat",19). weight("dot",13). weight("eel",29).

#script (python)

import gringo;

def main(prg):

prg.ground([('base', [])]);

prg.ground([('sel', ['bat'])]);

prg.ground([('sel', ['cat'])]);

prg.ground([('sel', ['eel'])]);

prg.solve();

#end.

%% call python-script, to select certain objects.

#program sel(t). sel(t).

%% compute minimum of weights of selected objects:

min_sel_weight(X) :- weight(_,X), #min {XX : weight(OBJ,XX),sel(OBJ)} = X.

#show sel/1. #show min_sel_weight/1.

调用clingo 0 myprogramme.lp我得到以下输出:clingo version 4.5.4

Reading from myprogramme.lp

Solving...

Answer: 1

sel("bat")

min_sel_weight(53)

sel("cat")

min_sel_weight(19)

sel("eel")

SATISFIABLE

Models : 1

Calls : 1

Time : 0.096s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)

CPU Time : 0.040s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值