문제

나는 그냥 사람을 좋아지 여부를 확인하고 다음과 같은 문제가 NP-complete 나이 있는 경우 실제로 더 나은/쉽게 솔루션을 보다 간단한 brute-force 조합니다.

우리는 종류-리소스 할당 문제에 우리의 소프트웨어,그리고 나는 그것을 설명하는 예입니다.

우리가 필요 4 명의 사람들을 직장에서 하루 동안-이동합니다.이 숫자,사실 그것은"하루-shift"기록된 데이터베이스에서.

그러나 우리는 필요하지 않은 사람에게 명소,일부 요구 사항을 할 필요가 가득하기 위해 법안을 맞습니다.

그는 4,말하자 2 들은 간호사가,그리고 그들의 1 개는 의사입니다.

의 한 의사는 또한 작업의 일부분으로 특별한 팀입니다.

그래서 우리는 이 정보:

일-이동:4
1 사
1 사에서 일할 필요가 팀
1 사

위의 문제가 아닙니다.문제는 우리가 시작할 때 사람들을 따기를 작동 하루-변화하고 파악하는 경우에는 사람들이 우리가 선택 지금까지할 수 있는 실제로 채워준입니다.

예를 들어,우리가 선택 James,John,Ursula 다와 마리아에게 작동하는 곳,제임스 및 Ursula 는 의사,요한과 마리아가 있습니다.

Ursula 에서 작동한 팀 A.

이 순서에 따라 우리는 시도하는 법안을 맞는,우리는 끝낼 수 있습니다 추론 우리가 오른쪽 사람들이거나,아니면 우리가 시작하려고 다양한 조합.

예를 들면,목록을 아래로 이동하고 선택 Ursula 첫째,우리가 할 수 그녀와 함께"1 의사는"기준입니다.그런 다음 우리는 야고보,우리는 알 수 있는 그 이후에서 작동하지 않 팀은,다른 기준에 대한"1 의사에서 일할 필요가 팀",할 수 없이 가득 그와 함께.이후 다른 두 사람들은 간호사가,그들은 적합하지 않는 기준 중 하나.

그래서 우리는 철회하고 제임스 첫째,그는 너무 맞을 수 있는 첫 번째 기준은 다음 Ursula 할 수 있는 조건에 맞는 요구에는 팀.

그래서 이 문제를 보는 우리에 필요한 다른 조합을 시도하는 때까지 우리가 하나도 그들 모두는 경우에,우리는 몇 가지 기준으로 채워지지 않은 아직,경우에도 총 수의 머리는 작업과 같은 총수의 머리를 필요 또는 우리가 발견했는 조합을 작동합니다.

이것이 유일한 솔루션을 사용하는 것을 목표로하고 하나?


편집:일부는 설명을 합니다.

댓글 이 질문을 언급하는 이 몇 사람,우리는 우리와 함께 이동해야 brute-force,나는 동의하고,아마도 우리는 무엇을 할 수 있는지,그리고 우리는 심지어는 같은 차선에서는 어떤 종류 최적화를 보면서 데이터의 크기와 선택의 다른 정렬 알고리즘을 적은 초기 오버 헤드 데이터 크기가 작습니다.

문제는 그러나 이것은 부분의 명단을 계획하는 시스템에서 사용할 수 있습니다 꽤 많은 수의 관여하는 사람들 모두를"우리가 필요한 사람들 X 일에 변화"뿐만 아니라"우리가 이 수영장의 Y 는 사람이 하는 것입니다"그것뿐만 아니라 잠재력이 큰"우리는 이 목록의 기준 Z 그 X 는 사람들을 어떻게든 일과 이 Y"사람들 다음에 추가한다는 사실 우리는 우리가 다수의 일을 하는 같은 계산에 대한 실시간 지도자로 조정하는 명부,그리고 그런 다음 필요에 대한 신속한 솔루션이 올라와 있다.

기본적으로,지도자 표시 라이브 합 정보 화면에서는 얼마나 많은 사람들은 여전히 누락,모두에 하루-shift 전체적으로뿐만 아니라,얼마나 많은 사람들이에 맞는 다양한 기준과 어떻게 많은 사람들이 우리가 실제로 ned 것 외에 우리가 있습니다.이 디스플레이를 업데이트 semi-라이브는 동안에도 조절 명단과 함께"어떤 경우 제임스는 하루-이동 대신 Ursula 및 Ursula 은 밤-shift".

하지만 거대한 덕분에 사람들이 있는 답변이 지금까지,제약 조건을 만족도를 문제아리에 가야지만 우리는 확실히 하에 모든 연결 및 알고리즘 이름을 여기에.

이것은 사랑 하는 이유 유래:)

도움이 되었습니까?

해결책

당신이 가진 것은 a입니다 제약 만족도 문제; NP와의 관계는 일반적으로 NP이지만 종종 NP- 완성은 아니기 때문에 흥미 롭습니다. 즉, 다항식 솔루션에 적합합니다.

EBO가 의견에 언급했듯이, 당신의 상황은 그것이 정확한 표지 문제, 당신이 신청할 수 있습니다 Knuth의 알고리즘 x 에게. 이 압정을 가지고 있다면, 그것이 어떻게 작동하는지 알려주십시오.

다른 팁

당신이있는 것처럼 보입니다 제약 만족도 문제.

귀하의 경우 특히 제약 전파 기술을 먼저 살펴볼 것입니다. 문제를 관리 가능한 크기로 줄일 수 있습니다.

아무도 기준에 맞지 않으면 어떻게됩니까?

당신이 설명하는 것은 '룸메이트 문제'입니다. 이 논문.

나와 함께, 나는 더 나은 링크를 찾고 있습니다.

편집하다

여기에 또 다른 매우 밀도가 있습니다 명제.

나에 관해서는, 나는 감소를 찾으려고 노력할 것입니다. 이중 파파트 그래프 매칭 문제. 또한 문제가 NP라는 것을 증명하기 위해서는 일반적으로 머무는 것보다 훨씬 더 복잡하다는 것을 증명합니다. 다항식 솔루션을 찾을 수 없습니다.

나는 당신의 문제가 NP인지 확신하지 못합니다. 그런 식으로 냄새가 나지 않지만, 내가 할 수있는 일은 더 적은 사람들이 이용할 수 있기 때문에 가장 구체적인 것을 먼저 채우려고하는 직책에 대한 요구 사항을 주문하는 것입니다. 이 위치를 채우십시오. 그래서 당신은 많은 역 추적이 필요하지 않을 것입니다. 이를 순수한 Knuth-sness 알고리즘 인 알고리즘 X와 결합해서는 안되는 이유는 없습니다.

내 수학적 정통성이 크지 않기 때문에 다른 사람들에게 이론을 남겨 둘 것입니다. 그러나 Cassowary/cassowary.net 또는 nsolver와 같은 도구가 문제를 제한 만족도 문제로 선포하고 제약을 해결하는 데 유용한 도구를 찾을 수 있습니다.

이러한 도구에서, 제약 전파와 결합 된 Simplex 방법은 종종 용액 공간을 결정적으로 줄인 다음 비용 함수가 주어진 최적의 솔루션을 찾기 위해 사용됩니다. 더 큰 솔루션 공간 (지정된 문제의 크기에 적용되지 않는 것 같음)의 경우 때로는 유전자 알고리즘이 사용됩니다.

내가 올바르게 기억한다면, NSolver는 샘플 코드에 Chun 박사가 홍콩에서 일한 실제 간호사 로스터 문제의 단순화를 포함합니다. 그리고 거기 있습니다 그가 한 일에 관한 논문.

그것은 나에게 소리처럼 당신의 몇 가지 분리할 수 있는 문제는 것은 많은 쉽게 해결하기:

--중 하나를 선택하는 의사에서 팀 선택하는 다른 의사에서 모든 팀 --두 선택 간호사

그래서 당신은 세 개의 독립적인 문제입니다.

설명 하지만,당신은 두 가지 의사(중 하나에서 지정된 팀)와 두 개의 간호사,또는 하나의 의사에서 지정된 팀,두 간호사,그리고 다른 하나는 것 중 하나가 될 수 있습 의사나 간호사가?

몇 가지 질문 :

  1. 제약 조건을 충족시키는 목표입니다 바로 그거죠, 또는 전용 (그러나 가능한 한 많이)?
  2. 사람이 여러 팀의 구성원이 될 수 있습니까?
  3. 가능한 모든 제약은 무엇입니까? (예를 들어, 여러 팀의 구성원 인 의사가 필요할 수 있습니까?)

제약을 만족시키려는 경우 바로 그거죠, 나는 엄격함에 의해 제약 조건을 감소시킬 것입니다. 첫 번째!

제약을 만족시키려는 경우 , 다른 이야기입니다 ... 당신은 우리가 정확하게 일치 할 수없고 선택할 수있는 몇 가지 가능성이있을 때 우리가 가지고있는 것을 결정하는 일종의 가중치/중요성 기능을 지정해야 할 것입니다.

제약이 여러 개나 있으면 살펴보십시오. 침포 플래너 (오픈 소스, Java).

무자비한 힘, 분기 및 바운드 그리고 비슷한 기술이 오래 걸립니다. 다음과 같은 결정 론적 알고리즘 먼저 가장 큰 교대를 채우십시오 매우 차선책입니다. 메타 허풍은 이것을 다루는 아주 좋은 방법입니다.

Drools Planner의 실제 간호사 명단 예를 구체적으로 살펴보십시오. "젊은 간호사는 토요일 밤에 일하기를 원하지 않는다"또는 "일부 간호사는 며칠 동안 일하기를 원하지 않는다"와 같은 많은 제약을 추가하기 쉽다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top