|
|
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
По поводу 8х8. DFS - тормоз ясен пень. На данной конкретной постановке когда мы хотим очень быстро получить 1-й солюшен и отвалить. Но Варнсдорф мне почему-то напомнил старый добрый алгоритм мыши в лабиринте которая бегает касаясь левой (или правой ) стены и постоянно сворачивает в одну сторону. Вобщем у этого метода есть недостатки. В частности если посмотреть на блуждания лошади с на большом поле (порядка 130 на 130) с высоты птичьего полета то можно видеть что конь ходит подобно этой мыши которую я описал. Тоесть прижимается к своей собственной тропинке которую уже проходил. Я считаю это если не фейком то просто увеличением энтропии самого маршрута. А именно - маршрут предстказуем и ограничен. Что будет после того как все "мышиные" маршруты закончятся и начнётся хардкор, по которому ходит "честный DFS" - я не знаю. Скорее всего правило Варнсдорфа будет реже выдавать результаты именно в силу того что наиболее популярный мышиные уже исследованы. А реже - имеено по причине наличия эвристики. По сабжу тот DFS что я скопи-пастил и переделал тоже имеет недостатки. В частности мне очень не нравится что он каждый раз начинает маршрут заново. Хотелось-бы идти от изменений существующего. Но это уже без Random. А как-то по другому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 21:45 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
mayton Хотелось-бы идти от изменений существующего. Но это уже без Random. А как-то по другому. Можно сворачивать в сторону где меньше натоптано (и наоборот). Деление доски на части и обход частей уже смотрели https://pdfs.semanticscholar.org/927e/dbaa256301f500e8b3fcd52eaa6f0cc2c768.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:31 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid uniquemayton Хотелось-бы идти от изменений существующего. Но это уже без Random. А как-то по другому. Можно сворачивать в сторону где меньше натоптано (и наоборот). Деление доски на части и обход частей уже смотрели https://pdfs.semanticscholar.org/927e/dbaa256301f500e8b3fcd52eaa6f0cc2c768.pdf Что значит - "можно" ? Я и сам знаю что можно. Предложите ваш код. Деление смотрел. Если мы решили задачу обхода 5х5 и при этом (!) гарантируем что для любого блока 5x5 можем заставить коня войти и выйти в нужную дверь (вход-выход) то задача обхода 130 на 130 уже решена за o(n). Но мне решать такие задачи не очень-то интересно. Формально доказать что вход-выход в 5х5 существует. Или 5х10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:03 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Да. Я не весь сорс опубликовал. Есть еще мелкая либа. Более полный вариант проекта здесь https://sourceforge.net/p/chess-experiments/code/HEAD/tree/trunk/mayton/knight-tour/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:09 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonЧто значит - "можно" ? Я и сам знаю что можно. Предложите ваш код. Только когда уйду в отпуск ;-) стараюсь хотя бы на выходных код не писать а в прошлые выходные работал. так что пока спрыгиваю с темы но буду подумывать на досуге, может что и придет в голову. Если ускорять бэкрейсинг то можно использовать просчитанные матрицы ходов к примеру для досок 5х5 (их около 2 тыс) и проверять текущую позицию через поиск подходящей матриц(ы) 5х5 (или меньшей в зависимости от позиции), здесь бы отлично подошла CAM память (проверка за один такт всех матриц 5х5). Ускорили бы бэктрейсинг примерно в 50 тыс раз (25 х 2000). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:34 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid uniqueТолько когда уйду в отпуск ;-) стараюсь хотя бы на выходных код не писать а в прошлые выходные работал. так что пока спрыгиваю с темы но буду подумывать на досуге, может что и придет в голову. Да ради бога. Я никуда не тороплю. Если ускорять бэкрейсинг то можно использовать просчитанные матрицы ходов к примеру для досок 5х5 (их около 2 тыс) и проверять текущую позицию через поиск подходящей матриц(ы) 5х5 (или меньшей в зависимости от позиции), здесь бы отлично подошла CAM память (проверка за один такт всех матриц 5х5). Ускорили бы бэктрейсинг примерно в 50 тыс раз (25 х 2000). Чо? Какая такая CAM-память? Ассоциативная? Не понял зачем это надо. Когда у нас есть бесконечное разнообразие hashtable/hashmap. И узкое место в - рекурсии а имеенно в движении коня по 8 направлениям а вовсе не в маппингах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 12:13 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Немножко переделал параметры. Не нравятся константы вбитые в код. Особенно в части 4 threads. Теперь так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 13:18 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Не знаю как насчет эффективности, а утилизацию обеспечивает. Вот так картинка выглядит с точки зрения JVisualVM при THREADS=5 (На моем ноуте - оптимально 5 threads). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 13:23 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
По поводу моей идеи кластерного коня, которая впрочем обсуждалась в литературе. Экспериментально я нашел что минимальная доска на которую можно покрыть конем это 4х5 или 5х4. Осталось еще доказать что всегда сущесвуют маршруты с нужной точкой входа и выхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:13 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonПо поводу моей идеи кластерного коня, которая впрочем обсуждалась в литературе. Экспериментально я нашел что минимальная доска на которую можно покрыть конем это 4х5 или 5х4. Осталось еще доказать что всегда сущесвуют маршруты с нужной точкой входа и выхода. Это алгоритм Конрада http://mathworld.wolfram.com/KnightGraph.html Conrad et al. (1994) discovered another linear time algorithm and proved that it solves the Hamiltonian path problem for all n>=5. The Conrad et al. algorithm works by decomposition of the chessboard into smaller chessboards (not necessarily square) for which explicit solutions are known. This algorithm is rather complicated because it has to deal with many special cases, but has been implemented in the Wolfram Language by A. Roth. Example tours are illustrated above for n×n boards with n=5 to 8. По поводу CAM памяти идея была в использовании при сравнении части доски с просчитанными матрицами за один такт и нахождении пересечений деревьев (маршрутов). Сразу накладывать ходы на глубину в 2-3 шага в виде штампа (без самопересечений) и обрабатывать только те которые не имеют пересечений с доской (листьев будет не так много, больше 8 но и не тысячи). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:53 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Конрад пошел еще дальше чем Варнсдорф. По сути задача решается выкладыванием мозаики из готовых шаблонов. Но все эти алгоритмы играют на строго прямоугольных досках. Что будет если им подать на вход доску с отверстием. Или доску неправильной формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 20:23 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonКонрад пошел еще дальше чем Варнсдорф. По сути задача решается выкладыванием мозаики из готовых шаблонов. Но все эти алгоритмы играют на строго прямоугольных досках. Что будет если им подать на вход доску с отверстием. Или доску неправильной формы. Да, это очень ограниченые методики, полных решений для доски 8х8 неизвестное количество, есть только грубая оценка. На ночь глядя склепал небольшой пример (не компилировал) для пояснения как можно использовать САМ с кешем для бэкрейсинга или рекурсивного обхода доски. Используются заранее расчитанные варианты шагов фиксированной глубины (положим 4, получается не такое большое количество вариантов максимум 8 * 7 * 7 * 7 = 2744 и дерево с 16 уровнями вместо 63. 1. Хранятся в бинарном виде позиции для каждого возможного пути глубиной N из заданой точки на доске (64 bit, long value) 2. По бинарному пути точек хранится траектория движения. 3. Вместо последовательного сравнения можно использовать CAM память и получить за 1 такт выборку возможных путей. Для глубины в 8 шагов экономия будет существенной (6.5 млн раз) a а размер кеша терпимым (420МБ для бинарного массива и 2 3 гига для объектов, можно уменьшить). С САМ возможно ускорение примерно на 6 порядков. Завтра вставать в 5, ушел... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 22:36 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid unique, ничо непонятно. Где entry-point? Как это использовать? Хотя-б модульный тест был-бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 00:30 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonuid unique, ничо непонятно. Где entry-point? Как это использовать? Хотя-б модульный тест был-бы. Пардон, это всего лишь иллюстрация использования САМ и кеша заранее рассчитанных ходов из любой позиции на доске. Даже без ассоциативной памяти с кешем бэкрейс будет работать шустрее. Написано грубовато, на ночь глядя, без проверок. Entry point: public List<List<Position>> getPrecalculatedPaths(int xPos, int yPos, int[][] board) Метод thread safe, доступ только на чтение из потоков. даете массив позиций на доске (0 ячейка свободна, 1 занята) и получаете коллекцию ходов коня на 4 шага вперед не конфликтующую с позициями на доске.Можете использовать тот же бэктрейсинг но не с 64 уровнями а с 16. В бэктрейс несколько потоков молотят один и тот же цикл проверки ходов коня для каждой ячейки на доске, одинаковая работа делается несколько раз, сравнение тоже в цикле идет. В кеше хранятся позиции коня для ходов на глубину в 4 шага (можно менять глубину) и сравнение делается по бинарным полям в long массива позиций фигур на доске в биты в long (как в массиве). Так как упаковка позиций в 64 бита переменную то макс площадь доски не более 64 позиций. А вот если бы была САМ память то вместо цикла получили бы выполнение сравнения за один такт. Здесь даже не true CAM подошла бы а гибридный вариант с сегментами обычной памяти (примерно как хэшмапа в Java устроена сначала быстрый поиск по хэш коду а потом в листе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 11:22 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid uniqueА вот если бы была САМ память то вместо цикла получили бы выполнение сравнения за один такт. Здесь даже не true CAM подошла бы а гибридный вариант с сегментами обычной памяти (примерно как хэшмапа в Java устроена сначала быстрый поиск по хэш коду а потом в листе). Облизываюсь на продукцию вот этой конторы давненько уже (лет 10) https://www.opalkelly.com/products/ Может все таки возьму эту плату или подобную в хозяйство https://www.opalkelly.com/products/xem7360/ стряхну пыль с книжек по Verilog и VHDL (лежат на полочке уже давно), скачаю новые версии IDE и тогда можно будет поизвращаться с шахматными задачками и специализированными ускорителями. Типовая бизнес Java действует на меня отупляюще, перестал думал, скоро буду мычать как Маугли ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 11:45 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Докину дровишек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2016, 00:39 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid uniqueПардон, это всего лишь иллюстрация использования САМ и кеша заранее рассчитанных ходов из любой позиции на доске. Даже без ассоциативной памяти с кешем бэкрейс будет работать шустрее. Написано грубовато, на ночь глядя, без проверок. Entry point: public List<List<Position>> getPrecalculatedPaths(int xPos, int yPos, int[][] board) Метод thread safe, доступ только на чтение из потоков. даете массив позиций на доске (0 ячейка свободна, 1 занята) и получаете коллекцию ходов коня на 4 шага вперед не конфликтующую с позициями на доске.Можете использовать тот же бэктрейсинг но не с 64 уровнями а с 16. В бэктрейс несколько потоков молотят один и тот же цикл проверки ходов коня для каждой ячейки на доске, одинаковая работа делается несколько раз, сравнение тоже в цикле идет. В кеше хранятся позиции коня для ходов на глубину в 4 шага (можно менять глубину) и сравнение делается по бинарным полям в long массива позиций фигур на доске в биты в long (как в массиве). Так как упаковка позиций в 64 бита переменную то макс площадь доски не более 64 позиций. А вот если бы была САМ память то вместо цикла получили бы выполнение сравнения за один такт. Здесь даже не true CAM подошла бы а гибридный вариант с сегментами обычной памяти (примерно как хэшмапа в Java устроена сначала быстрый поиск по хэш коду а потом в листе). Я тут пожалуй хочу услышать каменты коллег. Я мало чего понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2016, 00:44 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonЯ тут пожалуй хочу услышать каменты коллег. Я мало чего понял. Мэйтон, с Новым Годом! У меня все болеют вокруг, один я еще пока держусь (как в фильмах про зомби), открыл бутылочку Камю, хряпнул соточку неторопясь закусывая вкусной конфеткой... хороший коньячок в ЦУМе продают, не ожидал. Хорошо москвичи живут, в провинции такой коньяк найти трудно. В общем о чем я - с наилучшими пожеланиями в Новом 2017 году, чтоб были идеи в голове, интересная работа, здоровья хватало и семья была в порядке (жена довольна)! Чтоб наши потребности не опережали наши возможности и было счастье и лепота на душе! PS по поводу промера кода, ну что там непонятного? наспех написанный примерчик, набросок. Вместо проверки на один шаг делается проверку сразу на 4 шага вперед (количество шагов произвольное число, зависит от доступного размера кеша), у САМ памяти преимущество в том что поиск в несортированном массиве (любого размера) делается за 1 такт. Причем поиск может идти по маске а не полному совпадению. PSS Когда эта память станет массовой она перевернет устоявшиеся подходы в решении задач и многие неэффективные раньше алгоритмы получат второе дыхание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2016, 23:05 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonДокину дровишек. это ваша реализация отработала ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 20:11 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Да. Та которую я опубликовал по ссылке выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 20:13 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
друзья , напоминаю вам , что вопрос был относительно потоков. Доска 8x8 . поэтому никаких прямоугольных досок, никаких "дырок" в доске. старт осуществляем из клетки указанный пользователем. Рассуждения по поводу Варнсдорфа не интересны. Интересовал собственно вопрос возможно ли реализовать вывод хотя бы одного решения при помощи 4-х потоков или более. Да / Нет. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 20:21 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonДа. нет возможности пока скачать и посмотреть а с любой точки искалос? скажем с точки 0:1 , или 0:2 у меня с них висло все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2017, 21:33 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Для DFS - нормально работает для размеров до 7х7. Правда нет в моей реализации команды stop после первого найденного и пока 4 потока не отработают - процесс продолжает активность. Впрочем такой задачи я себе не ставил. Для DFS я пока не дождался решения 8х8. Мне жалко мой ноутбук Core-i3. Да батарея выгорает быстро когда он под нагрузкой. Но думаю завтра-послезавтра я доделаю Варнсдорфа и тоже добавлю его в список алгоритмов как плагин. И если у меня хватит сил - UI c графиками и статистикой. Есть еще несколько мыслей. Надо попробовать доску-тор. И доску-лабиринт где будут стоять другие фигуры. Чтоб не было явного преимущества у "беготни вдоль забора". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 00:11 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39374739&tid=2123306]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 311ms |

| 0 / 0 |
