0

我正在尝试解决 Google ASP Competition 2019:保险裁判分配问题。此链接中提供了问题。

有一个硬性约束,如果裁判的偏好类型为 0,那么案件将不会分配给该裁判。我已将问题简化为包含一些变量。

case(cid)指以 cid 为 case id 的 case。
ref(rid)指具有裁判ID的裁判。

pref(rid, type)接受裁判“摆脱”的偏好,类型取值从 0 到 3。数字越大,越有可能受理此案。

ref(10, 3)ref(9, 2)中,将给予更高的优先级ref(10)

我尝试了以下 cligo 代码:

ref(rid).
case(cid).
pref(rid, type).

assign(cid, rid) :- ref(rid), pref(rid, type), type != 0.

case(4).

ref(3).
ref(5).

pref(3, 0).
pref(5, 1).

#show assign/2.

但是,当我运行命令时,它显示令人满意,但只输出这个

assign(cid, rid)

我究竟做错了什么?

4

1 回答 1

1

在 cligo 变量中,变量以大写字母开头,并且在规则内“有效”。所以我的猜测是你想要下面的代码:

assign(Rcid, Rrid) :- case(Rcid), ref(Rrid), pref(Rrid, Rtype), Rtype != 0.

case(4).    
ref(3).    ref(5).
pref(3, 0).    pref(5, 1).
#show assign/2.

输出:

Solving...
Answer: 1
assign(4,5)
SATISFIABLE

请注意,只有将常量重命名为变量名才会导致错误消息,您还必须添加case(Rcid)到规则正文中。变量名是自由选择的,你可以使用任何变量名,只要它以大写字母开头。

于 2022-03-01T11:42:04.857 回答