분기 및 바운드 설명


9

분기 및 바운드 알고리즘 에 대한 테스트가 있습니다. 이론적 으로이 알고리즘의 작동 방식을 이해하지만이 알고리즘을 실제로 구현하는 방법을 보여주는 예제를 찾을 수 없었습니다.

나는 이것 과 같은 몇 가지 예를 찾았 지만 여전히 혼란 스럽습니다. 나는 또한 여행하는 판매원 문제를 찾았고 이해할 수 없었습니다.

내가 필요한 것은 몇 가지 문제이며 분기 및 바운드를 사용하여 이러한 문제를 어떻게 해결할 수 있습니까?


1
이해하기 어려웠습니까? 전에 역 추적 을 시도 했 습니까?

응, 해봤 어 B & B의 문제는 B & B로 해결할 수있는 문제가 발생하면 각 노드의 하한을 얻는 방법과 목적 함수를 얻는 방법을 모른다는 것입니다. 또한 각 하한과 비교할 때 가장 좋은 값은 무엇입니까?
MR.NASS

2
@ MR.NASS 나는 당신이 당신의 마지막 코멘트에서 정확히 무슨 말을하는지 모르겠습니다. 설명하려고 노력하겠습니다. B & B는 검색 트리를 제거하는 방법입니다. 목적 함수를 최적화해야하는 문제에 적용 할 수 있습니다. 일반적으로 이산 또는 조합 최적화 문제에 적용됩니다. 각 단계에서 가능한 모든 나머지 솔루션에 대한 목적 함수의 하한을 찾으려고합니다. 하한이 현재 최상의 솔루션보다 높으면 낮은 점수를 가진 솔루션이 없으므로 검색 및 역 추적을 중지 할 수 있습니다 (검색 트리 정리).
조지

2
일반적으로 문제의 완화 된 버전을 해결하여 하한을 얻습니다. 혼합 정수 프로그램의 경우 이는 일반적으로 선형 프로그래밍 완화입니다.
수신 거부

2
@ MR.NASS 목적 함수에 따라 다릅니다. Sid가 말했듯이 일반적으로 주어진 문제의 편안한 버전을 해결합니다. 일반적으로 초기 문제의 근사치를 제공하고 효율적으로 해결할 수있는 편안한 버전을 사용하려고합니다. 완화 버전은 제대로 작동하려면 최대 하한을 제공해야합니다. 또 다른 예 : B & B 방법으로 MAXSAT를 해결한다고 가정합니다. 주어진 부분 진리 할당에 대해 만족 된 절 수를 쉽게 계산할 수 있습니다. 상한 (이것은 최대화 문제이므로) ...
George

답변:


10

배낭에 브랜치와 바운드를 적용 해 봅시다 .

우리는 라벨이 지정된 항목 1 에 이르기까지 . V나는 의 가치는 나는th 항목 나는그 무게. 우리는 그들을 포함 할 수있는 배낭에 그것들을 맞추려고합니다. 우리는 배낭에 넣은 품목 값의 합계를 최대화하려고합니다.

일반적인 역 추적 방식은 우리의 기초입니다. 우리는 먼저 넣어V1 팩에 넣은 다음 나머지 문제를 해결하십시오. 1재귀가있는 항목. 그런 다음 제거V1 팩에서 나머지에 대한 문제를 해결 1 우리는 우리가 찾은 최고의 구성을 반환합니다.

이 역 추적은 Branch and Bound의 '지점'부분입니다. (백팩의 경우) 두 가지 경우를 분기합니다.나는 솔루션의 일부입니다 '및'항목 나는솔루션의 일부가 아닙니다. ' 왼쪽 자식은 한 경우이고 오른쪽 자식은 다른 경우 인 이진 트리로이를 시각화 할 수 있습니다. 이 트리는 검색 트리 (또는 검색 공간 )입니다. 깊이는따라서 영형(2)노드. 따라서 알고리즘은 항목 수에서 실행 시간 지수를 갖습니다.

이제 우리는 'Bound'부분에 도달합니다. '이 구성은 결코 작동하지 않으므로 계산을 방해하지 않을 수도 있습니다.'라고 말할 수있는 기준을 찾으려고 노력합니다. 그러한 기준의 예는 '백팩에 이미 넣은 품목의 무게가': 예를 들어 첫 번째를 추가 한 경우 /2 배낭에 항목이 이미 가득 찼으므로 항목을 넣으려고 할 필요가 없습니다. /2+1 에 이르기까지 배낭에도 있지만, 어떤 부분 집합에도 적합하지는 않습니다. /2+1 에 이르기까지 배낭에 이미 가득 찼으므로 2/2사례. 또 다른 예는 ' 나머지 항목을 모두 넣더라도 내가 넣은 항목의 값이 지금까지 찾은 최고의 구성을 초과하지 않습니다 '입니다.

이러한 기준은 기본적으로 검색 트리의 일부를 제거합니다. 일부 노드에서 예를 들어 '왼쪽 하위 트리는 나에게 더 나은 구성을 제공하지 않습니다. X 때문에'해당 하위 트리를 잊어 버리고 탐색하지 않습니다. 깊이의 하위 트리 이 방법으로 잘라 당신을 저장 영형(2) 운이 좋으면 속도가 약간 증가 할 수 있습니다.

이것은 일반적으로 어떤 종류의 하한 또는 상한을 포함하기 때문에 ' 경계 ' 라고 합니다. 나머지 항목을 모두 넣더라도 기준에 대해서는 내가 넣은 항목의 값이 최상의 구성을 초과하지 않습니다. 나는 지금까지 발견했습니다. 지금까지 최고의 구성의 가치는 최고의 구성의 하한입니다. 따라서이 하한을 지나치지 않는 모든 것은 실패 할 운명입니다.

'바운드'부분을 원하는만큼 복잡하게 만들 수 있습니다. 예를 들어 정수 프로그래밍 문제는 완화를 사용하여 종종 해결됩니다. 프로그램을 선형 프로그램으로 완화하여 다항식 시간으로 해결할 수 있으며 이진 변수에 대해 많은 경우를 해결할 수 있습니다. 그런 다음 나머지 옵션을 분기합니다.

Branch and Bound는 일반적으로 실제 속도 만 향상 시키지만 이론 상으로는 그렇지 않습니다. 휴리스틱을 사용하여 검색 트리가 얼마나 잘려 있는지 정확하게 말하기는 어렵습니다. 이것은 실제로 이러한 문제에 사용 된 여러 가지 휴리스틱에 의해 입증됩니다. 운이 좋지 않으면 많은 검색 범위가 있어도 나머지 검색 트리가 크게 유지됩니다.


4

일정 기간과 마감일이있는 작업을 시스템에 지정하는 작업 인 스케줄링을 고려하십시오 . 우리는 별개의 시간을 가정합니다. 이러한 많은 문제는 NP (O)-하드입니다.

특히이 답변은 1아르 자형나는최대즉, 우리는 일정입니다

  • 하나의 기계에서
  • 출시일 문제와 우리
  • 최대 지연을 최소화 최대즉, 모든 작업에서 마감 시간과 완료 시간의 최대 차이입니다.

이 문제의 결정 버전은 NP-hard입니다. 이것은 3PARTITION 에서 줄임 으로써 알 수 있습니다 .

흥미롭게도, 우리가 선점 을 허용 하여 활성 작업을 교체하는 경우,이 문제는 가장 빠른 마감일 첫 휴리스틱 (수정 마감일)에 의해 2 차 시간으로 해결 될 수 있습니다. 이 변형의 최적 솔루션이 원래 문제의 최적 솔루션보다 나쁘지 않다는 것을 쉽게 알 수 있습니다.

이제이 문제에 Branch & Bound를 적용하려면 몇 가지 매개 변수를 수정해야합니다.

  • 선점을 허용하고 EDD를 사용하여 하한을 계산합니다.
  • 예약되지 않은 모든 작업을 다음 작업으로 수정하여 분기합니다.
  • 우리는 작은 하한을 가진 아이에게 먼저갑니다.

B & B를 적용 할 때마다이 작업을 수행해야합니다.


구체적인 예를 들어, 1아르 자형나는최대:

나는124나는4265아르 자형나는015나는8121110

나는 작업 처리 시간 아르 자형나는 출시일 나는 마감일.

위에서 지정한대로 B & B를 실행하면 다음이 발생합니다.

연산
이 GIF는 반복되지 않습니다. 처음부터 보려면 새 탭에 다시로드 하십시오.
[ 소스 ] [ 정적 버전 ]

41 개 노드 중 4 개만 올바르게 방문하고 10 개만 하한을 계산합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.