2017-11-01 8 views
1

저는 프로그래밍에있어서 매우 새롭기 때문에 누군가가 저에게 올바른 방향으로 나를 가리킬 수 있기를 희망합니다.요구 사항을 충족하는 항목의 조합은 어떻게 찾을 수 있습니까?

나는 ~ 2400 명으로 구성된 목록을 가지고 있으며 각 사람은 적어도 23 가지 조건 중 하나를 가지고 있습니다 (각 사람의 상태는 조건이있는 경우 1, 그렇지 않은 경우 0 중 하나입니다).

E.G. Jon의 조건이 1, 5, 6이면 Jon의 출력은 {1,0001100 ...}이됩니다.

다음은 각 조건에 맞는 사람의 수를 표시합니다. 따라서 조건 1의 희망 숫자가 10 명이고 조건 2의 희망 숫자가 5 인 경우 조건 1을 가진 10 명과 조건 2를 가진 5 명이 필요합니다 (두 사람 모두 조건 1과 조건 2를 계산할 수 있습니다) .

또한 정확히 30 명을 선택하고 가능한 한 원하는 조건 수에 가깝게하려고합니다. 단 하나의 조건에는 최소 3 명이 있어야하고 10 명 이하의 사람이 있어야한다는 엄격한 제한이 있습니다.

이 작업을 수행 할 수있는 방법이 있습니까? 그렇다면 어떻게해야합니까? 나는 이것을 무차별 적으로 시도했지만 많은 조합이 해결책을 얻지 못하게했다.

편집 : 여기에 오명 4 조건 목록과 작은 예입니다

Person 1: {1,0,0,1} Person 2: {0,1,1,1} Person 3: {0,0,0,1} Person 4: {1,0,0,0} Person 5: {1,0,0,1}

이 조건 {의

원하는 숫자 2,1,1,2 }. 아이디어는 3 명을 선택하고 가능한 한 원하는 수의 조건에 최대한 근접해야한다는 것입니다. 이 예제에서는 사람 1,2, 및 4가 선택됩니다. 나는이 아이디어를 23 가지 조건을 가진 2400 명으로 확대하고 30 명을 선택해야한다. (목록 크기와 조건의 수를 늘릴 수 있어야하지만) 30 명으로 구성된 조합이 있는지는 알 수 없다. 정확한 일치가 발생합니다.

그 점을 명확히하는 데 도움이 되었습니까?

+0

문제 사양이 약간 모호하게 들립니다. 두 가지 유형의 문제가 있는데 하나는 조건 'i'를 충족하는 'x'명을 선택하고 'i', 'j', 'k'조건을 만족하는 30 명을 선택해야합니다. , .. 또는 가능한 한 많은 조건이 있습니까? 첫 번째 유형은 쉬운 것처럼 보입니다. – norio

+0

작은 프로세스 예제로 원하는 것을 설명해야합니다. 예를 들어 5 명과 3 가지 조건을 사용할 수 있습니다. – Alperen

+0

순수 * python-3.x * 코드에서이 작업을 수행하거나 * z3py * 또는 [pysmt] (https://github.com/)와 같은 기성 라이브러리를 기꺼이 사용하고 싶습니까? pysmt/pysmt)? –

답변

0

이 문제는 제약 프로그래밍으로 쉽게 해결할 수 있습니다. 파이썬을 사용하고 있으므로 Google's CP solver을 사용할 수 있습니다. 2400 명으로 구성된 경우, 30 개의 의사 결정 변수가 있고 각 변수의 도메인은 2400 개입니다. 당신의 목표는 당신의 해와 이론적 인 최적 솔루션의 차이를 최소화하는 것입니다. (점수 0은 23 가지 조건이 모두 충족된다는 것을 의미합니다). 제약 프로그래밍을 사용하면 수십 줄의 코드로이 작업을 수행 할 수 있습니다. 해결사는 검색 전략 및 기타 세부 사항을 처리합니다.