特定の人数を特定のシフトに割り当てることを楽しみにしています。たとえば、私は 6 人で 3 つの異なるシフトを持っていました。今度は、すべてのシフトに正確に 2 人を割り当てる必要があります。私はこのようなことを試しましたが..
注:これはうまくいきません.人々を誤解させるためにできるだけ早く編集してください. それの後、誰もそれをコピーしていません:
person(a)
person(b)
person(c)
person(d)
person(e)
person(f)
shift("mor")
shift("aft")
shift("nig")
shiftCount(2).
{ assign(P,S) : shift(S)} = 1 :- person(P).
% DO NOT COPY THIS! SEE RIGHT ANSWER DOWN BELOW
:- #count{P : assign(P,"mor")} = K, shiftCount(K).
:- #count{P : assign(P,"aft")} = K, shiftCount(K).
:- #count{P : assign(P,"nig")} = K, shiftCount(K).
#show assign/2.
割り当てられたシフトの数を数えることは可能ですか?
上記のコードの出力 (「.」が挿入された場合) は次のとおりです。
clingo version 5.5.0
Reading from stdin
Solving...
Answer: 1
assign(a,"nig") assign(b,"aft") assign(c,"mor") assign(d,"mor")
assign(e,"mor") assign(f,"mor")
SATISFIABLE
Models : 1+
Calls : 1
Time : 0.021s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.000s
ここでは、 shiftCountで定義されているように、朝 ("mor") シフトが 2 回以上使用されていることがはっきりとわかります。必要な結果を得るには何を変更する必要がありますか?