배낭 문제

Knapsack problem
1차원(제한) 배낭 문제의 예: 전체 무게를 15kg 이하로 유지하면서 돈의 양을 최대화하기 위해 어떤 상자를 선택해야 합니까?여러 가지 제약이 있는 문제는 상자의 무게와 부피를 모두 고려할 수 있습니다.
(솔루션: 각 박스가 몇 개라도 있으면 노란색 박스와 회색 박스가 각각 3개씩 표시됩니다.표시된 박스만 있으면 녹색 박스를 제외한 모든 박스가 표시됩니다.

배낭 문제조합 최적화의 문제입니다.각 항목에 가중치와 값을 지정하면 총 가중치가 지정된 제한 이하이고 총 값이 가능한 한 커지도록 컬렉션에 포함할 각 항목의 수를 결정합니다.그것은 고정 크기의 배낭에 묶여 가장 가치 있는 물건으로 채워야 하는 사람이 직면한 문제에서 그 이름을 따왔다.이 문제는 종종 자원 할당에서 발생하는데, 의사결정자는 각각 고정된 예산 또는 시간 제약 하에 분할할 수 없는 프로젝트 또는 태스크 중 하나를 선택해야 합니다.

배낭 문제는 한 세기 이상 연구되어 왔으며,[1] 초기 작품들은 1897년까지 거슬러 올라간다."납스팩 문제"라는 이름은 수학자 토바이어스 단치히 (1884–1956)[2]의 초기 저작으로 거슬러 올라가며, 짐을 너무 많이 싣지 않고 가장 가치 있고 유용한 물건들을 포장하는 흔한 문제를 가리킨다.

적용들

배낭 문제는 원재료 [3]절감을 위한 가장 낭비가 적은 방법 찾기, 투자[4]포트폴리오 선택, 자산유동화 증권화[5]위한 자산 선택, Merkle의 키 생성 등 다양한 분야의 실제 의사결정 프로세스에서 나타납니다.Hellman[6] 다른 배낭 암호 시스템들.

배낭 알고리즘의 초기 적용 사례 중 하나는 시험 응시자들이 어떤 문제에 대답할지에 대한 선택권을 갖는 시험 구성 및 채점이었다.작은 예를 들면, 수험생들에게 그러한 선택권을 주는 것은 꽤 간단한 과정이다.예를 들어, 시험에 각각 10점씩 12개의 문제가 포함되어 있는 경우, 응시자는 10개의 문제만 답하면 최대 100점을 얻을 수 있습니다.그러나 점 값의 이질적인 분포를 사용하는 검정에서는 선택 사항을 제공하기가 더 어렵습니다.Feuerman과 Weiss는 학생들에게 총 125점의 이질적인 시험을 치르는 시스템을 제안했다.학생들은 모든 질문에 최선을 다해 대답하도록 요구받는다.총점 값이 100인 문제의 가능한 부분 집합 중에서 배낭 알고리즘은 각 학생에게 가장 [7]높은 점수를 주는 부분 집합을 결정합니다.

1999년 Stony Brook University Algorithm Repository의 연구에 따르면 75개의 알고리즘 문제 중 배낭 문제가 19번째로 인기 있고 접미사 트리와 쓰레기통 포장 [8]문제 다음으로 세 번째로 필요한 것으로 나타났습니다.

정의.

The most common problem being solved is the 0-1 knapsack problem, which restricts the number of copies of each kind of item to zero or one.1 ~({ w_ 가 매겨진n개의 세트가 있는 경우, 각 항목에는 최대 W({ w가 있습니다.

i \
x {_ { i }^{ W i { , , }에 따릅니다.

\displaystyle })는 배낭에 포함할 i(\ i 인스턴스 수를 나타냅니다.비공식적으로 문제는 배낭에 있는 항목의 값의 합을 최대화하여 무게의 합이 배낭의 용량보다 작거나 같도록 하는 것이다.

BKP(Bounded Napsack Problem)는 각 항목이 1개뿐이라는 제한을 없앤다.단, 각 항목의 복사 })는 음이 아닌 최대 정수 값(\ c로 제한합니다.

i \
w W { _ { i=}^{ W { ,, \ {1, 에 따릅니다.

Unbounded Nacksack Problem(UKP;무제한 배낭 문제)는 각 항목의 복사 수에 상한을 두지 않으며 xi})에 유일한 제한은 음이 아닌 정수라는 점을 제외하고 위와 같이 공식화할 수 있습니다.

i \
w W { _ { i =}^{}\ WN 에 따릅니다.

무한 배낭 문제의 예로는 이 문서의 첫머리에 표시된 그림과 해당 그림의 설명에 있는 "각 상자의 임의의 수가 사용 가능한 경우"라는 텍스트를 사용합니다.

계산의 복잡성

배낭 문제는 여러 가지 이유로 컴퓨터 과학의 관점에서 흥미롭다.

  • 배낭 문제의 결정 문제 형식(무게 W를 초과하지 않고 최소 V달성할 수 있는가?)NP-완전하므로 모든 경우에서 정확하고 빠른(다항 시간) 알고리즘은 알려져 있지 않다.
  • 결정 문제는 NP-완전이지만 최적화 문제는 그렇지 않고, 그 해결은 적어도 결정 문제만큼 어렵고, 솔루션이 주어진 경우 최적인지 아닌지를 판단할 수 있는 알려진 다항식 알고리즘은 없습니다(즉, 더 V를 가진 솔루션이 없으므로 NP-완전 결정 문제를 해결할 수 있습니다).
  • 동적 프로그래밍을 사용하는 의사 다항 시간 알고리즘이 있습니다.
  • 완전 다항식 시간 근사 스킴이 있는데, 이 스킴은 의사 다항식 시간 알고리즘을 서브루틴으로 사용합니다.
  • 실제로 발생하는 많은 사례와 일부 분포의 "랜덤 인스턴스"는 그럼에도 불구하고 정확하게 해결할 수 있습니다.

"결정"과 "최적화" 문제 사이에는 "결정" 문제를 해결하는 다항식 알고리즘이 존재한다면 k의 값을 증가시키면서 이 알고리즘을 반복적으로 적용함으로써 다항식 시간에 최적화 문제의 최대값을 찾을 수 있다는 점에서 링크가 있다.한편, 알고리즘이 다항시간에 최적화 문제의 최적값을 구했을 경우, 이 알고리즘에 의해 출력되는 해답값과 k값을 비교함으로써 결정문제를 다항시간에 해결할 수 있다.따라서 문제의 두 버전은 모두 유사한 난이도를 가지고 있습니다.

연구 문헌의 한 가지 주제는 배낭 문제의 "하드" 인스턴스가 어떻게 [9][10]생겼는지, 또는 다른 방식으로 보는 것이며, 실제 인스턴스의 속성이 최악의 경우 NP-완전 [11]동작을 시사하는 것보다 더 다루기 쉽게 만드는지를 식별하는 것이다.이러한 "하드" 인스턴스를 찾는 목적은 Merkle-Hellman 배낭 암호 시스템과 같은 공개암호 시스템에서 사용하는 것입니다.

또한 주목할 점은 배낭 문제의 경도가 입력의 형태에 따라 달라진다는 사실이다.가중치와 이익을 정수로 지정하면 약 NP-완전인 반면 가중치와 이익을 유리수로 [12]지정하면 강 NP-완전이다.그러나 합리적인 가중치와 이익의 경우, 여전히 완전한 다항식 시간 근사 체계를 인정한다.

해결하는

동적 프로그래밍 접근법,[13] 분기제한[14] 접근법 또는 두 [11][15][16][17]접근법의 하이브리드화에 기초하여 배낭 문제를 해결하기 위해 여러 알고리즘을 사용할 수 있습니다.

동적 프로그래밍 사전 알고리즘

Unbounded Napsack Problem(UKP;무제한 배낭 문제)은 각 항목의 복사본 수에 제한을 두지 않습니다.게다가 여기서 i { style _ { } >0 이라고 합니다.

w {\ { { i= 1 }^{ w x i> 0 { > 에 따릅니다.

m[ { m [ ]의 속성은 다음과 같습니다.

.m [ ] { m [ 0 ]= 0 , \ !} (빈 세트의 합계)

.m [ ] ( + [ - , 2 + [ - ,. , n + [ - n m [ w ]= \ ( 1} +[ w _ { , v{ _ 2 } , { } , .아이템의 종류입니다.

두 번째 특성은 자세히 설명해야 합니다.이 메서드를 실행하는 동안 ww를 사용하여 를 얻는 방법은 과 같습니다.앞의 무게는w- ,w - - w 2,. - i w - - w i 입니다. 가 다릅니다.항목(중량과 값이 완전히 동일하지 않다는 의미) 각각의 값과 관련된 최대값을 미리 알고 있다면, 우리는 단지 그것들을 서로 비교하고 궁극적으로 최대값을 얻으면 끝입니다.

여기서 빈 세트의 최대값은 0으로 간주됩니다.m[ { m [ ] [ W { m [ W 까지의 결과를 표로 작성하면 해결 방법이 나타납니다.Since the calculation of each involves examining at most items, and there are at most values of to calculate, the running time of the dynamic programming solution is . Dividing w 1,2, w {\ \ 최대 공통 제수로 실행 시간을 향상시키는 방법입니다.

PnpNP라고 해도O W 배낭 문제가 NP-complete라는 사실과 모순되지 않습니다. Wn(\ n 문제에 대한 입력 길이에 있어서 다항식이 아니기 때문입니다.문제에 W 길이는 WW가 W W Wdisplaystyle Wdisplaystyle 의 비트 수에 비례합니다.단, 이 런타임은 의사다중공칭이기 때문에 (의 결정판) 배낭 문제가 약한 NP-완전 문제가 됩니다.

0-1 배낭 문제

A demonstration of the dynamic programming approach.
다이내믹 프로그래밍 접근법 시연

0-1 배낭 문제에 대한 유사한 동적 프로그래밍 솔루션도 의사 다항 시간에 실행됩니다. 1,, {\,,n}, 엄밀하게 양의 정수라고 합니다.m[ , m , ]{ w} 중량으로 얻을 수 있는 최대값으로 합니다i { i}항목).

m[ , { m [ , ] } 를 다음과 같이 재귀적으로 할 수 있습니다(정의 A).

  • [ , w] [ - , m [ , w ]= [ i - 1 , w] > \ _ { } ( w _ { i } > w , \ , \} ( 새로운 아이템은 현재 무게 제한보다 커집니다.
  • [ , w] ( m[ - , , [ - , - i] +i ) \ ( m [ i _ , w] , m [ i - 1 , w , m [ i - 1 , w ] + v _ { i} } ( ( max [ i - 1 、 w _ i } ) w _ i ) w _ sl _ sl } ifstylestyle 。 w

그런 다음 m, W { W을(를) 계산하면 해결 방법을 찾을 수 있습니다. 이를 효율적으로 수행하려면 표를 사용하여 이전 계산을 저장할 수 있습니다.

다이내믹 프로그램의 의사 코드를 다음에 나타냅니다.

// 입력: // 값(어레이 v에 저장) // 중량(배열 w에 저장) // 구분 항목 수 (n) // 배낭 용량 (W) // 메모:배열 "v" 및 배열 "w"는 인덱스 1에서 시작하는 모든 관련 값을 저장하는 것으로 가정합니다.  배열 m[0..n, 0..W]; 위해서 j 부터 0 로. W 하다:     m[0, j] := 0 위해서 i 부터 1 로. n 하다:     m[i, 0] := 0  위해서 i 부터 1 로. n 하다:     위해서 j 부터 0 로. W 하다:         한다면 w[i] > j 그리고나서:             m[i, j] := m[i-1, j]         또 다른:             m[i, j] := 맥스.(m[i-1, j], m[i-1, j-w[i]] + v[i]) 

따라서 이 솔루션은 O W 시간 O W 내에서 됩니다.(m[n,W] 값만 필요한 경우 필요한 메모리 양이 O(W)가 되도록 코드를 수정할 수 있습니다.이것에 의해, 어레이 「m」의 최근 2 행이 격납됩니다).

단, 한두 걸음 더 나아가면 O O 의 시간 내에 메서드가 실행된다는 것을 알 수 있습니다.정의 A에서는 항목 수 및 항목 시 모든 가중치를 계산할 필요가 없습니다.즉, 위 프로그램은 무게가 0에서 W로 자주 변경되기 때문에 필요 이상으로 계산됩니다.이 관점에서 이 메서드가 재귀적으로 실행되도록 프로그래밍할 수 있습니다.

// 입력: // 값(어레이 v에 저장) // 중량(배열 w에 저장) // 구분 항목 수 (n) // 배낭 용량 (W) // 메모:배열 "v" 및 배열 "w"는 인덱스 1에서 시작하는 모든 관련 값을 저장하는 것으로 가정합니다.  정의 가치[n, W]  초기화 모든. 가치[i, j] = -1  정의 m:=(i,j)         // 조건 하에서 얻을 수 있는 최대값을 나타내도록 함수 m을 정의합니다.첫 번째 i 항목을 사용하세요.총 무게 제한은 j입니다. {     한다면 i == 0 또는 j <=> 0 그리고나서:         가치[i, j] = 0         돌아가다      한다면 (가치[i-1, j] == -1) 그리고나서:     // m[i-1, j]가 계산되지 않았습니다. 함수 m을 호출해야 합니다.         가치[i-1, j] = m(i-1, j)      한다면 w[i] > j 그리고나서:                      // 가방 안에 물건이 들어가지 않습니다.         가치[i, j] = 가치[i-1, j]     또 다른:          한다면 (가치[i-1, j-w[i]] == -1) 그리고나서:     // m[i-1,j-w[i]가 계산되지 않았습니다.함수 m을 호출해야 합니다.             가치[i-1, j-w[i]] = m(i-1, j-w[i])         가치[i, j] = 맥스.(가치[i-1,j], 가치[i-1, j-w[i]] + v[i]) }  달려. m(n, W) 

예를 들어, 10개의 다른 품목이 있고 무게 제한은 67입니다.그렇게,

위의 방법을 사용하여m( {m(을 계산하면 m,({ m)=을 생성하는 콜을 제외하고 다음과 같이 됩니다.

게다가, 재귀를 깨고 트리로 바꿀 수도 있어.그런 다음 이 방법을 신속하게 실행하기 위해 몇 가지 작업을 줄이고 병렬 컴퓨팅을 사용할 수 있습니다.

전체 값뿐만 아니라 항목의 실제 하위 집합을 찾으려면 위의 함수를 실행한 후 이 작업을 수행할 수 있습니다.

/** * 최적의 배낭 항목의 인덱스를 반환합니다. * i: 배낭에 아이템1 ~ i를 넣을 수 있습니다. * j: 배낭의 최대 무게 */ 기능. 배낭(i: 인트, j: 인트): 세트< >인트> {     한다면 i == 0 그리고나서:         돌아가다 {}     한다면 m[i, j] > m[i-1, j] 그리고나서:         돌아가다 {i}  배낭(i-1, j-w[i])     또 다른:         돌아가다 배낭(i-1, j) }  배낭(n, W) 

미트 인 더 미들

0-1[18] 배낭의 또 다른 알고리즘은 1974년에 발견되었으며 암호학에서 유사한 이름의 알고리즘과 유사하기 때문에 "중간자와의 만남"이라고 불리기도 합니다.다만, 다른 항목의 수는 기하급수적이지만, WW가 n보다 클 DP 알고리즘보다 유리할 수 있습니다.특히 가 아닌 정수인 경우에도 스케일링 및 반올림(고정점 산술 사용)을 통해 동적 프로그래밍 알고리즘을 사용할 수 있지만, 이 문제로 인해 정답에 도달하기 위해 dd의 정밀도가 W W 10 스케일링해야 합니다.DP 알고리즘에는 O O O O시간이 합니다.

Meet-in-the-middle 알고리즘 입력: 가중치와 값을 가진 항목 집합.출력:서브셋의 최대 결합값입니다.집합 {1...n}을(를) 크기가 거의 동일한 두 집합 A와 B로 분할하여 A의 각 하위 집합에 대한 각 집합의 무게와 값을 계산하고, 결합된 무게가 W보다 작도록 가장 큰 값의 B의 하위 집합을 찾습니다.

이 알고리즘에는O)의 공간이 합니다.{ O(2 스텝3의 효율적인 실장(예를 들어 무게에 따라 B의 서브셋을 정렬하고, 값이 크거나 같은B의 다른 서브셋보다 무게가 큰B의 서브셋을 폐기하고, 바이너리 검색을 사용하여 최적의 일치를 찾아내는 등)은O()의 런타임으로 됩니다. ){ O ( ^ { / 2} 。암호화에서의 중간 공격에서의 만남과 마찬가지로, 이것은 순진한 무차별 포스 접근 의 모든 서브셋을 검사 ( 2 ) runtime에서 개선됩니다. 일정한 공간이 아닌 지수적 공간을 사용하는 비용('베이비 스텝 자이언트 스텝' 참조).

근사 알고리즘

대부분의 NP-완전 문제의 경우, 최적이 아니더라도 실행 가능한 해결책을 찾는 것으로 충분할 수 있습니다.단, 바람직하게는 근사치는 발견된 솔루션의 값과 최적 솔루션의 값의 차이에 대한 보증을 수반한다.

유용하지만 계산적으로 복잡한 많은 알고리즘과 마찬가지로 솔루션에 가까운 알고리즘을 만들고 분석하는 데 상당한 연구가 진행되어 왔습니다.배낭 문제는 NP-Hard이지만 여전히 지정된 정도까지 근사할 수 있는 알고리즘 집합 중 하나입니다.이것은 문제가 다항식 시간 근사 체계를 가지고 있다는 것을 의미합니다.정확히 말하면, 배낭 문제는 완전 다항식 시간 근사 체계(FPTAS)[19]를 가지고 있습니다.

탐욕 근사 알고리즘

George Dantzig는 무한 배낭 [20]문제를 해결하기 위해 탐욕스러운 근사 알고리즘을 제안했다.이 버전은 아이템을 무게 단위당 값 내림차순으로 정렬합니다. 1/ 1 vv / \ v _ { / w _ {1} \ v _ / _ {n}} .q until until until in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in inm{\ m 가방에 들어가는 아이템의 최대값인 gready 알고리즘은 m/ m/2 의 값을 수 있습니다.

각 종류의 품목의 공급이 제한되는 제한적인 문제의 경우, 위의 알고리즘은 최적과는 거리가 멀 수 있습니다.단, 간단한 수정만으로 이 문제를 해결할 수 있습니다.간단하게 하기 위해 모든 아이템이 봉투에 개별적으로 들어가 있다고 가정합니다( ii의 경우 w W아이템을 가능한 한 오랫동안 탐욕스럽게 포장하여 구축합니다(: {, {} = \ 서 k 1 k n i w 1 ′1 ′1 ′1 ′1 ′1 ′1 ′1 ′1 ′1 ′1 ′1 ′1 ′1 ′1{W 또한 첫 번째 항목이 맞지 않는 두 번째 2 { { S_}=\(를) 구축합니다 S_ 문제의 LP 완화에 대한 상한을 제공하므로 세트 중 하나에 m2 m 의 값이 필요합니다.(\1})과S2(\S_2}) 중 쪽이 더 이 더 좋은 것을 반환합니다1/2) 대략.

평균 성능은 n -1 / n로 최적의 분산 용액으로 수렴됨을 알 수 있다.

완전 다항식 시간 근사 체계

배낭 문제에 대한 완전 다항식 시간 근사 체계(FPTAS)는 문제에 알려진 다항식 시간 솔루션이 없는 이유가 항목과 관련된 이익이 제한되지 않기 때문이라는 사실을 이용한다.이익 값 중 가장 낮은 자릿수를 반올림하면, 그것들은 다항식과 1/θ에 의해 제한된다. 여기서 θ는 솔루션의 정확성에 대한 제한이다.이 제한은 알고리즘이 최적 [19]해법의 (1-θ) 계수 내에서 올바른 해법을 다항 시간 내에 찾을 수 있음을 의미합니다.

알고리즘 FPTAS 입력됩니다. ( \  style _ {} )및 중량 출력: S' the FPTAS solution P :   { v i i  1 n {  \ { v_ i } \  1 \ ~ n   { { i } :  K {  \  } { { _ {  \} for for for for for for for for for for for for for for for for outlined  for for for for for outlined outlined outlined for for for for for for for for for outlined for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for for

정리:위의 알고리즘에 의해 계산된 { S}는 t( ) i ( -) ) \ \ { ( (- \ )\ \ { profit ( S ) { profit } { profit } ( S} ( ) 。

지배 관계

필요 없는 아이템을 버리면 배낭 문제를 쉽게 해결할 수 있습니다.특정 i(\ i에 대해 총 무게가i(\i보다 작고 총 값이 i 값보다 큰 J(\ J 세트를 찾을 수 있다고 가정합니다.i를로 대체함으로써 하는 잠재적인 솔루션을 항상 개선할 수 있기 때문에 를 최적의 솔루션으로 나타낼 수 없습니다. 따라서하면 완전히 무시할 수 있습니다이 경우 J J i i한다고 합니다.(J J의 아이템은 이미 소진되었을 수 있으므로 경계 배낭 문제에는 해당되지 않습니다.)

지배적 관계를 찾는 것은 서치 공간의 크기를 크게 줄일 수 있습니다.지배 [11]관계에는 여러 가지 다른 유형이 있으며, 이들은 모두 형태의 불평등을 충족합니다.

x j ww i \jj}, \alpha \,i J J J J v v vv v v { \\ sum \ },

서 αZ + N \ \ Z _ { + } , \ N \ i \ x { x}는의 각 멤버의 복사 수를 나타냅니다

집단 우위
만약 항목의 J{J\displaystyle}에 조합의 총 무게 wi보다 그들의 총액 vi보다 큰 경우 그 나는{\displaystyle 나는}-th 항목 집합적으로 J{J\displaystyle}, 나는 J{i\ll J\displaystyle}≪ 쓴, 지배하고 있다.형식적으로,∑ j∈ Jwj)j≤ wi{\displa.\ _}," i _}},{jgeq v_ 일부 + {\n\styleq v_}yamic 프로그래밍 접근법.실제로 이는 V \ V =_ { i} , W \ W =_ { i} , J \ J되는 배낭 결정 문제를 해결하는 것과 같습니다.
문턱값 우위
i i 일부이 J J 의해 되는 경우, i({i의 문턱값은 J J 지배되는 문턱값입니다. 정식적으로는J( i J)입니다}},\leq \alpha \,w_{나는}\,x_{j}\ ∑ j∈ J'v'j)j≥ α vi{\displaystyle \sum_{j\in J}v_{j}\,x_{j}\\geq \alpha \,v_{나는}\,}을 위한 x∈ Z+n{\displaystylex\in Z_{+}^{n}}과α ≥ 1{\displaystyle \alpha \geq 1}. 이것은 일반화의 집단 지배가 처음 소개되 in[13]과 u.sedEDUK 알고리즘에 포함되어 있습니다.이와 가장 작은 α(\ \alpha (\ - 1)임계값을 정의합니다. 이 경우 최적의 솔루션은 최대1 \-1)의 i(\i를 포함할 수 있습니다.
다중 우위
i i - 번째 은 i i로 표기된 단일 ji)에 의해 곱셈됩니다. i i j j의 일부 복사본에 의해 지배되는 , 으로는 w (\ x x x x x x, w w w w\ w\le w. {\}( jZ+ { 경우). { , , j j { J = \ { j \ , \ , _ { j } = \ {{ w { } { w { } } \ 이 우세는 비교적 쉽게 검출할 수 있기 때문에 효율적으로 사용할 수 있다.
모듈러 우위
b 모든 대해 최적의 아이템으로 ., v b v i w w w w i} \ { {_ { i { _ { } 。이것은 가치 밀도가 가장 높은 아이템입니다. i - 번째 항목은 i단일 i)에 의해 좌우됩니다. i i ji)와 b(\ b의 여러 복사본에 좌우됩니다. 정식으로 w+ w입니다.j + b v { }. 즉, { , , , , j { J = \ { b , j \ , \ 1, x _ { b } , _ { j }.

바리에이션

배낭 문제는 기본 문제의 방대한 응용 프로그램에서 많은 변형이 발생합니다.주요 변동은 항목 수, 목표 수 또는 배낭 수와 같은 일부 문제 매개변수의 수를 변경함으로써 발생합니다.

다목적 배낭 문제

이 변동은 배낭을 채우는 개인의 목표를 변경합니다.금전적 이익의 최대화와 같은 하나의 목적 대신에, 그 목적은 여러 차원을 가질 수 있다.예를 들어, 경제적 목표뿐만 아니라 환경적 또는 사회적 우려가 있을 수 있다.자주 다루는 문제에는 포트폴리오 및 운송 로지스틱 [22][23]최적화가 포함됩니다.

예를 들어 유람선을 운영한다고 가정해 보겠습니다.당신은 유명한 코미디언을 몇 명 고용할지 결정해야 합니다.이 보트는 1톤 이하의 승객을 태울 수 있으며, 연예인의 몸무게는 1000파운드 미만이어야 합니다.각각의 코미디언들은 무게가 있고, 그들의 인기를 바탕으로 사업을 하고, 특정한 연봉을 요구해요.이 예에서는 여러 가지 목표가 있습니다.당신은 물론 연예인들의 인기를 극대화하는 동시에 그들의 출연료를 최소화하기를 원한다.또한, 당신은 가능한 한 많은 연예인을 갖고 싶어합니다.

다차원 배낭 문제

이 변형에서 배낭 중량은 w i ( 1,, i ) { {_ { i } = ( _ { i1} , , w _ { iD} )에 의해 주어지며, 배낭은 D차원 용량w_{ W_}, W, W, W, D, D, D, D, , D, D, D, D를 가진다.목표는 각 치수 ddisplaystyle 하지 않도록 배낭 내 아이템 값의 합계를 최대화하는 것입니다.

다차원 배낭은 배낭보다 계산이 어렵습니다. D D=2 에도 P {\ =} [24]NP가 아니면 EPTAS가 없습니다.단, 의 알고리즘은[25] sparse instance를 효율적으로 해결하는 것을 나타내고 있습니다.만약 m<>를 위한 일련 J){1,2,…, m}{\displaystyle J=\{1,2,\ldots ,m\}}은 다차원 배낭의 인스턴스;D{\displaystyle m<, 매우 부족하다.D}나는{\displaystyle 나는}모든 배낭을 메고 항목을 위한과 같이∃ z>입니다 나이{\displaystyle \exists;입니다 나이 z>}가∀ j∈ J∪{z}, 아니 나는 j ≥ 0{\displaystyle \fo. j J\{ 0 " "{z y { y J}= 예를 들어 무선 네트워크 [25]릴레이 노드에서 패킷을 스케줄링할 때 발생합니다.에서의[25] 알고리즘은 또한 객관식 변형, 객관식 다차원 배낭의 희박한 인스턴스도 해결합니다.

IHS(높이 선반 증가) 알고리즘은 2D 배낭(2차원 단위 크기 정사각형으로 정사각형을 패킹)에 최적입니다. 최적 [26]패킹에 정사각형이 최대 5개 있을 때 사용합니다.

다중 배낭 문제

변동은 빈 포장 문제와 유사합니다.이는 항목의 하위 집합을 선택할 수 있다는 점에서 빈 포장 문제와 다른 반면, 빈 포장 문제에서는 모든 항목을 특정 빈에 포장해야 합니다.배낭이 여러 개 있다는 콘셉트입니다.이것은 사소한 변경처럼 보일 수 있지만, 초기 배낭의 용량을 추가하는 것과 동등하지는 않습니다.이 변동은 Operations Research의 많은 로드 및 스케줄링 문제에 사용되며 다항식 시간 근사 [27]체계를 가지고 있습니다.

2차 배낭 문제

2차 배낭 문제는 2차 및 선형 용량 [28]제약에 따라 2차 목적 함수를 최대화한다.이 문제는 1980년 [29]Gallo, Hammer 및 Simeone에 의해 도입되었지만, 이 문제의 첫 번째 해결은 1975년 [30]Witzgall로 거슬러 올라간다.

부분집합 문제

서브셋 합계 문제는 각 항목의 무게가 }=와 같은 한 경우입니다.암호화 분야에서 배낭 문제라는 용어는 서브셋 합계 문제를 가리키기 위해 자주 사용되며 일반적으로 Karp의 21 NP-com 중 하나로 알려져 있습니다.사소한 [31]문제

부분집합 문제의 일반화를 다중 부분집합 문제라고 하는데, 이 문제에서는 동일한 용량을 가진 여러 개의 빈이 존재합니다.일반화에는 FPTAS[32]없는 것으로 나타났습니다.

기하학적 배낭 문제

기하학적 배낭 문제에는 값이 다른 직사각형 집합과 직사각형 배낭이 있습니다.목표는 가능한 한 큰 가치를 배낭에 [33]담는 것입니다.

「 」를 참조해 주세요.

메모들

  1. ^ Mathews, G. B. (25 June 1897). "On the partition of numbers" (PDF). Proceedings of the London Mathematical Society. 28: 486–490. doi:10.1112/plms/s1-28.1.486.
  2. ^ Dantzig, Tobias (2007). Number : the language of science (The Masterpiece Science ed.). New York: Plume Book. ISBN 9780452288119.
  3. ^ Kellerer, Hans; Pferschy, Ulrich; Pisinger, David (2004). Knapsack problems. Berlin: Springer. p. 449. ISBN 978-3-540-40286-2. Retrieved 5 May 2022.
  4. ^ Kellerer, Hans; Pferschy, Ulrich; Pisinger, David (2004). Knapsack problems. Berlin: Springer. p. 461. ISBN 978-3-540-40286-2. Retrieved 5 May 2022.
  5. ^ Kellerer, Hans; Pferschy, Ulrich; Pisinger, David (2004). Knapsack problems. Berlin: Springer. p. 465. ISBN 978-3-540-40286-2. Retrieved 5 May 2022.
  6. ^ Kellerer, Hans; Pferschy, Ulrich; Pisinger, David (2004). Knapsack problems. Berlin: Springer. p. 472. ISBN 978-3-540-40286-2. Retrieved 5 May 2022.
  7. ^ Feuerman, Martin; Weiss, Harvey (April 1973). "A Mathematical Programming Model for Test Construction and Scoring". Management Science. 19 (8): 961–966. doi:10.1287/mnsc.19.8.961. JSTOR 2629127.
  8. ^ Skiena, S. S. (September 1999). "Who is Interested in Algorithms and Why? Lessons from the Stony Brook Algorithm Repository". ACM SIGACT News. 30 (3): 65–74. CiteSeerX 10.1.1.41.8357. doi:10.1145/333623.333627. ISSN 0163-5700. S2CID 15619060.
  9. ^ 피싱어, D. 2003배낭의 어려운 문제는 어디에 있습니까?테크니컬 리포트 2003/08, 덴마크 코펜하겐 대학교 컴퓨터 과학부.
  10. ^ Caccetta, L.; Kulanoot, A. (2001). "Computational Aspects of Hard Knapsack Problems". Nonlinear Analysis. 47 (8): 5547–5558. doi:10.1016/s0362-546x(01)00658-7.
  11. ^ a b c Poirriez, Vincent; Yanev, Nicola; Andonov, Rumen (2009). "A hybrid algorithm for the unbounded knapsack problem". Discrete Optimization. 6 (1): 110–124. doi:10.1016/j.disopt.2008.09.004. ISSN 1572-5286.
  12. ^ Wojtczak, Dominik (2018). "On Strong NP-Completeness of Rational Problems". International Computer Science Symposium in Russia. Lecture Notes in Computer Science. 10846: 308–320. arXiv:1802.09465. doi:10.1007/978-3-319-90530-3_26. ISBN 978-3-319-90529-7. S2CID 3637366.
  13. ^ a b Andonov, Rumen; Poirriez, Vincent; Rajopadhye, Sanjay (2000). "Unbounded Knapsack Problem : dynamic programming revisited". European Journal of Operational Research. 123 (2): 168–181. CiteSeerX 10.1.1.41.2135. doi:10.1016/S0377-2217(99)00265-9.
  14. ^ S. 마르텔로, P.Toth, 배낭 문제:알고리즘과 컴퓨터 구현, John Wiley and Sons, 1990
  15. ^ S. 마르텔로, D.삐삐삐삐삐삐삐삐삐삐삐삐삐삐삐삐삐.0-1 배낭 문제에 대한 동적 프로그래밍강력한 경계, 관리. 경전, 45:414~424, 1999.
  16. ^ Plateau, G.; Elkihel, M. (1985). "A hybrid algorithm for the 0-1 knapsack problem". Methods of Oper. Res. 49: 277–293.
  17. ^ Martello, S.; Toth, P. (1984). "A mixture of dynamic programming and branch-and-bound for the subset-sum problem". Manag. Sci. 30 (6): 765–771. doi:10.1287/mnsc.30.6.765.
  18. ^ Horowitz, Ellis; Sahni, Sartaj (1974), "Computing partitions with applications to the knapsack problem", Journal of the Association for Computing Machinery, 21 (2): 277–292, doi:10.1145/321812.321823, hdl:1813/5989, MR 0354006, S2CID 16866858
  19. ^ a b 바지라니, 비제이근사 알고리즘Springer-Verlag Berlin Heidelberg, 2003.
  20. ^ Dantzig, George B. (1957). "Discrete-Variable Extremum Problems". Operations Research. 5 (2): 266–288. doi:10.1287/opre.5.2.266.
  21. ^ Calvin, James M.; Leung, Joseph Y. -T. (1 May 2003). "Average-case analysis of a greedy algorithm for the 0/1 knapsack problem". Operations Research Letters. 31 (3): 202–210. doi:10.1016/S0167-6377(02)00222-5.
  22. ^ 장, T.J. 등카디널리티 제약 포트폴리오 최적화를 위한 휴리스틱스.테크니컬 리포트, 런던 SW7 2AZ, 영국:1998년 5월 임페리얼 칼리지 경영학교
  23. ^ 장, C.S. 등"DC 철도 시스템의 트랙션 변전소에 대한 유전자 알고리즘 기반의 바이리테리온 최적화"포겔 [102], 11-16.
  24. ^ Kulik, A.; Shachnai, H. (2010). "There is no EPTAS for two dimensional knapsack" (PDF). Inf. Process. Lett. 110 (16): 707–712. CiteSeerX 10.1.1.161.5838. doi:10.1016/j.ipl.2010.05.031.
  25. ^ a b c 코헨, R. 및 그레블라, G. 2014."릴레이 노드가 있는 무선 네트워크에서의 다차원 OFDMA 스케줄링"프로세서에 있습니다. IEEE INFOCOM'14, 2427–2435
  26. ^ Yan Lan, György Dosa, Shin Han, Cheyang Zhou, Atila Benk [ [ 1 ]: 2D 배낭: 포장용 사각, 이론 컴퓨터 과학 Vol. 508, 35-40 페이지.
  27. ^ Chandra Chekuri and Sanjeev Khanna (2005). "A PTAS for the multiple knapsack problem". SIAM Journal on Computing. 35 (3): 713–728. CiteSeerX 10.1.1.226.3387. doi:10.1137/s0097539700382820.
  28. ^ Wu, Z. Y.; Yang, Y. J.; Bai, F. S.; Mammadov, M. (2011). "Global Optimality Conditions and Optimization Methods for Quadratic Knapsack Problems". J Optim Theory Appl. 151 (2): 241–259. doi:10.1007/s10957-011-9885-4. S2CID 31208118.
  29. ^ Gallo, G.; Hammer, P. L.; Simeone, B. (1980). Quadratic knapsack problems. Mathematical Programming Studies. Vol. 12. pp. 132–149. doi:10.1007/BFb0120892. ISBN 978-3-642-00801-6.
  30. ^ Witzgall, C. (1975). "Mathematical methods of site selection for Electronic Message Systems (EMS)". NASA Sti/Recon Technical Report N. NBS Internal report. 76: 18321. Bibcode:1975STIN...7618321W.
  31. ^ 리처드 M. 카프(1972년)."조합적 문제의 경감"R. E. 밀러와 J. W. 대처(편집자)에서.컴퓨터 계산의 복잡성.뉴욕: 플레넘. 페이지 85~103
  32. ^ Caprara, Alberto; Kellerer, Hans; Pferschy, Ulrich (2000). "The Multiple Subset Sum Problem". SIAM J. Optim. 11 (2): 308–319. CiteSeerX 10.1.1.21.9826. doi:10.1137/S1052623498348481.
  33. ^ Abed, Fidaa; Chalermsook, Parinya; Correa, José; Karrenbauer, Andreas; Pérez-Lantero, Pablo; Soto, José A.; Wiese, Andreas (2015). On Guillotine Cutting Sequences. pp. 1–19. doi:10.4230/LIPIcs.APPROX-RANDOM.2015.1. ISBN 978-3-939897-89-7.

레퍼런스

외부 링크