ABC Corporation은 전기 부품 및 부품의 글로벌 유통업체입니다. 회사는 유럽에서 부품과 부품을 구매하기로 계약을 맺고 이를 유럽의 3개 항구 E1, E2, E3의 창고로 배송했습니다. 다양한 구성 요소와 부품은 미국 고객의 요구에 따라 컨테이너에 적재됩니다. 각 항구에는 매달 사용할 수 있는 컨테이너 수가 고정되어 있습니다. 그런 다음 컨테이너는 컨테이너 선박을 통해 P1, P2, P3 및 P4 항구로 해외로 배송됩니다. 이러한 항구에서 컨테이너는 일반적으로 트럭과 연결되어 I1, I2 및 I3의 내륙 항구로 운반됩니다. 매달 각 항구에는 고정된 수의 화물 운송업체가 있습니다. 이러한 내륙 항구는 컨테이너가 수집되어 한 운송 모드에서 다른 운송 모드로(즉, 트럭에서 철도로, 또는 그 반대로) 운송되는 "화물 마을" 또는 복합 운송 교차점이라고도 합니다. 내륙 항구에서 컨테이너는 D1, D2, D3, D4 및 D5에 있는 ABC의 유통 센터로 운송됩니다. 다음은 이 해외 공급망을 따라 각 승선 지점과 목적지 지점과 각 항구에서 사용 가능한 컨테이너 사이의 처리 및 운송 비용($/컨테이너)입니다.
빨간색 셀은 특정 경로가 실행 가능한 옵션이 아니므로 고려할 수 없음을 나타냅니다. 해외 공급망을 따라 각 출발 지점에서 각 목적지까지 최적의 배송을 결정하여 최소 총 배송 비용과 각 단계에서 발생하는 총 배송 비용을 결정합니다.
답변1
다음은 Solver에 대한 문제를 설정하는 예입니다. 더 컴팩트하게 만들 수도 있지만 제가 설정한 방식을 사용하면 문제를 쉽게 진단할 수 있습니다.
- '데이터' 탭에서 원본 데이터를 사용하세요.
- Solver 문제를 설정하기 위해 "Equation"이라는 새 탭을 만듭니다.
- A열부터 D열까지의 경로는 가능한 모든 경로 조합을 설정하는 데 사용됩니다. 예를 들어 행 1은 헤더입니다. 행 2는 E1, P1, I1, D1입니다. 행 2는 E1, P1, I1, D2입니다. 등.
- E열부터 G열은 유럽에서 미국 항구까지, 미국 항구에서 내륙 항구까지, 내륙 항구에서 유통 센터까지 관련된 비용입니다. 이는 VLOOKUP 및 MATCH를 사용하여 채워집니다. 예를 들어 E2에서는
=VLOOKUP(A2,Data!$A$3:$E$5,MATCH(B2,Data!$A$2:$E$2,0),FALSE)
; F2에서는=VLOOKUP(B2,Data!$A$11:$D$14,MATCH(C2,Data!$A$10:$D$10,0),FALSE)
; G2에서는=VLOOKUP(C2,Data!$A$20:$F$22,MATCH(D2,Data!$A$19:$F$19,0),FALSE)
. 이것들은 모두 채워져 있습니다. - H열은 총 단가입니다. 실행 불가능한 경로를 명확하게 하기 위해 해당 경로에 대한 총 비용을 1,000,000으로 설정했습니다. 예를 들어 H2는 입니다
=IF(OR(E2=0,F2=0,G2=0),1000000,SUM(E2:G2))
. 이 채워져 있습니다. - I열은 해당 경로를 이동하는 장치(컨테이너)의 수입니다. 이 열은 솔버에 의해 조작됩니다. 모든 행을 1로 초기화했습니다.
- J열은 경로의 총 비용입니다. 예를 들어 J2는
=H2*I2
채워져 있습니다. - 목적 함수와 제약 조건을 포함하기 위해 동일한 탭에 또 다른 테이블이 구축됩니다. L1부터 O19까지 있습니다. 여기에 있는 계산의 몇 가지 예는 다음과 같습니다. nUnits는 이전 테이블의 합계이므로 E1의 컨테이너 수는
=SUMIFS($I$2:$I$181,$A$2:$A$181,L2)
, P1의 컨테이너 수는 입니다=SUMIFS($I$2:$I$181,$B$2:$B$181,L5)
. maxUnits는 데이터 탭에서 추출되므로 E1의 최대 컨테이너 수는=VLOOKUP(L2,Data!$A$3:$F$5,6,FALSE)
, I1의 최대 컨테이너 수는=HLOOKUP(L9,Data!$B$10:$D$15,6,FALSE)
등입니다. 마찬가지로 수요 단위는 데이터 탭에서 추출됩니다. - 실행 불가능한 경로가 선택되지 않도록 추가 제약 조건을 추가했습니다.
- 목표는 J열의 합계인 총 비용입니다.
다음은 Solver를 실행하기 전 방정식 탭의 화면 캡처입니다. 여러 행이 숨겨져 있습니다.
솔버 설정은 다음과 같습니다.
- 목표 설정: ~이다
$M$19
- 받는 사람: 최소
- 변수 셀을 변경하여:
$I$2:$I$181
- 제약 없는 변수를 음수가 아닌 것으로 만들기가 선택 취소되었습니다(제약 조건으로 처리됨).
- 해결 방법 선택: 진화적입니다. Evolutionary는 정수 제약 조건을 처리할 때 다른 방법보다 훨씬 빠릅니다.
- 제약 조건이 적용됩니다: 많은 ...
$I$2:$I$181 = integer
- 정수개의 컨테이너가 있어야 합니다.$I$2:$I$181 >= 0
- 마이너스 비용이 발생할 수 없음$M$2 <= $N$2
각 행에 대해 중복됨$M$11 <=$N$11
- 최대 컨테이너 수를 위반하지 않음$M$12 = $O$12
$M$16 = $O$16
수요를 충족하기 위해 각 행에 대해 복제됨$M$17 = $N$17
- 실행 불가능한 옵션을 사용하지 마십시오.
아래는 솔버 매개변수 대화 상자의 스크린샷입니다.
이 설정을 사용하면 모든 수요가 충족되고 제약 조건을 위반하지 않은 상태에서 $1,661,119.00의 총 비용이 발생합니다. 아래는 제약 조건 테이블의 스크린샷입니다.
아래는 모든 0개 경로가 필터링된 비용 테이블의 스크린샷입니다.
답변2
일회성 답변을 원하는 경우 가장 저렴한 경로의 E2 > P4 > I2 > D2
비용은 $1,452입니다.
내가 사용한 방법은 우아하지 않았습니다. 나는 가능한 모든 옵션에 대한 표를 만들고, 여행의 각 구간에 대한 비용을 조회 INDEX
하고 , 총 비용 오름차순으로 정렬했습니다. MATCH
내 시트는 다음과 같습니다.
왼쪽의 데이터는 스프레드시트에서 복사한 것입니다. 오른쪽 테이블은 제가 만든 테이블입니다. E, P, I, D 필드 각각에 대해 그룹별로 수동으로 입력했습니다. D1, D2, D3, D4, D5. 그 5개를 복사해서 많이 붙여넣으세요. I1, D 세트에 대해 복사, I2, D 세트에 대해 복사 등. 테이블이 채워질 때까지. $EP 필드의 경우 E(무엇이든)에서 P(무엇이든)까지 이동하는 비용을 결합하여 조회 INDEX
했습니다 .MATCH
=1/(1/INDEX($B$3:$E$5,MATCH([@E],$A$3:$A$5,0),MATCH([@P],$B$2:$E$2,0)))
INDEX
배열을 가져와 해당 배열 내의 어딘가에서 셀을 반환합니다. 내가 원하는 행을 찾기 위해 MATCH
범위 내에서 E 값이 어디에 있는지 찾아보곤 했습니다 A3:A5
. 열을 찾기 위해 B2:B4
. 이로 인해 E에서 P로 이동하는 데 드는 비용이 발생했습니다. 1/(1/...)
전체 항목에 래퍼를 추가하여 이동 구간이 0이면 오류를 반환하여 사용할 수 없음을 나타냅니다.
그런 다음 해당 수식을 $PI 및 $ID 필드에 복사하여 올바른 범위를 참조하도록 각각을 조정했습니다. 마지막으로 총 비용(Total Cost) 필드는 단순히 해당 세 개의 구간을 합친 것입니다. 오름차순으로 정렬해서 가장 저렴한 경로를 찾았습니다. 모든 오류(사용할 수 없는 경로를 사용하는 오류)는 맨 아래로 전송되었습니다.
현재 이용 가능한 경로를 기준으로 가장 저렴한 경로를 선택할 수 있도록 여행의 각 구간에 대해 현재 이동 중인 운송 수단 수를 추적하려는 지속적인 시스템을 원하는 경우 데이터베이스 솔루션을 살펴보는 것이 좋습니다. 또는 정렬된 목록을 사용하여 맨 위에서 시작하여 현재 각 구간을 이용할 수 있는 경로를 찾을 때까지 아래로 작업할 수 있습니다.