2014-04-01 6 views
0

근무할 수있는 부서를 기반으로 직원을 다양한 부서에 자동으로 스케줄하는 스케줄러를 개발 중입니다.부서 기술을 갖춘 직원 스케줄링을위한 알고리즘 C#

예를 들어 PCworld 스토어에는 노트북, TV, 카메라, 창고라는 4 개 부서가 있다고 가정 해 보겠습니다. EmployeeN은 랩톱 및 카메라에서 작업하도록 교육 받았습니다.

내가 훈련을받은 부서를 기반으로 100 명의 PC 월드 동료를 계획해야한다고 가정 해 봅시다. 직원이 근무할 수있는 부서 목록이있는 직원 클래스가 있습니다. 최소 종업원 수와 같은 개별 부서 기준이 있습니다.

전체 인스턴스 인스턴스 인스턴스 목록과 부서 인스턴스 목록이 있다고 가정 해 보겠습니다. 그래서 4 개 부서가있는 경우 전체 직원 목록에서 할당 된 직원 목록을 4 개 작성하여 최소 및 최대 직원 수와 같은 부서 요구 사항을 충족하도록해야합니다. 그 말이 유감 스럽다면 나는 몰라.

이 솔루션을 해결하는 가장 좋은 방법 또는 직원을 부서에 할당하는 데 사용할 수있는 최상의 알고리즘은 무엇입니까?

감사합니다.

+1

매우 광범위합니다. 작성한 코드에 대해 특정 질문이 있습니까? – tnw

+0

ok는 내가 직원 목록과 부서 목록을 가지고 있다고 가정 해 보겠습니다. 따라서 4 개 부서가있는 경우 최소 직원 및 최대 직원과 같은 부서 요구 사항에 따라 분류 된 직원 목록에서 4 명의 직원 목록을 작성해야합니다. 그 말이 유감 스럽다면 나는 몰라. – user3182535

+1

@tnw - 이것을 좀 더 명확하게하기 위해 이것을 다시 말하면서 - 나는 그것이 너무 광범위하다고 생각하지 않으며, 사실 알고리즘 적 관점에서 보면 흥미로운 문제입니다. – Geoff

답변

2

놀랍게도 이것은 잘 연구되고 중요하지 않은 최적화 문제입니다. 예를 들어, here (rostering) 직원에 대한 흥미로운 논문이 있습니다. 이 부분 집합의 예는 Nurse Scheduling Problem입니다.

최적의 솔루션은 많은 노력이 필요합니다. 대신, 나는 이것을 손으로 최적화하는 것부터 시작합니다. 예를 들어 부서를 해당 직원 수 (오름차순)별로 정렬하는 것부터 시작하십시오. 그런 다음 스킬 수 (오름차순)별로 스태프를 분류합니다. 즉 가장 숙련되지 않은 스태프를 먼저 처리합니다.

그런 다음 부서 목록에 직원을 하나씩 할당하고 모든 사항이 충족되거나 문제가 해결 될 때까지 반복하십시오. 당신은 부서에 할당 할 직원이 부족합니다. 그런 다음 새로운 휴리스틱을 적용하십시오. 예를 들어, 문제가있는 부서를 원래 정렬 순서대로 한 슬롯 위로 이동하고 다시 시작하십시오.

거기에서 최적의 솔루션이 정말로 중요하다면 유전 알고리즘, 선형 프로그래밍 등을 연구 할 수 있습니다. 그러나이 상황에서는 과잉이라고 생각됩니다. 그렇지 않으면 할당 알고리즘을 수동으로 계속 조정하십시오.

직원 및 부서 목록을 모델링하는 한 상당히 정직합니다. 당신은 각 직원/부서에 대해 클래스 또는 구조체를 사용하고이를 목록에 저장합니다. 이렇게하면 모든 LINQ 기능에 액세스 할 수 있으므로 필요에 따라 정렬 된 목록 및 하위 집합을 생성 할 수 있습니다. 몇 가지 예가 온라인에 있습니다. 한 가지 토론 (및 LINQPad에 대한 좋은 참조)은 this question을 참조하십시오.

+0

내게 올바른 길을 찾아 주셔서 감사합니다. – user3182535

0

Linq를 사용하는 경우 .contains() 메소드를 사용해 볼 수 있습니다.

여기에 대한 msdn 페이지 링크가 있습니다.

http://msdn.microsoft.com/en-us/library/bb352880(v=vs.110).aspx

당신은 employeeN은 피씨 월드의 특정 필드가 포함되어 있는지 확인할 수 있습니다.

직원이 클래스 개체 내에 랩톱과 카메라가 있고 PCWorld도 있다고 가정합니다.

0

제 의견으로는 부서 수준에서 직원을 모으는 것이 더 바람직합니다. 그 반대도 아닙니다. 이를

Dictionary<Department, List<Employee>> 

을 통해 구성하거나 부서 유형에서 Employee collection 속성을 명시 적으로 정의 할 수 있습니다.

관련 문제