2009-09-08 5 views
2

은 내가 MS Solver Foundation 실험을 사용하려면 다음과 같은 간단한 문제가있다. 다음 제약 조건을 준수해야합니다.MS Solver Foundation을 사용하여 간단한 일정 문제를 모델링하는 방법은 무엇입니까?</p> <p>내가 30 일 동안 하루에 두 노동자가 필요 어디 일정이 있습니다

  • 아무도 2 일 연속으로 일해야합니다.
  • 특별한 예외가 적용되지 않는 한 사람들은 일주일에 한 번만 사용해야합니다.
  • 일부 사람들은 주말에만 근무할 수 있습니다.
  • 일부 사람들은 주중에만 근무할 수 있습니다.

모델을 채우기 위해 C#을 사용할 계획이지만 모델링을 시작하는 데 도움이 필요합니다. 이 유형의 문제를 해결하기 위해 의사 결정, 매개 변수 및 제약 조건을 설정하는 방법을 잘 모르겠습니다.

업데이트 : 분노 앤 저주가 좋은 시작을 가지고 있지만, 내가 프레임 워크를 사용하는 제약을 표현하기보다는 모든 사람에 대해 개별적으로 코딩해야하는보다 선언적인 방법이 상상해야. MSF에 익숙한 사람이라면 누구나이 건설에 도움이 될 수 있습니까?

+0

어떤 것을 최적화 하시겠습니까? 필요한 인원은 몇 명입니까? –

+0

결국, 예. 처음에는 실현 가능한 솔루션을 만들고 싶습니다. 다행스럽게도 이러한 단순한 제약 조건을 얻은 후에는 개별적인 사람들의보다 구체적인 취향을 존중하기 위해이 제약 조건을 확장 할 수 있습니다. – Larsenal

+0

제약 기반 접근 방식을 사용하여이 작업을 수행하려고한다는 것을 알고 있습니다. 따라서이 정보를 대답으로 제공하지는 않지만 정보 만 제공하면 흥미로운 대체 접근 방식과 일치하는 부분을 찾을 수도 있습니다. 다음을 참조하십시오 : https://stackoverflow.com/questions/1221990/hungarian-algorithm-and-multiple-factors/1222263#1222263 –

답변

1

사람이 n 사람인 경우 30n 이진 정수 매개 변수를 정의해야합니다.이 매개 변수는 특정 날짜에 사람이 근무하는지 여부를 나타냅니다.

P<xx>D<yy> == 1 => Person <xx> works on day <yy> 
P<xx>D<yy> == 0 => Person <xx> does not work on day <yy> 

그런 다음 2 일 연속으로 작업하지 못하게하려면 제약 조건이 필요합니다. 이것은 29n 제약이 될 것입니다.

P<xx>D<yy> + P<xx>D<yy+1> <= 1 

그런 다음 주당 한 번만 작업하도록 제한이 필요합니다. 첫 주에는 다음과 같으며 다음 3 주 동안은 비슷합니다.

P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 + P<xx>D05 + P<xx>D06 <= 1 

지난주의 사항은 다음과 같습니다.

P<xx>D28 + P<xx>D29 <= 1 

이것은 또 다른 5n 제약 조건을 산출 할 것이다. 그 다음 평일에만

P<xx>D05 + P<xx>D06 == 0 
P<xx>D12 + P<xx>D13 == 0 
P<xx>D19 + P<xx>D20 == 0 
P<xx>D26 + P<xx>D27 == 0 

주말에만

P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 == 0 
P<xx>D07 + P<xx>D08 + P<xx>D09 + P<xx>D10 + P<xx>D11 == 0 
P<xx>D14 + P<xx>D15 + P<xx>D16 + P<xx>D17 + P<xx>D18 == 0 
P<xx>D21 + P<xx>D22 + P<xx>D23 + P<xx>D24 + P<xx>D25 == 0 
P<xx>D28 + P<xx>D29 == 0 

을 제약 조건을 추가하고 마지막으로 대상 기능을 추가 할 수 있습니다.

+0

용어에 대한 지식이 부족한 점은 용납되지 않지만 대상 기능의 예는 무엇입니까? – Larsenal

+0

traget 함수는 최적화하려는 목표를 나타냅니다.나는 예를 들었을 지 모르지만 나는 의미있는 것을 생각해 낼 수 없었다. 어쩌면 0 일 동안 일하는 사람의 수를 최대화 할 수 있으며 따라서 일을 성취하기 위해 필요한 사람들의 수를 최소화 할 수 있습니다. 하지만 솔버 파운데이션에서 어떻게 표현할 수 있을지 확신하지는 않습니다. –

+0

통찰력에 감사드립니다. 일단 내가 이것을 시도 할 수있는 기회가 생기면,이 질문으로 돌아가서 답을 얻을 것입니다. – Larsenal