2012-01-01 2 views
4

버스 경로를 만드는 데 사용할 수있는 좋은 알고리즘 또는 알고리즘 클래스 란 무엇입니까?버스 경로 만들기

나는 Traveling Salesman 또는 해밀턴 경로 문제를 해결하는 데 사용되는 알고리즘의 라인을 따라 생각하고 있었지만 실제로는 두 정류장 사이를 이동하는 방법에 대한 문제를 해결하지 못했습니다.

나는 다음과 같은 특징이 적어도 가지고 알고리즘을 싶습니다

:

  • 는 상대적으로 최적화 된 경로 생성
  • 는 수 (나는 문제가 아마 NP 완전하다는 것을 이해하고, 그래서 좋은 발견 괜찮습니다) 다른 가중치를 가진 경로의 부분을 처리하십시오 (예 : 경로의 해당 부분을 통과하는 시간)
  • 주어진 시작점과 끝점을 강제로 사용할 수 있습니다 (이 문제가 발생할 것으로 생각하지 않습니다)

이렇게 할 수있는 코드 또는 이와 비슷한 코드는 (특히 C#에서는) 높이 평가할 수 있지만, 그 자체로 좋은 알고리즘만으로도 좋습니다.

참고 : 두 점 사이의 최단 경로를 찾을 수있는 많은 알고리즘이 있지만 멈추려는 순서를 알지 못합니다. 따라서 두 알고리즘 (내가 의심 스럽다)의 조합을 사용하지 않으면 이러한 알고리즘은 내가 원하는 것을하지 못한다.

편집 : 내가해야 할 모든 정류장을 알고 있다고 가정합니다. http://en.wikipedia.org/wiki/Dijkstras_algorithm

가장자리를 따라 여행 비용은 단지 거리 아니라, "다음"버스가 지정된 노드에서 출발 할 때까지 또한 시간과 관련된 :

답변

2

이 작업을 수행하는 방법은 Floyd-Warshall 알고리즘을 사용하고 여행 판매원 문제를 해결하는 데 사용되는 알고리즘을 사용하는 것 같습니다.

이것은 "선택적인"모든 정점 (교차점)의 문제를 해결하고 여행 판매원 알고리즘을 사용하여 정거장이 닿는 순서를 결정합니다.

1

나는 Djikstra의 알고리즘을 사용했습니다. 참고 : 버스에서 노드에서 멈 추면 이미 버스에있을 수 있습니다.

+0

나는 오해했다고 생각합니다. 나는 버스를 타기 싫어서 버스 노선을 만들고 싶다. Djisksra가이 상황에서 어떻게 작동 할 수 있는지 잘 모르겠습니다 ... – soandos

+0

편집을 참조하십시오. 나는 당신의 대답이 적용되지 않는다고 생각합니다. – soandos

+0

아직 이해가 안되며, 디 익스트라의 알고리즘이 적용될 것이라고 생각합니다. 모든 도로가 로마로 연결되며, Dijkstra의 알고리즘이 가장 잘 알려줍니다. Wikipedia가 최단 경로를 언급하는 반면 알고리즘은 실제로 최저 비용으로 적용됩니다. 따라서 귀하의 기준과 관련된 비용을 적용하십시오. 각 노드 내에 얼마나 많은 사람들이 살고 있는지 알고 싶으면 기준으로 추가하십시오. 그러면 A부터 B까지의 최적 경로가 표시되어 대부분의 사람들을 선택할 수 있습니다. –

2

아마도 포인트 2 (다른 가중치를 갖는 경로의 일부)를 주소 지정하기 위해 여기에 작은 수정/가정으로 여행 판매원 알고리즘을 사용할 수 있습니다.

는 "

심지어는 단일 경로 불구하고, 우리가 가정하여 문제를 단순화 할 수 있습니다 (시간의 어느 시점에서, 말 트래픽)이 개 가중치를 갖고"A "는"B "를 포인트 지점에서 경로를 말할 수 있습니다 가상 꼭지점 "은"A "와"B "사이에있는"C "를 가리키며 각 가장자리에 고정 가중치가 있습니다.

------- 중량 = 10 ------ ------ C는 새로운 그래프 중량 = 15 ------ B

, 주행을 실행할 세일즈맨 알고리즘.

+0

당신이 이해할 것 같아요. 이 문제를 여행 판매원과 다르게 만드는 문제는 (필자가 실수로 이해한다면 나에게 수정하십시오.) 히트 할 필요가없는 많은 버텍스 (즉, 사용하지 않은 모든 교차점)가 있다는 것입니다. 이것을 할 수있는 여행 판매원 알고리즘이 있습니까? – soandos

+0

꼭 꼭지점 히트가 필요 없다면 그 꼭지점으로 연결되는 모든 가장자리의 무게를 "무한대"로 늘릴 수 있습니다. 세일즈맨 문제 메 커닉은 "자연스럽게"그 가장자리를 피할 것입니다. 당신의 생각? –

+0

그래프의 모든 교차점은 가상 꼭지점이어야합니다. 그들은 선택적으로 명중되어야하고 결코 명중되거나 결코 명중되어야한다. – soandos

1

버스 경로는 컴퓨터가 아닌 사람이 만듭니다. 사람들 만이 어디서 얼마나 자주 여행해야 하는지를 알고 있습니다. 사람들의 요구에 가장 적합한 경로 집합을 찾는 것에 대해 생각할 때 최소한 이러한 데이터가 필요합니다. 그 점에 관해서는 당신의 질문이 과소 정의되어 있다고 생각합니다.

+0

설명을 위해 편집을 참조하십시오. 그러나 나는 틀렸다고 생각합니다. 나는 정지가 어디에 있어야하는지 프로그램이 나에게 말해주기를 원하지 않는다. 그러나 어떤 순서로 버스가 모든 정류장에서 멈춰야 하는지를 알려준다. 이것은 나에게 매우 잘 정의 된 질문처럼 보입니다 ... – soandos

+0

요점은 * 제약 조건을 정의해야한다는 것입니다 - 그리고 그 중 수십 개의 **가 있습니다 - 그런 다음 Dijkstra의 알고리즘을 적용하십시오. –

+0

Dijkstra의 알고리즘은 두 점 사이의 최단 경로에 대해서는 문제가 없습니다. 이 문제는 (필자가 잘못 본다면 수정하십시오.) 먼저 포인트를 맞출 순서를 결정해야합니다. Dijkstra는 이것을하지 않습니다. – soandos