ASP /`clingo (Version 4+)에서 python 스크립팅을 사용하는 동안 기본적인 문제가 있습니다. 나는 포인트를 설명하기 위해 최소한의 예제로 문제를 재구성했다. 분명히이 예에서는 스크립트를 사용할 필요가 없습니다. 그러나 더 복잡한 애플리케이션에서는 문제를 인위적으로 재현하여보다 이해하기 쉬운 방식으로 재현합니다.clingo 컴파일러가 #min에 대해 여러 값을 계산하는 중
집계/최적화를 호출하는 동안 컴파일러는 어떻게 든 값을 인덱싱하는 데 사용되는 모든 전체 조건자를 등록하지 않습니다. 대신에 최소값을 연속적으로 계산하는 것으로 보이므로 결과적으로 모든 값을 뱉어냅니다. 아래 출력을 참조하십시오. 최소값이 59에서 19로 변경되고 29로 변경되지 않음을 확인하십시오.이 코드의 #script (python)
호출의 순서는 매우 민감합니다.
이것은 매우 높습니다. 바람직하지 않으며이 문제를 피하는 방법을 알고 싶습니다. I. e., 아래 코드을 수정하여 올바른 모델이 계산되도록 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
I는 다음과 같은 출력 구 :..
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
참고 : '# max' 및'# sum '과 유사한 문제가 발생합니다. 솔루션이 무엇이든간에 (존재하는 경우), 이러한 다른 집계가 계산되는 상황에 적응할 수 있어야합니다. – Thomas