Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Najkrótsza droga - Algorytm Mrówkowy
Landon
post 30.04.2008, 20:22:20
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 smile.gif

Ten post edytował Landon 5.05.2008, 13:17:21


--------------------
Go to the top of the page
+Quote Post
Babcia@Stefa
post 1.05.2008, 13:24:14
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 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.


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
carbolymer
post 1.05.2008, 16:07:42
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)?


--------------------
Blog | plugin system by carbolymer
Residence: #php.pl @ IRCNet
"Pralki powstały po to, aby kobiety też mogły programować"
Go to the top of the page
+Quote Post
wlamywacz
post 1.05.2008, 17:03:40
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 5.05.2008, 11:49:03
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) 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


--------------------
Go to the top of the page
+Quote Post
wlamywacz
post 5.05.2008, 12:09:07
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 5.05.2008, 13:15:55
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źć tongue.gif


--------------------
Go to the top of the page
+Quote Post
wlamywacz
post 5.05.2008, 13:17:41
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 11.06.2008, 11:48:55
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 11.06.2008, 14:28:05
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 11.06.2008, 15:35:47
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*


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
legorek
post 11.06.2008, 16:24:18
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 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 11.06.2008, 19:23:07
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 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

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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 11:01