优化语句语法的差异(clingo 3 和 clingo 4)

Differences in optimization statement syntax (clingo 3 and clingo 4)

我在逻辑程序中有一个优化语句,对于 clingo3:

#minimize [ batteryFlat(mycar)=1, batteryFlat(yourcar)=1, hasNoFuel(mycar)=1, 
    hasNoFuel(yourcar)=1, brokenIndicator(mycar)=1, brokenIndicator(yourcar)=1].

(基本上,我希望解决方案包含尽可能少的上述内容 - 它们都是同等权重的)。

此语法适用于 clingo3,但不适用于 clingo4。 clingo4应该怎么重写?

这个怎么样:

#minimize {batteryFlat(mycar); batteryFlat(yourcar); hasNoFuel(mycar); 
hasNoFuel(yourcar); brokenIndicator(mycar); brokenIndicator(yourcar)}.

集合现在用 ; 分隔然后您可以使用 , 来连接条件。每个元素都有相同的优先级,但如果你想要不同的优先级,你可以这样做:

#minimize {1@1: batteryFlat(mycar); 1@2: batteryFlat(yourcar); hasNoFuel(mycar); 
hasNoFuel(yourcar); brokenIndicator(mycar); brokenIndicator(yourcar)}.

现在第一个原子具有优先级(我认为至少出现一次),第二个原子具有更高的优先级。

或者,如果你有变量优先考虑不同接地的数量,如下所示:

#minimize {X@1: batteryFlat(X); 1@2: batteryFlat(yourcar); hasNoFuel(mycar); 
hasNoFuel(yourcar); brokenIndicator(mycar); brokenIndicator(yourcar)}.

此处显示比较:http://sourceforge.net/projects/potassco/files/clingo/4.2.0/