![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 29.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Muszę napisać program wyznaczający optymalną trasę pomiędzy miastami (star i koniec w tym samym mieście), czyli typowy problem komiwojażera. Znalazłem kilka implementacji w C++, ale niestety bardzo ciężko jest to napisać w PHP (http://edu.i-lo.tarnow.pl/inf/utils/002_roz/ol027.php). Jest to część programu dlatego nie bardzo mam ochotę bawić się tym problemem więc będę bardzo wdzięczny za pomoc i namiar na jakąś implementacje w PHP. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A wiesz, że problem komiwojażera jest zależny od wielu czynników? Choćby typu, formatu i ilości danych wejściowych? Człowieku... O tym napisano książki w ilościach liczonych w ogromnej liczbie tytułów. Sam podchodziłem do tego tematu wielokrotnie na studiach w zależności od rodzaju danych. Możesz dostać bowiem graf, macierz odległości, macierz odległości i wag. Po prostu problem jaki nakreśliłeś jest tak ogólny jak stwierdzenie: "Chcę skrypt do obliczania wysokości", ale bez poweidzenia czego, w jaki sposób i co mamy jako dane.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 29.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli chodzi Ci o wagi to jest to odległość pomiędzy miastami, a o książkach to bym nie przesadzał. Napisałem podobny program jak w linku załączony ale w C++, jednak nie znam podobnych możliwości (operacje na stosie (liście)) w PHP, więc szukam pomocy. Można też wykorzystać alg. genetyczne albo simulated annealing, ale to wszystko jest proste w c++ a nie w PHP.
Reasumując, dane: - lista miast - miasto pocz, końcowe - odległości pomiędzy miastami Ten post edytował kubap007 9.12.2009, 20:27:57 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 444 Pomógł: 79 Dołączył: 26.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
stos i lista to w pewnym uproszczeniu zwykle tablice
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Zauważ jednak prostą rzecz. Są grafy, gdzie nie masz podanych odległości bezpośrednio do wszystkich miast... I tak choćby by z miasta 5 dostać się do 8 trzeba przejechać przez 3 bo innej drogi nie ma. Na dodatek niektórzy dorzucają warunek, że przez jedno miasto można tylko 1 lub inną ilość razy przejechać. Takich ograniczeń może być więcej i algorytm też to musi uwzględniać jako ewentualność. W najbanalniejszym przypadku jest zwykły graf 1 do n, gdzie każdy wybór ogranicza Ci wybór kolejnego miasta na zasadzie:
wyjechałem z 1 i mogę wybrać dowolne z 9 (oprócz oczywiście 1), choćby 5, jestem w 5 i mogę pojechać wszędzie oprócz 1(i oczywiście 5), choćby 3, jestem w 3 i mogę jechać wszędzie oprócz 1 i 5 (oraz oczywiście 3) ... i tak dalej. A gdy już nie ma możliwości do wyboru to z tego miasta jedzie się do 1. Po każdym przebiegu porównujesz wynik z poprzednią wartością i jeśli jest mniejsza to jest ona zastępowana wyliczoną. Tak możesz przejść przez wszystkie możliwe kombinacje ![]() Tylko jak mówiłem... Niekoniecznie będzie tym czego oczekujesz ![]() @bottom: wNogachspisz... Normalnie nie wiem czy się bać czy nie tego buziaka. Nie nawykłem do całowania kogokolwiek męskiej lub nieokreślonej płci ![]() Ten post edytował thek 10.12.2009, 08:41:34 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Witam
Ahhh, matma, hate it!, Semantyka -> love. Ja bym to zrobił tak: - Podzielił wszystkie ulice na odcinki od skrzyżowania do skrzyżowania, czyli odcinki z których nie da się skręcić - Zebrał informacje o tych odcinach, tj: - natężenie ruchu w zaleznosci od: pora dnia / dzien tygodnia / świeta, dni powszednie / pora roku, zima lato - stan nawierzchni, po tej kiepskiej jedzie sie wolniej i bardziej zuzywa podzespoly pojazdu - szerokosc jezdni, bezpieczej poruszac sie szersza jezdnia, (w tym ilosc pasów) - to co przy drodze, chodniki, parkingi, szkoly, przejscia dla pieszych, to moze wplynac na przymus zatrzymanai sie (przepuszczenia pieszego) i bezpieczenstwa, np. wtargniecie na jezdnie - dlugosc odcinka - ilosc zakretow i ich kąt Potem ważąc te informacje okreslić jakimi odcinami ajwydajniej przebyć trase. Akgorytm powinien też się uczyć, tj zbierać z czasem informacje jak szybko udało się danym odcinkiem przejechać. Po co ja to pisze skoro nie o to pytał autor, a autor pytał tylko o implmentacje algorytmu w PHP? Piszę to dalego, żę autor topicu napisał również "Muszę napisać program wyznaczający optymalną trasę". IMO "Tępe" liczenie którędy będzie szybciej moze dobrze wyląda na grafie ale kompletnie nie sprawdzi się w środowisku produkcyjnym zwanym rzeczywistością ![]() Właśnie dlatego ![]() ps. thek, dobrze gadasz :* -------- http://homehost.pl - (prawie) darmowy hosting |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 00:08 |