: n 번 노선으로 갈아타세요.
: k 번째 경로의 총 시간을 선택합니다. < P >: K 번째 노선 버스 환승 버스 환승 횟수를 선택하세요.
: k 번째 노선 지하철 환승 지하철 환승 횟수를 선택하세요. < P >: K 번째 노선 지하철 환승 버스 환승 횟수를 선택하세요. < P >: K 번째 노선 버스 환승 지하철 환승 횟수를 선택하세요. < P >: K 번째 노선, M 번째 버스 요금 부과 방법. 여기서 < P > 는 단일 티켓 가격 시행을 의미하고, 분할 가격 책정을 의미합니다.
: k 번째 노선, m 번째 버스 탑승 비용;
: k 번째 노선의 총 비용을 선택하십시오. < P >: K 번째 노선을 선택해서 M 번째 버스를 타려면 지나야 할 버스 정류장 수; < P >: K 번째 노선을 선택하시고 N 번 지하철을 타려면 지나야 할 지하철역 점 수를 고르세요. < P >: K 번 노선의 M 번 버스 노선에 대해 보행을 선택할지 여부를 나타내고, 변수 -1 은 보행을 선택하지 않음을 나타내며, 걷기를 선택했음을 의미합니다. < P >: K 번 노선의 N 번 지하철 노선에 대해 보행을 선택할지 여부, 변수 -1 은 보행을 선택하지 않음을 의미하고, 걷기를 선택했음을 의미합니다.
3 모델 가설
3.1 기본 가정
1, 인접한 버스 정류장 평균 주행 시간 (정지 시간 포함): 3 분
2, 인접한 지하철역 평균 주행 시간 (정지 시간 포함): 2.5 분
지하철 환승 버스 평균 소요 시간: 7 분 (이 중 보행시간 4 분)
6, 버스 환승 지하철 평균 소요 시간: 6 분 (이 중 보행시간 4 분)
7, 버스 요금: 단일 요금과 세그먼트 가격 두 가지로 나뉜다. < P > 단일 티켓 가격: 1 원 < P > 중 할인된 가격: ~ 2 역: 1 원 < P > 21 ~ 4 역: 2 원
4 역 이상: 3 원
8, 지하철 요금
11, 모든 순환버스 노선은 양방향입니다.
12, 지하철 선 T2 도 양방향 순환이다.
13, 각 버스가 정상적으로 작동하여 교통 체증이 발생하지 않습니다.
14, 버스, 열차가 모두 역에 도착해 주차 < P > 4 문제를 분석한 < P > 가 베이징에서 올림픽을 개최하는 동안 대중이 수많은 교통노선에서 최적의 승차 경로나 환승 경로를 선택해 올림픽을 보는 것이 우리가 해결해야 할 핵심 문제다. 이 문제에 대해 우리는 버스 노선의 관점에서 최적의 노선을 찾는 것을 고려하고 있다. 먼저 두 사이트 (공공 장소와 올림픽 장소) 의 모든 노선을 찾아 저장해 데이터 파일을 만들었다. 이러한 노선에는 직통버스 노선이 포함될 수도 있고, 두 버스 노선이 교차하여 형성되거나 (이때 버스를 한 번 갈아타야 함), 심지어 더 많은 버스 노선이 교차하여 형성될 수도 있다. 그런 다음이 실행 가능한 경로에서 최적 경로를 검색합니다. < P > 노선 평가의 경우 총 이동 시간, 총 환승 횟수, 총 비용을 지표로 하거나 세 가지 지표를 표준화한 후 서로 다른 가중치로 종합 지표를 형성할 수 있습니다. 최적 경로는 총 이동 시간이 가장 짧아야 하며, 총 비용이 가장 적거나 총 환승 횟수가 가장 적거나 세 가지가 모두 있어야 합니다. 이렇게 목표를 고려하는 이유는 연령별 조회자들에 따라 추구하는 목표가 다르기 때문이다. 예를 들어 청년들이 경기에 더 열중하고 있기 때문에 가장 짧은 시간 내에 올림픽 경기장에 가서 경기를 관람할 수 있기 때문이다. (윌리엄 셰익스피어, 햄릿, 스포츠명언) (윌리엄 셰익스피어, Northern Exposure (미국 TV 드라마), 스포츠명언 중년층은 종합지표가 가장 작은 것, 즉 빠르고, 지방이 적고, 환승 횟수가 많지 않은 경향이 있다. 노인들은 항상 가장 절약하는 방식으로 올림픽 경기를 보고 싶어한다. 장애인에게는 총 환승 횟수가 가장 적은 것이 좋다.
서로 다른 경로 조회 요구 사항은 그림 4.1 로 다음과 같이 표시됩니다.
그림 4.1 버스 노선 조회 목표도
분석 결과 이 문제의 해결은 최단 경로 찾기 문제로 귀결되지만 기존의 Dijkstra 최단 경로 알고리즘은 이 문제에 적용되지 않습니다. Dijkstra 알고리즘에서 사용하는 스토리지 구조와 계산 방법은 버스 회선 네트워크에 대처하기가 어렵기 때문입니다. < P > 이를 위해 실제 해결 과정에서 효율적이고 폭 넓은 우선 순위 알고리즘을 사용했습니다. 기본 아이디어는 지정된 지점을 검색할 때마다 액세스되지 않은 모든 이웃 지점을 검색 대기열에 넣고 대기열이 비어 있을 때까지 검색 프로세스를 반복하는 것입니다. 이 방법은 뒷부분에서 자세히 설명합니다. < P > 5 모델링 전 준비 < P > 사후 모델링 및 프로그래밍 편의를 위해 이 모델을 만들기 전에 몇 가지 준비 작업을 수행해야 합니다.
5.1 데이터 저장
제공된 데이터 형식이 매우 표준화되지 않았기 때문에 필요한 데이터 저장 형식으로 처리해야 합니다. 주어진 파일에서 회선의 사이트 정보를 읽어 txt 문서에 저장합니다. 이 파일에는 두 줄의 데이터, 첫 번째 행은 업라인의 사이트 정보, 두 번째 행은 다운라인의 사이트 정보를 나타냅니다. 여기서 다운스트림 선형 레이블은 업라인과 다운라인을 구분하기 위해 원래 레이블에 52 을 추가해야 합니다. < P > 업라인과 다운라인의 사이트 이름이 정확히 동일하지 않으면 저장된 두 행의 데이터가 정확히 동일하지 않습니다. 버스 라인 L9 를 예로 들면
L9: 3739 359 1477 2159 2377 2211 2482 248 3439 192 1921 18 22 327 2981
l529: 2981 327 22 1 < P > 만약 하행선이 상행선 원래의 길로 돌아온다면, 저장된 두 행의 데이터에 있는 사이트 정보는 정확히 순서가 뒤바뀌게 됩니다. 버스 노선 L1 을 예로 들면
l1: 619 1914 388 348 392 429 436 3885 3612 819 3524 82 3914 128 71
l521: 71 128 3914 85 9 392 348 388 1914 619
그림 5.1 과 같이 루프 상황인 경우
시계 방향: S1 → S2 → S3 → S4 → S1 → S2 → S2
시계 반대 방향: S1→S4→S3→S2→S1→S4→S3→S2. < P > 는 이 두 개의 "단일 선 선형" 회로가 원래 원형 선형 < P > 그림 5.1 원형 회로 다이어그램 < P > 의 원형 버스 라인 L158 과 같은 역할을 하는 것으로 분석했습니다. 이 원형 선형은 다음과 같은 데이터를 저장합니다.
l153: 534 649 2355 1212 812 171 17 811 26 172 1585 814 264 3513 1215 1217 251 264 266 534 649 2355 1212 812 171 17 811 26 11 85 814 264 3513 1215 1217 251 264 266
l673: 534 266 264 251 1217 1215 3513 264 814 1585 172 26 811 17 171 812 1212 2355 649 534 266 266 1217 1215 3513 264 814 1585 172 26 811 17 171 812 1212 2355 649 < P > 여기서 L153 은 업라인으로 간주되고 L673 은 다운라인으로 간주됩니다. 이렇게 하면 각 버스 노선에 대해 두 줄의 회선 저장 정보를 얻을 수 있다. < P > 5.2 각 사이트를 통과하는 버스 노선 < P > 에서 5.1 을 처리한 정보를 검색하여 각 사이트를 통과하는 모든 버스 노선을 찾아 데이터 파일에 저장합니다.
예: 사이트 S1 을 통과하는 라인과 사이트 S2 를 통과하는 라인은 다음과 같습니다. < P > S1 을 통과하는 라인은 다음과 같습니다. L421
S2 를 통과하는 라인은 다음과 같습니다. L27 L152 L365 L395 L485 < P > 5.3 두 버스 라인의 교차 통계
예: 버스 노선 L1 과 버스 노선 L25 가 교차하는 사이트는 a [1] [25] = {s619, S1914, S388, S348}} 입니다. < P > 6 모델 구축 및 해결 < P > 6.1 모델 1 의 구축 < P > 이 모델은 문제 1 에 대해서만 버스 회선을 고려하며 두 개의 버스 사이트와 최대 두 개의 버스로 갈아타는 경로를 파악한 다음 서로 다른 조회자의 요구에 따라 최적의 경로를 찾습니다. < P > 6.1.1 버스 노선의 수학적으로 < P > 두 사이트 간 노선에는 여러 가지 상황이 있으며 최대 2 회 환승이 허용되는 경우 환승 노선은 각각 그림 6.1 의 4 가지 상황에 해당한다. 이 그림의 A, B 는 출발소와 종착역이고 C, D, E, F 는 환승 사이트입니다. < P > 그림 6.1 버스 로드맵 < P > 두 개의 버스 사이트와 지나가는 버스 노선은 다음과 같이 표시됩니다. 통과 된 버스 라인은 다음과 같이 표시됩니다.
1) 직접 경로 (그림 6.1(a) 에 표시된 대로
2) 한 번 갈아타는 경로 (그림 6.1(b) 에 표시된 경로) 는
로 표시됩니다. 여기서: SC 는, 입니다
3) 두 번 갈아타는 노선 (그림 6.1(c)) 은 < P > 가 위에서 언급한 환승 노선의 모델링 과정을 통해 서로 다른 환승 횟수 간에 반복 관계로 사용할 수 있다는 것을 알 수 있어 더 많은 환승 횟수를 찾는 노선을 찾을 수 있다. 그러나 실제 상황을 감안하면 환승 횟수가 2 회를 넘지 않는 것이 좋기 때문에 이 글은 3 회 이상 환승하는 상황에 대해서는 논의하지 않았다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 성공명언) < P > 6.1.2 최적 경로 모델 구축 < P > 는 두 버스 사이트 간의 실행 가능한 경로를 찾았고, 이러한 경로는 서로 다른 수요에 따라 선택하여 최적 경로를 찾을 수 있습니다.
1) 가장 짧은 시간을 최적 경로로 사용하는 모델: 이동 시간은 승차시간과 환승 시간의 합계입니다.
(6.1 식)
여기서 k 경로는 위의 환승 경로 중 하나 이상입니다.
2) 최소 환승 횟수를 최적 노선으로 사용하는 모델:
(6.2 식)
이 모델은 위의 환승 노선을 직통, 1 회, 2 회 우선 순위로 고려하는 것과 같습니다.
3) 비용이 가장 적은 최적 경로 모델:
(6.3 식)
여기서 (6.4 식)
6.1.3 모델의 알고리즘은
가 이 문제에 대해 최적화한 모델을 설명합니다 이 알고리즘은 이제 그림 6.2 와 함께 이 문제에 적용됩니다. (이 그림의,,,,,,, 여기서 (a), (b), (c) 그래프는 각각 지점에서 점으로 직접, 한 번, 두 번 갈아타는 경우를 나타냅니다.
그림 6.2 버스 직통, 환승도
(1) 먼저 조회가 필요한 두 사이트와 (시작으로 가정)
(2) 지나가는 버스 노선 (I = 1,2, ..., m) 과 지나가는 버스 노선 (= 1,2, ..., n) 을 찾아 데이터 파일에 저장합니다. 같은 노선이 있는지, 만약 있다면 사이트와 사이에 직항로가 있다면 (그림 6.2 의 경우), 이 노선은 환승 횟수가 가장 적은 (환승 수가 인 경우) 노선이며, 직항로가 여러 개 있다면 가장 시간이 절약되는 노선을 찾을 수 있다. 이렇게하면 모든 직접 경로를 찾아 데이터 파일에 저장할 수 있습니다.
(3) 지나가는 버스 노선 (그림 6.2) 의 다른 사이트와 지나가는 버스 노선 내의 다른 사이트를 찾습니다. 과 (와) 같은 점이 있는지 확인하고 (그림 6.2 의 경우) 사이트와 사이에 한 번의 환승 경로 (그림 6.2 의 경우 및) 가 있는지 확인합니다. 이 지점은 환승 사이트입니다. 이것은 또 다른 전송 경로를 찾아 데이터 파일에 저장합니다.
(4) (그림 6.2 의) 회선 (그림 6.2 의) 을 통해 사이트를 제외한 다른 사이트 (그림 6.2 의) 의 버스 노선 (그림 6.2 의) 을 검색하여 버스 노선의 다른 사이트를 찾습니다. 지나가는 버스 노선의 다른 사이트와 같은 점이 있는 경우 (그림 6.2 의 경우) 와 2 차 환승 경로 (그림 6.2 의 경우,,) 가 있는 것으로 판단됩니다. 이 점과 지점은 환승 사이트입니다. 이 2 차 환승 경로를 데이터 파일에 저장합니다.
(5) 두 사이트와 다른 경로를 통해 서로 다른 모델을 기준으로 최적 경로를 검색하여 조회자가 만족하는 최적 경로를 얻습니다.
6. 1. 4 모델 1 의 해석 < P > 위 알고리즘과 이전에 설정된 모델 1 에 따라 VC++ 로 프로그래밍 (프로그램은 부록 참조) 하면 다양한 목표 아래 최적의 경로를 얻을 수 있습니다.
1) 시간이 가장 많이 걸립니다