2017-02-08 4 views
1

면책 조항 : 나는 거의 완전히 clingo에 익숙하며 일반적으로 응답 집합 프로그래밍입니다.해답 집합과 논리 퍼즐 해결 프로그래밍

나는 grid logic puzzle을 사용하여 해결하기 위해 노력하고 있습니다. 시작하려면 각 카테고리의 인스턴스 하나를 포함하는 모든 모델을 생성하고 싶습니다. person(a; b; c)., 세 주택 : house(w; x; z)., 및 세 가지 색상 : 세 사람이있는 경우

예를 들어, 이 color(r; g; y).

내가 원하는 것이 하나 개의 잠재적 안정적인 모델은 assign(a, r, x), assign(b, g, z), assign(c, y, w) 다른 잠재적 안정적인 모델이 될 수 있습니다 즉, 각각의 사람은 정확히 한 번 색상과 마찬가지로 나타납니다. 일단이 모델을 가지고 나면 퍼즐이 풀릴 때까지 모델을 제거하기 위해 제약 조건을 사용할 수 있다고 생각합니다.

내가 선택 규칙과 제약 사용하여 시도했다 :

{assign(P, C, H)} :- person(P), color(C), house(H). 
P1=P2 :- assign(P1, C, H), assign(P2, C, H). 

을하지만 이것은 많은 변수와 큰 퍼즐을 매우 확장 성이 없습니다. 누구든지 이것을하는 더 좋은 방법을 조언 할 수 있습니까?

+0

제목을 변경해야합니다. ASP는 스택 오버플로에 대한 트래픽이 많은 Active Server Pages를 참조 할 수 있습니다. – Tony

+0

'persons'와'house'에서';'를 사용하지만'color'는','를 사용합니다. 이것은 매우 다릅니다. 'clingo --text '이 당신에게주는 것을보십시오. –

답변

1

color(r;g;y).에 대해 다음과 같이 작성하려고한다고 가정합니다.

% assign each house exactly one person/color 1 {assign(P, C, H) : person(P), color(C) } 1 :- house(H). % assign each person exactly one house/color 1 {assign(P, C, H) : house(H), color(C) } 1 :- person(P). % assign each color exactly one person/house 1 {assign(P, C, H) : house(H), person(P) } 1 :- color(C).