Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Najkrótsza droga - Algorytm Mrówkowy
Landon
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Landon 5.05.2008, 13:17:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Babcia@Stefa
post
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

Ostrzeżenie: (0%)
-----


Myślę że w PHP będzie to ciężkie do napisania.
Wiem że w flashu istnieje coś takiego ( mapa Google ).

Popraw nazwę tematu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Dziękuję, Babcia@Stefa

Ten post edytował batman 11.06.2008, 12:04:01
Powód edycji: nie bawimy się w moderatora. takie rzeczy się zgłasza.
Go to the top of the page
+Quote Post
carbolymer
post
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 12
Dołączył: 27.01.2007
Skąd: north              Poziom: 158                     Tytuł: Miszcz

Ostrzeżenie: (0%)
-----


@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)?
Go to the top of the page
+Quote Post
wlamywacz
post
Post #4





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Algorytm ACO

I poszukaj w google pod hasłem algorytm ACO ten pierwszy link to wynik z wielkiego G
Go to the top of the page
+Quote Post
Landon
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


No tak nie powiedziałem o co chodzi więc tak (a i dzięki za ten link) (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
wlamywacz
post
Post #6





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Może przeczytaj to i poszukaj w google dalej:
http://www.google.pl/search?q=ant-cycle&am...lient=firefox-a
Go to the top of the page
+Quote Post
Landon
post
Post #7





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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źć (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
wlamywacz
post
Post #8





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


ant-cycle to nazwa najwydajniejszej wersji algorytmu mrówkowego
Go to the top of the page
+Quote Post
Landon
post
Post #9





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


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

Ten post edytował Landon 11.06.2008, 12:51:05
Go to the top of the page
+Quote Post
legorek
post
Post #10





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Czy to nie jest klastyczny problem najkrótszej ścieżki ? Zobacz to: A*
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Algorytm mrowkowy to NIE jest A*
Go to the top of the page
+Quote Post
legorek
post
Post #12





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Gdzie ja napisałem że jest (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
Landon
post
Post #13





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


jeśli chodzi o A* to tu jest ciekawy link:

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

muszę się przyjrzeć temu dokładniej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

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

teraz tylko zostało uprościć kod i przenieść do js (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

o całe 500ms przyśpieszony ale i tak zbyt wolno (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) średnio wypada koło 150-200ms

Ten post edytował Landon 11.06.2008, 19:46:55
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 23:36