1
#minizinc 행렬의 열 [N, m]에서 얼마나 많은 행렬의 이 경우 k = 1로 주어 지므로 열에 2 "1", "number of 1"> k가 있으므로 문제는 만족스럽지 않아야합니다. 이 방법으로 시도했지만 작동하지 않습니다.체크 1 행렬 Z 주어
constraint forall(i in n, j in m) forall(k in n) k<=(Z[i,j]\/Z[k,j])
어디에서 잘못 되었나요?
이 변수가있는 경우에는 어떻게 할 수 있습니까?
int b;
int: k;
set of int: PEOPLE = 1..p;
set of int: STOPS = 1..s;
array [1..b, PEOPLE, STOPS] of var bool: Z;
Z[1]
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Z[2]
0 1 0 0 0
0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0
p = 5;
s =5;
k=1;
b=2;
그래서이 경우 결과는해야한다 : 그냥 이런 식으로 해결
Z[1]: 1 0 1 0 0 , the number of "1" is 2, "2 > K"
Z[2]: 0 1 0 0 0, the number of "1" is 1, "1<=K"
UNSATISFIABLE
에 대한 여러분 모두 감사가인가 제약 조건은 컬럼 당 최대 1 개가 될 수 있다는 것인가? – hakank
아니요, 위에 쓴 제한 조건으로 각 열의 "1"을 합한 다음 얼마나 많은 "1"이 있는지 계산하려고했습니다. 첫 번째 열에 "1"이 있고 세 번째 열에 "1"이 있기 때문에 결과 2를 갖고 싶습니다. 그런 다음이 숫자를 "k"와 비교하십시오. –
해결책은 무엇이라고 생각하십니까? 주어진 설명을 감안할 때 제약 조건은 제약 조건을 확인하기 때문에 거짓 ("UNSATISFIED")을 제공합니다. 또한 전체 코드를 표시 할 수 있습니까? 제약 조건에는 몇 가지 구문 오류가 있습니다. 열의 1이 k에 가까워 지도록하려면 forall (1.in.j) (sum ([Z [i, j] | i in 1.m)) < = k) 각 열에 1의 수를 표시하려면 j 열의 합계를 포함하는 길이 m의 배열을 정의해야합니다. – hakank