1

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

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

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

此语法适用于 cligo3,但不适用于 cligo4。应该如何为 cligo4 重写?

4

1 回答 1

0

这个怎么样:

#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/

于 2015-05-29T12:50:55.920 回答