Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Najkrótsza droga - Algorytm Mrówkowy
Forum PHP.pl > Forum > PHP
Landon
Witam czy ktoś wie w jaki sposób napisać algorytm mrówkowy dla grafu najkrótszej drogi miedzy miastem a i b z ominięciem przeszkód x, y , z? Jeśli tak to proszę o pomoc smile.gif
Babcia@Stefa
Myślę że w PHP będzie to ciężkie do napisania.
Wiem że w flashu istnieje coś takiego ( mapa Google ).

Popraw nazwę tematu winksmiley.jpg

Dziękuję, Babcia@Stefa
carbolymer
@up: myślę że nie wiesz o czym mówisz.

Zbyt ogólne pytanie zadałeś. Niby jak mamy ci pomóc skoro nie wiemy jak ma wyglądać ten graf (chociażby jakimi prawami się rządzi)?
wlamywacz
Algorytm ACO

I poszukaj w google pod hasłem algorytm ACO ten pierwszy link to wynik z wielkiego G
Landon
No tak nie powiedziałem o co chodzi więc tak (a i dzięki za ten link) smile.gif...

Operuje na układzie współrzędnych z ustawionymi przeszkodami które muszą zostać ominięte... mam podany punkt początkowy i końcowy. Moim zadaniem jest przejście przez najkrótszą drogę pomiędzy tymi punktami. Następnie wyliczenie długości trasy i średniej szybkości z danych przypisanych do współrzędnych tongue.gif
wlamywacz
Może przeczytaj to i poszukaj w google dalej:
http://www.google.pl/search?q=ant-cycle&am...lient=firefox-a
Landon
Nie wiem czy zauważyłeś http://www.google.pl/search?q=ant-cycle to link do google szukam tam lecz zbyt wiele nie mogę znaleźć tongue.gif
wlamywacz
ant-cycle to nazwa najwydajniejszej wersji algorytmu mrówkowego
Landon
Po wielu trudach i zmaganiach zrozumiałem zasadę działania tego algorytmu no ale mam problem z zastosowaniem.

Mam tablicę 2 wymiarową

  1. <?php
  2. $tablica = array();
  3. $tablica[0][0] = 0;
  4. $tablica[0][1] = 'woda';
  5. $tablica[0][2] = 'woda';
  6. $tablica[0][3] = 'woda';
  7. $tablica[0][4] = 'woda';
  8. $tablica[0][5] = 'woda';
  9. ?>


itd...

muszę odpalić pętle do {} while aż do wykonania warunku
następnie puścić pierwszą mrówkę i zapisać jej pokonaną drogę do tablicy
no i zwiększyć w tablicy wartość o 1 $tablica[0][0] = 0;

i doszedłem do czegoś takiego:

  1. <?
  2.  
  3. $tablica = array();
  4. $tablica[0][0] = 1;
  5. $tablica[1][0] = 'woda';
  6. $tablica[2][0] = 'woda';
  7. $tablica[3][0] = 'woda';
  8. $tablica[4][0] = 'woda';
  9. $tablica[5][0] = 'woda';
  10.  
  11. $tablica[0][1] = 1;
  12. $tablica[1][1] = 1;
  13. $tablica[2][1] = 1;
  14. $tablica[3][1] = 1;
  15. $tablica[4][1] = 'woda';
  16. $tablica[5][1] = 'woda';
  17.  
  18. $tablica[0][2] = 1;
  19. $tablica[1][2] = 1;
  20. $tablica[2][2] = 1;
  21. $tablica[3][2] = 1;
  22. $tablica[4][2] = 'woda';
  23. $tablica[5][2] = 'woda';
  24.  
  25. $tablica[0][3] = 1;
  26. $tablica[1][3] = 1;
  27. $tablica[2][3] = 1;
  28. $tablica[3][3] = 1;
  29. $tablica[4][3] = 'woda';
  30. $tablica[5][3] = 'woda';
  31.  
  32. $tablica[0][4] = 1;
  33. $tablica[1][4] = 'woda';
  34. $tablica[2][4] = 'woda';
  35. $tablica[3][4] = 1;
  36. $tablica[4][4] = 'woda';
  37. $tablica[5][4] = 'woda';
  38.  
  39. $tablica[0][5] = 1;
  40. $tablica[1][5] = 1;
  41. $tablica[2][5] = 1;
  42. $tablica[3][5] = 1;
  43. $tablica[4][5] = 'woda';
  44. $tablica[5][5] = 'woda';
  45.  
  46. $tablica[0][6] = 'woda';
  47. $tablica[1][6] = 'woda';
  48. $tablica[2][6] = 'woda';
  49. $tablica[3][6] = 1;
  50. $tablica[4][6] = 'woda';
  51. $tablica[5][6] = 'woda';
  52.  
  53. $tablica[0][7] = 'woda';
  54. $tablica[1][7] = 'woda';
  55. $tablica[2][7] = 'woda';
  56. $tablica[3][7] = 1;
  57. $tablica[4][7] = 'woda';
  58. $tablica[5][7] = 'woda';
  59.  
  60. $tablica[0][8] = 'woda';
  61. $tablica[1][8] = 'woda';
  62. $tablica[2][8] = 'woda';
  63. $tablica[3][8] = 1;
  64. $tablica[4][8] = 'woda';
  65. $tablica[5][8] = 'woda';
  66.  
  67. $tablica[0][9] = 1;
  68. $tablica[1][9] = 1;
  69. $tablica[2][9] = 1;
  70. $tablica[3][9] = 1;
  71. $tablica[4][9] = 'woda';
  72. $tablica[5][9] = 'woda';
  73.  
  74. $start_x = 0;
  75. $start_y = 0;
  76. $stop_x = $_GET['x'];
  77. $stop_y = $_GET['y'];
  78.  
  79. if ($tablica[$stop_x][$stop_y] == 'woda') {
  80. echo 'Wskazany punkt jest w wodzie<br />';
  81. } else {
  82. $op = 0;
  83. $dlogosc = array();
  84. $i = 0;
  85. do {
  86. $o_x = $start_x;
  87. $o_y = $start_y;
  88. $tablica[$o_x][$o_y]++;
  89. $i++;
  90. $dlogosc[$i] = 1;
  91. do {
  92. if ($o_x < $stop_x) $o_x++;
  93. elseif ($o_x > $stop_x) $o_x--;
  94.  
  95. if ($o_y < $stop_y) $o_y++;
  96. elseif ($o_y > $stop_y) $o_y--;
  97.  
  98. $tablica[$o_x][$o_y]++;
  99. $dlogosc[$i]++;
  100. } while ($o_x != $stop_x || $o_y != $stop_y);
  101. } while ($op == 1);
  102. if ($stop_x == $start_x && $start_y == $stop_y) {
  103. echo 'Wskazane współrzędne są na poczatku<br />';
  104. } else {
  105. echo 'Długość '.$dlogosc[$i].' kratek<br />';
  106. }
  107. }
  108.  
  109. echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  110. <table cellspacing="0" cellpadding="0">';
  111. foreach ($tablica as $k => $w) {
  112. echo '<tr>';
  113. foreach ($w as $k2 => $w2) {
  114. echo '<td style="background-color:'.($w2 != 'woda' ? $w2 == 1 ? 'green' : 'red' : 'blue').'; 
  115. width: 50px; height: 50px;">&nbsp;</td>';
  116. }
  117. echo '</tr>';
  118. }
  119. echo '</table>';
  120. ?>


Powoli idę do przodu... (próbuje dopisać by mijał ale chyba funkcje muszę wprowadzić do tego)

http://rdzen.osadnicy.net/table.php?x=2&y=5
legorek
Czy to nie jest klastyczny problem najkrótszej ścieżki ? Zobacz to: A*
dr_bonzo
Algorytm mrowkowy to NIE jest A*
legorek
Gdzie ja napisałem że jest smile.gif ? Po prostu chciałem zasugerować autorowi tematu, że to typowy problem rozwiązywany przez algorytm A star, więc może łatwiej będzie o przykłady implementacji.
Landon
jeśli chodzi o A* to tu jest ciekawy link:

http://www.policyalmanac.org/games/aStarTutorial_pl.htm

muszę się przyjrzeć temu dokładniej smile.gif

Mam teraz coś takiego:
http://test.osadnicy.net/astar/

teraz tylko zostało uprościć kod i przenieść do js winksmiley.jpg

o całe 500ms przyśpieszony ale i tak zbyt wolno smile.gif średnio wypada koło 150-200ms
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.