Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.11 KB | None | 0 0
  1. <!DOCTYPE html>
  2.  
  3. <html lang="pl">
  4. <head>
  5. <meta charset="utf-8" >
  6. <link rel="stylesheet" type="text/css" href="style.css">
  7. <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML'></script>
  8. <link rel="icon" href="media/swarm.jpg">
  9. <title>PSO</title>
  10. </head>
  11.  
  12. <body>
  13. <header onclick="openNav()">
  14. <span style="font-size:30px;cursor:pointer">&#9776; Menu</span>
  15. </header>
  16. <div id="myNav" class="overlay">
  17. <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
  18. <div class="overlay-content">
  19. <a href="#" onclick="viewPage(1)">Opis</a>
  20. <a href="#" onclick="viewPage(2)">Symulacja</a>
  21. </div>
  22. </div>
  23.  
  24. <div id="div1">
  25. <p class="descriptionTitle">Particle Swarm Optimization - o co tak właściwie chodzi?</p>
  26. <div class="descriptionContent">
  27. Algorytm roju cząstek jest przykładem algorytmu optymalizacji, którego działanie zaczerpnięte jest z „podglądania” natury. Tym razem do czynienia mamy z zachowaniami stadnymi (czy rojowymi) zwierząt, w tym ludzi. Esencja działania polega na tym, iż podczas wspólnie zdobywanego doświadczenia cząstki będące osobnikami pewnej populacji zdobywają własne doświadczenie i wzajemnie na siebie oddziałują. Taki rój cząstek podąża mniej więcej w jednym kierunku, ale każda cząstka nie traci pełni indywidualności. Daje to taki efekt, iż członkowie populacji przenoszą się stopniowo w coraz lepsze obszary przestrzeni rozwiązań.<br><br>
  28. Problem można zamknąć do pewnego obszaru przeszukiwań, w której cząstki określają dwie składowe: ich położenie i prędkość. Algorytm rojowy dla takiego problemu wygląda następująco:
  29. <ul>
  30. <li>Tworzymy populację rozwiązań \(x_1, x_2, ..., x_{pop}\);</li>
  31. <li>Wyznaczamy losowe prędkości \(v_1, v_2, ..., v_{pop}\);</li>
  32. <li>W każdej iteracji:
  33. <ul>
  34. <li>Wyznaczamy wartość przystosowania każdej cząstki: \(f(x_1), f(x_2), ..., f(x_{pop})\);</li>
  35. <li>Wyznaczamy nową wartość prędkości: \(v_i = v_i + U(0, c_1)(p_{best_i} - x_i) + U(0, c_2)(g_{best_i} - x_i)\);</li>
  36. <li>Uaktualniamy położenie: \(x_i = x_i + v_i\).</li>
  37. </ul>
  38. </li>
  39. </ul>
  40. \(p_{best}\) i \(g_{best}\) to odpowiednio najlepsze znalezione rozwiązanie danej cząstki i najlepsze znaleznione rozwiązanie spośród wszystkich cząstek. pop jest licznością populacji, \(c_1\) i \(c_2\) – współczynnikami akceleracji. \(U(0, c_1)\) i \(U(0, c_2)\) to losowanie liczby z odpowiednio podanego przedziału.<br><br>
  41. Do algorytmu warto dodać warunki sprawdzające, czy rój nie uciekł poza obszar rozwiązań, który z góry został wyznaczony oraz czy cząstki nie nabrały zbyt wielkich prędkości (podróżowanie cząstki z prędkością większą od wielkości przedziału nie ma sensu). Jeśli taki warunek jest spełniony – należy położenie przywrócić do miejsca w obszarze przeszukiwać, a prędkość odpowiednio zmniejszyć.<br><br>
  42. Algorytm ten można ulepszać na różne sposoby. Jednym z nich jest dodanie tzw. współczynnika ścisku, który dba o to, by nie trzeba było warunku na maksymalną prędkość wprowadzać i sam kontroluje tę prędkość. Wzór na współcznynnik ścisku nie jest skomplikowany i wygląda następująco:
  43. $${v}_{i} = ω ( {v}_{i} + U(0, {c}_{1} )( {p}_{best_i}-{x}_{i} ) + U(0, {c}_{2} )({g}_{best_i}-{x}_{i} )),$$
  44. gdzie:
  45. $$ω={{2} \over {2+ \sqrt{{φ}^{2}-4φ}}},$$
  46. $$φ={c}_{1} + {c}_{2}, φ≥4.$$
  47. </div>
  48.  
  49. <p class="descriptionTitle">Opis programu</p>
  50. <div class="descriptionContent">
  51. Na stronie użytkownik może zobaczyć, jak od strony wizualnej wygląda działanie samego algorytmu.<br><br>
  52. Może on nie tylko uruchomić symulację działania opisanego wyżej algorytmu PSO, ale też ją skonfigurować ustawiając:
  53. <ul>
  54. <li><strong>Liczność populacji</strong>, z jaką będzie działał algorytm.</li>
  55. <li><strong>Współczynniki</strong> \(c_1\) i \(c_2\).</li>
  56. <li>Wartość <strong>omegi</strong>, którą również może łatwo przeliczyć wg wzoru na <strong>współczynnik ścisku</strong>, jeśli to możliwe.</li>
  57. <li><strong>Prędkość rysowania</strong>, a właściwie odświeżania ekranu w <i>ms</i> pomiędzy kolejnymi iteracjami.</li>
  58. <li><strong>Funkcję</strong>, której minimum algorytm będzie szukał.</li>
  59. <li><strong>Zakres</strong> funkcji na obu osiach.</li>
  60. <li><strong>Wymiary okna podglądu</strong>, na których symulacja będzie animowana.</li>
  61. <li><strong>Dodatkowe opcje</strong> wizualne symulacji.</li>
  62. </ul>
  63. Użytkownik ma również szansę na szybkie wprowadzenie ustawień wybierając jeden z dwóch zaproponowanych zestawów.
  64. </div>
  65. </div>
  66.  
  67. <div id="div2">
  68. <div class="simulationOptions">
  69. <p><strong>Ustaw parametry symulacji</strong></p>
  70. <div id="populationTextInput">Liczba populacji: (10)</div>
  71. <p><input type="range" id="populationCount" value="10" min="1" max="60" step="1" onchange="updatePopulationTextInput(this.value);"></p>
  72. <p>Liczba iteracji:<br>
  73. <input type="number" id="numOfIterations" value="1000">
  74. </p>
  75. <p>Współczynnik c1:<br>
  76. <input type="number" step="0.05" id="c1" value="0.05">
  77. </p>
  78. <p>Współczynnik c2:<br>
  79. <input type="number" step="0.05" id="c2" value="0.000005">
  80. </p>
  81. <p>Omega: <a style="cursor: pointer;" onclick="calculateOmega()"><strong>(oblicz wsp. ścisku)</strong></a>
  82. <br>
  83. <input type="number" step="0.1" id="omega" value="1">
  84. </p>
  85. <p>Prędkość rysowania (w ms):<br>
  86. <input type="number" id="sleepTime" value="10">
  87. </p>
  88. </div>
  89. <div class="simulationOptions">
  90. <p><strong>Wybór funkcji</strong></p>
  91. <form>
  92. <input type="radio" name="funOption" value="1">\(f(x, y) = {x^2 + y^2}\)<br>
  93. <input type="radio" name="funOption" value="2" checked>\(f(x, y) = {x^2 + y^2 - 20(cos(πx) + cos(πy))}\)
  94. </form>
  95. <p><strong>Zakres</strong></p>
  96. <p>
  97. \(x_{min}\) <input type="number" id="xMin" class="funRange" value="-10">
  98. \(x_{max}\) <input type="number" id="xMax" class="funRange" value="10">
  99. <br><br>
  100. \(y_{min}\) <input type="number" id="yMin" class="funRange" value="-10">
  101. \(y_{max}\) <input type="number" id="yMax" class="funRange" value="10">
  102. </p>
  103. </div>
  104. <div class="simulationOptions">
  105. <p><strong>Wymiary okna podglądu</strong></p>
  106. <p>Szerokość:
  107. <input type="number" id="canvasWidth" value="400" style="width: 40px" onchange="changeCanvasWidth()">
  108. </p>
  109. <p>Wysokość:
  110. <input type="number" id="canvasHeight" value="400" style="width: 40px" onchange="changeCanvasHeight()">
  111. </p>
  112. </div>
  113. <div class="simulationOptions" style="width: 300px">
  114. <p><strong>Ustawienia podglądu symulacji</strong></p>
  115. <p><input type="checkbox" id="showGlobalBest" checked>Pokaż najlepsze rozwiązanie</p>
  116. <p><input type="checkbox" id="showPersonalBest" onclick="updateLineParticleWithPersonalBestStatus()">Pokaż najlepsze rozwiązanie każdej cząsteczki</p>
  117. <p><input type="checkbox" id="lineParticleWithPersonalBest" disabled>Połącz linią cząsteczkę z jej najlepszym rozwiązaniem</p>
  118. </div>
  119. <div class="simulationOptions">
  120. <p><strong>Proponowane ustawienia</strong></p>
  121. <p><button type="submit" id="settingsSet1" onclick="setSettingsSet1()">Zestaw 1</button></p>
  122. <p><button type="submit" id="settingsSet2" onclick="setSettingsSet2()">Zestaw 2</button></p>
  123. </div>
  124. <div class="simulationOptions" id="simulationCanvas">
  125. <fieldset style="border-color: #d1eeff;">
  126. <legend><strong>Symulacja</strong></legend>
  127. <p><button type="submit" id="submitSettings" onclick="validateAndSimulate()">Start</button></p>
  128. <div id="psoCanvasDiv">
  129. <canvas id="psoCanvas" width="400" height="400" style="border:1px solid #000000;"></canvas>
  130. </div>
  131. <div id="psoStatistics">
  132.  
  133. </div>
  134. </fieldset>
  135. </div>
  136. </div>
  137.  
  138. <script src="scripts/pso.js"></script>
  139. <script src="scripts/form.js"></script>
  140. <script src="scripts/menu.js"></script>
  141.  
  142. </body>
  143. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement