7

대화식 작업 스케줄링 어플리케이션에서 작업 중입니다. 해당 용량/사용 가능 프로파일이있는 자원 세트, 이러한 자원에서 실행될 작업 세트 및 사용자가 수동으로 이동할 수있게하려는 작업의 작업 순서 및 가장 이른/최신 시작/종료 시간을 결정하는 일련의 제한 조건 주위에 직업. 본질적으로 저는 사용자가 작업 네트워크의 노드를 "잡아"제약 조건을 위반하지 않고 앞으로/뒤로 드래그 할 수 있기를 바랍니다.스케줄링 어플리케이션에서 제한된 그래프 변환

이미지는 간단한 구성 예를 보여줍니다. 끝의 삼각형 작업은 모든 작업의 ​​최신 완료 시간을 나타내며 작업 간 연결 라인은 작업에 대한 주문을 부과하고 회색/녹색 막대는 자원 가용성 및로드를 나타냅니다.

작업을 끌어서 일정을 압축 할 수 있습니다. 작업은 용량 프로파일이 다르므로 길이가 변경됩니다.

나는 약간의 효과가있는 애드혹 (ad-hock) 알고리즘을 구현했습니다. 그러나 여전히 실패하고 일부 제약 조건을 위반하는 경우가 있습니다. 그러나 작업 - 상점 예약은 일반적인 NP 하드 문제에 대한 최적의 (또는 좋은) 해결책을 찾기위한 많은 알고리즘과 경험적 방법을 가진 잘 연구 된 분야이기 때문에 좀 더 쉬운 하위 집합을위한 솔루션이 있어야한다고 생각합니다. 제약 프로그래밍 주제 및 심지어 물리 기반 솔루션 (정적 관절을 통해 연결된 강체)을 살펴 보았지만 지금까지는 아무 것도 찾을 수 없었습니다. 어떤 포인터/힌트/팁/나를위한 핵심 단어 검색?

+1

저는이 문제를 완전히 이해하지 못합니다. 죄송합니다. 왜 일자리가 바뀔까요? 노드를 잡고 움직일 때 무슨 뜻 이니? 직업이 노드입니까? 감사. –

+0

위와 같은 네트워크는 대화식 끌어서 놓기 조작을 통해 수정할 수 있습니다. 작업 ("작업"이라고 표시된 그래프의 노드)을 클릭하고 다른 곳으로 이동하십시오. 작업 기간은 사용 가능한 용량 (회색/녹색 막대)에 따라 달라 지므로 이동하는 동안 작업 길이가 변경됩니다. – BuschnicK

+0

나는 이해하지 못한다. 특정 작업 이동을 만족시키기 위해 다른 작업을 돌아가고 싶습니까? 예를 들어 job032를 왼쪽으로 끌면 job029와 job031이 일정을 재조정하여 job032가 시작되기 전에 job031이 종료됩니다. 그렇다면 다른 작업에 대해 수행 할 수있는 작업 (시간 안에 이동, 자원 변경 등)을 알려줘야합니다. 리소스가 간단하게 공유됩니까? (예 : 동일한 리소스에서 실행되는 두 개의 단위 작업은 완료하는 데 2 ​​단위 시간이 걸립니다)? –

답변

0

변화하는 제약 조건을 처리하기 위해 Waltz 제약 전파 알고리즘을 변경하여 주어진 솔루션이 유효한지 신속하게 파악할 수 있습니다. 나는 손에 대한 참조가없는, 그러나 이것은 올바른 방향을 알려줄 수 있습니다 문제 상품의 정수만을 가진 경우 http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6TYF-41C30BN-5&_user=809099&_rdoc=1&_fmt=&_orig=search&_sort=d&_docanchor=&view=c&_searchStrId=1102030809&_rerunOrigin=google&_acct=C000043939&_version=1&_urlVersion=0&_userid=809099&md5=696143716f0d363581a1805b34ae32d9

1

내가보기 엔 당신이 Mozart Oz에서 살펴 좋습니다. Oz는 유한 도메인 에 대한 우수한 사양, 추론 및 최적화를 지원합니다. 귀하의 경우에는 일반적으로 다음을 수행 할 것입니다 :

  1. 는 선언적 방식으로 제약 조건을 지정합니다. 여기에서 은 모든 변수와 해당 도메인을 지정합니다 (예 : V1 : 1 # 100은 V1 변수가 1에서 100 사이의 값을 가질 수 있음을 의미합니다). 어떤 변수 은 V1 : 99와 같은 값을 직접 가질 수 있습니다. 또한 변수에 대한 모든 제약 조건을 으로 지정합니다.

  2. 시스템에 솔루션을 요청하십시오. 제약 조건 또는 최적 솔루션을 만족하는 솔루션을 찾으십시오. 그런 다음이 솔루션을 UI에 표시합니다.

  3. 사용자가 변수의 값을 변경한다고 가정 할 때, 작업 시작 시간은 일 수 있습니다. 이제 1 단계로 가서 Oz 솔버에 문제를 게시 할 수 있습니다. 이번에는 모든 변수가 이미 인스턴스화되어 있기 때문에 문제를 해결하는 데 가장 많은 시간이 걸릴 것입니다.

    사용자가 일치하지 않는 값을 선택한 경우 일 수 있습니다. 그 경우 솔버는 null을 반환합니다. 그런 다음 UI를 이전 솔루션으로 가져올 수 있습니다.오즈는 사용자의 요구에 맞는 당신이 언어를 좋아하는 경우에 소켓에서 수신 서버로 해석 제약을 쓰기에

은, 당신은 할 수 있습니다. 이 방법을 사용하면 제약 조건 해결자를 UI가 포함 된 나머지 코드와 구분하여 유지할 수 있습니다.

희망이 도움이됩니다.

+0

포인터 주셔서 감사. 나는 그것에 대한 빠른 스캔을했고 나는 조금 회의적이었다 : 1) 문제를 재구성/재구성해야하는 새로운 언어를 배우자. 2) 모차르트 오즈는 최적의 작업 일정을 찾는 휴리스틱 최적화 프레임 워크처럼 보인다. 네트워크를 수동으로 편집 할 때 모든 제약 조건을 만족시키는 제품을 찾고 있습니다. 3) 실시간 대화 형 성능? – BuschnicK

+0

1) 그건 중요한 문제입니다. 2) "제약 조건 만족"을 할 수 있습니다. 원하는 경우에만 최적화를 수행 할 수 있습니다. "돈 더 보내기"예제를보십시오. 3) 제약 조건 만족 (최적화가 아닌)을 위해서는 대화식 성능이 문제가되지 않아야합니다. – prp

0

lp_solve와 같은 정수 선형 엔진을 사용 해본 적이 있습니까? 그것은 스케줄링 어플리케이션에 매우 적합합니다.

나는 여러 가지 이유로 제약 프로그래밍에 찬성 투표를 할
1

:

제약 조건을 satifies에는 일정이없는 경우 신속하게 당신을 말할 것이다 1) CP

2) 당신이 제공 할 것으로 생각된다 당신은 처음으로 실행할 수있는 솔루션을 사용하지만, 은 솔루션을 향상시키기 위해 작업을 조작 할 수 있습니다. CP도 이것으로 좋습니다.

3) MILP 접근법은 일반적으로 복잡하고 공식화하기 어렵고 인위적으로 목적 함수를 만들어야합니다.

4) CP는 특히 숙련 된 프로그래머에게 배우기가 어렵지 않습니다. 실제로 컴퓨터 과학 커뮤니티에서 운영 연구원 (나 같은)보다 더 많이 제공됩니다.

행운을 빈다.