엑셀 VBA에서 배낭 문제
우리는 배낭 문제의 작은 인스턴스를 해결 엑셀 VBA에서 프로그램을보고 아래.
정의 : 총 값은 가능한 한 크게하고 총 중량을 적게 소정 한도를 초과하도록 항목 세트, 중량 및 값 각 집합에 포함시킬 항목을 결정 주어.
그것은 고정 된 크기의 배낭에 의해 제약되고 가장 유용한 항목을 작성해야합니다 사람이 직면 한 문제에서 자사의 이름을 파생합니다.
예 : 무게, 가치와 한계 5 개 항목 주어진.
Excel에서이 문제는 보이는 다음과
-
먼저, 우리는 이름 제한, 체중, 가치, totalWeight 및 maximumValue와 유형을 두 번 다섯 개 가지 변수를 선언합니다.
Dim limit As Double, weight As Double, value As Double, totalWeight As Double, maximumValue As Double
-
다음으로, 우리는 이름 I, J, K, L, m과 타이핑 정수 다섯 개 변수를 선언.
Dim i, j, k, l, m As Integer
-
우리는 두 개의 변수를 초기화합니다. 우리는 셀 D6의 값으로 변수 제한을 초기화합니다. 우리는 값이 0으로 변수 maximumValue를 초기화
limit = Range("D6").value maximumValue = 0
-
다음으로, 우리는 각각의 가능한 솔루션을 확인한다. 우리는 하나의 항목 (1)을 포함하거나 (0)을 생략 할 수 있습니다. 우리는 다음 루프를 들어 5를 시작합니다. 각 항목에 대해 하나.
For i = 0 To 1 For j = 0 To 1 For k = 0 To 1 For l = 0 To 1 For m = 0 To 1
-
우리는 중량 및 가능한 솔루션의 값을 계산한다.
weight = 12 i + 2 j + 1 k + 1 l + 4 m value = 4 i + 2 j + 2 k + 1 l + 10 m
값이 maximumValue보다 높은 무게 한계보다 낮은 경우에만 6. 우리는 새로운 더 나은 솔루션을 찾았습니다.
If value > maximumValue And weight <= limit Then
-
true의 경우, 우리는 maximumValue에 새 totalWeight에 4 행, 무게 솔루션과 가치를 작성합니다.
Range("B4").value = i Range("C4").value = j Range("D4").value = k Range("E4").value = l Range("F4").value = m totalWeight = weight maximumValue = value
-
만약 문을 닫을 것을 잊지 마십시오.
End If
-
다음 루프를 들어 5를 종료하는 것을 잊지 마십시오.
Next m Next l Next k Next j Next i
엑셀 VBA 수표 각각의 가능한 솔루션을 최적의 솔루션을 기억 행 4에 우리는 우리가 그것을두고 항목, 0 수단을 포함 한 수단을 나타납니다 결과로 이런 식으로합니다.
-
마지막으로, 각각의 셀 B6 및 B8에 최적의 솔루션과 totalWeight maximumValue 물품.
Range("B6").value = totalWeight Range("B8").value = maximumValue
-
시험 프로그램.
결과 :
결론 : 그것의 최적 15. 2 + 1 + 1 + 4 = 8 (15)의 한계를 초과하지 않는
합계 중량이 용액의 최대 값이 마지막 네 개의 항목을 포함하는 참고 :이 크기의 배낭 문제를 해결할 수있는 무게와 값 변수를 만들어 (다운로드 Excel 파일 참조).