Ключевое слово
30 | 05 | 2020
Новости Библиотеки
Шахматы Онлайн
Welcome, Guest
Username: Password: Remember me

TOPIC: алгоритмические задачки

алгоритмические задачки 03 Апр 2020 04:49 #211

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Хоть это совсем из другой оперы, но чуток напоминает. ))

1712.04956.png


arxiv.org/pdf/1712.04956.pdf
Сам себе доктор наук

алгоритмические задачки 03 Апр 2020 14:40 #212

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Sam Sebe wrote:
Тогда по факту перманент вычисляется довольно быстро, за минуту-полторы.

Точнее, за 53-75 секунд для тех 10 змеек длиной 63 клетки, что я нашел. Это если считать в лоб, т.е. по определению перманента. Для сравнения пришлось написать рекурсивную процедуру его вычисления, т.е. обращающуюся к себе самой, поскольку перманент, подобно детерминанту, можно разложить по строке или столбцу. В руководстве по программированию сказано, что рекурсивные алгоритмы обычно выглядят изящнее, чем нерекурсивные, но имеют два существенных недостатка... В связи с этим рекомендуется по возможности использовать нерекурсивные ("плоские") алгоритмы. В нашем случае, как оказалось, никаких недостатков нет и те же самые перманенты вычисляются за 3.1-3.2 секунды, т.е. в 20 раз быстрее. ))
Сам себе доктор наук

алгоритмические задачки 04 Апр 2020 05:38 #213

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Ускорил процедуру вычисления перманента еще в 3 с лишним раза, просто не доводя рекурсию до матриц размером 1х1, а останавливаясь на матрицах 3х3. Теперь, когда у нас есть процедура вычисления перманента менее чем за 1 секунду, можно рассматривать какие-то связанные с ним задачки. Владимирович, предложите чего-нибудь. Включите фантазию на трезвую свежую голову! Я уже включил. :)
Сам себе доктор наук
Last Edit: 04 Апр 2020 05:48 by Sam Sebe.

алгоритмические задачки 04 Апр 2020 06:27 #214

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 85224
  • Thank you received: 1275
  • Karma: 78
Если честно, то мне энтот перманент ни разу не понадобился :)
Поэтому, как его лучше считать, мне лень думать
:beer:
Каждому - своё.

алгоритмические задачки 04 Апр 2020 06:39 #215

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Vladimirovich wrote:
Если честно, то мне энтот перманент ни разу не понадобился :)
Поэтому, как его лучше считать, мне лень думать
:beer:

Нет, не как лучше считать (этот вопрос можно считать закрытым), а как его использовать. Чтоб он именно понадобился.
Сам себе доктор наук
Last Edit: 04 Апр 2020 07:52 by Sam Sebe.

алгоритмические задачки 04 Апр 2020 08:47 #216

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Смотрите, какие ассоциации. Андралексу, думаю, понравится, поскольку фантазия у него работает, в отличие от некоторых. ;)

Вот как можно расшифровать слово "уж", змея, змейка: уязвимость vs живучесть, vulnerability VS survivability.

Линкор (в морском бою, не забыли?) и лейнер. Знаете, что такое лейнер? Это такой сменный вкладыш в артиллерийский ствол для повышения его живучести.

"Износ стволов значительно возрастает с увеличением калибра и длины ствола — на линкорах последних серий, имевших пушки калибром 14—16" и длину ствола 45—50 калибров, рассеивание снарядов значительно возрастало уже через несколько десятков (до ста) выстрелов", - сказано в Википедии. И еще: "Живучесть ствола (лейнера) орудия определяется как количество выстрелов, которые может произвести орудие до выхода из строя или снижения кучности выстрелов до неприемлемого уровня".

Догадались теперь, к чему я клоню?
Сам себе доктор наук

алгоритмические задачки 04 Апр 2020 14:04 #217

  • Хайдук
  • Хайдук's Avatar
  • OFFLINE
  • Наместник
  • Posts: 40684
  • Thank you received: 90
  • Karma: 24
не :popcorn:

алгоритмические задачки 04 Апр 2020 15:37 #218

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Будем говорить, что змейка живая, когда ее перманент положителен, и мертвая, когда он нулевой. Мало того, будем последовательно удалять из змейки ее клетки до тех пор, пока она не умрет: удалили n клеток, змейка еще живая, а удалили (n + 1)-ю клетку, она умерла, ее перманент обнулился. Если исходная длина змейки составляла l (эль) клеток, величину s = n/l назовем живучестью змейки, а сопряженную величину s* назовем уязвимостью змейки. Как определить сопряженность? Можно так:

s* = 1 - s, и тогда s + s* = 1 (единица),

но я склонен так:

s* = (1 - s)/(1 + s), и тогда s + s* + ss* = 1.

При этом удалять клетки можно по-разному, тем самым живучесть (уязвимость) бывает разная:

(1) головная, если клетки удаляются с начала змейки;
(2) хвостовая, если клетки удаляются с конца змейки;
(3) смешанная, если клетки равновероятно удаляются с начала и с конца;
(4) общая, если клетки равновероятно удаляются по всей длине;
(5) еще отдельно можно рассматривать тело змейки, но мы не будем.

Предварительные результаты следующие. Я взял 50 случайных змеек длиной l = 50 клеток каждая (одна змейка попалась мертвой, и в сумме их не 50, а 49). Головная и хвостовая живучести в среднем получились одинаковые, по 16% (n = 8 в среднем), но смешанная живучесть оказалась равной 22% (n = 11). Общая же живучесть вышла самой большой, 38% (n = 19), т.е. змейку можно всю изрешетить, а она все равно живая. Вот, например, распределение f числа n.

perm_50_mix_50n.png


Последняя, 50-я змейка как раз среднестатистическая.
Сам себе доктор наук
Last Edit: 05 Апр 2020 11:25 by Sam Sebe.

алгоритмические задачки 05 Апр 2020 10:30 #219

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Vladimirovich wrote:
Если честно, то мне энтот перманент ни разу не понадобился :)
Поэтому, как его лучше считать, мне лень думать
:beer:

Хорошо, давайте возьмем детерминант вместо перманента, наверняка хоть раз понадобившийся. Чем здесь он хуже перманента?

Во-первых, кроме неотрицательных он принимает и отрицательные значения, что нужно как-то интерпретировать.

Во-вторых, в процессе уменьшения змейки отрицательные значения детерминанта могут перемежаться с положительными и могут как убывать, так и возрастать (и по модулю тоже), что опять же нужно интерпретировать.

Для эксперимента я взял предыдущие 50 змеек длиной 50 клеток и сделал те же самые вычисления, но уже с детерминантом, - последовательно удаляя из змейки клетки, пока он не обнулится (в неудаленной клетке змейки в матрице стоит 1, а в удаленной - 0).

det_50_mix_50n.png


При этом у 27 змеек из 50 детерминант оказался нулевым изначально, до удалений, как у 50-й змейки, и у 5 змеек он обнулился при первом же удалении.
Сам себе доктор наук
Last Edit: 05 Апр 2020 11:24 by Sam Sebe.

алгоритмические задачки 05 Апр 2020 10:39 #220

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 85224
  • Thank you received: 1275
  • Karma: 78
Sam Sebe wrote:
наверняка хоть раз понадобившийся
Разумеется.
Sam Sebe wrote:
Чем здесь он хуже перманента?
Понятия не имею. Я никогда так не мыслю.
Каждому - своё.

алгоритмические задачки 05 Апр 2020 11:32 #221

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Vladimirovich wrote:
Sam Sebe wrote:
Чем здесь он хуже перманента?
Понятия не имею. Я никогда так не мыслю.

Вот, я как раз и объяснил, чем детерминант хуже перманента в данном случае.
Перманент здесь легко интерпретируется, а детерминант никак не интерпретируется.
Сам себе доктор наук

алгоритмические задачки 05 Апр 2020 11:40 #222

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
00861034f365t.jpg
Сам себе доктор наук

алгоритмические задачки 05 Апр 2020 16:43 #223

  • Хайдук
  • Хайдук's Avatar
  • OFFLINE
  • Наместник
  • Posts: 40684
  • Thank you received: 90
  • Karma: 24
взорвали корабль? :O
почем выставили эту фотку, самоед? как колышет перманенты и детерминанты? :dontknow:
Last Edit: 06 Апр 2020 01:26 by Хайдук.

алгоритмические задачки 06 Апр 2020 04:48 #224

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Хайдук, ну ты даешь. Здесь вот уже сколько постов подряд я обсуждаю размещение кораблей в игре Морской бой, додумавшись размещать их змейков некоего замечательного вида (сами змейки возникли из предыдущей задачи этой ветки). В связи с этими змейками и размещениями дело дошло до того, что были введены такие важные понятия, как непрерывность, необратимость, живучесть и уязвимость (змеек и, по логике, флотилий). И идеи вроде как еще не закончились...
Сам себе доктор наук

алгоритмические задачки 06 Апр 2020 05:11 #225

  • Хайдук
  • Хайдук's Avatar
  • OFFLINE
  • Наместник
  • Posts: 40684
  • Thank you received: 90
  • Karma: 24
a что случилось с кораблём на фотке, взорвало к чёртовой матери? :(
Last Edit: 06 Апр 2020 05:23 by Хайдук.

алгоритмические задачки 06 Апр 2020 05:47 #226

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Бывший эсминец Файф в качестве корабля-мишени. Хирургический отрез торпедой Мк.48
www.forum.militaryparitet.com/viewtopic.php?id=3520&p=14
Сам себе доктор наук

алгоритмические задачки 06 Апр 2020 13:06 #227

  • Хайдук
  • Хайдук's Avatar
  • OFFLINE
  • Наместник
  • Posts: 40684
  • Thank you received: 90
  • Karma: 24
ага, палочка на фотке меж двумя башнями это то самое торпедо, не? :idea:

алгоритмические задачки 06 Апр 2020 17:20 #228

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Я тут поразмыслил и понял, что определять живучесть и уязвимость змеек через перманент это нелогично. Логичнее будет определить их через количество расстановок кораблей в змейках - так же, как определялась необратимость змейки. И как только это количество уменьшится до нуля с убыванием числа клеток змейки, она умрет.
Сам себе доктор наук
Last Edit: 06 Апр 2020 18:14 by Sam Sebe.

алгоритмические задачки 06 Апр 2020 17:26 #229

  • Хайдук
  • Хайдук's Avatar
  • OFFLINE
  • Наместник
  • Posts: 40684
  • Thank you received: 90
  • Karma: 24
а как по части моего открытия (!) (палочки-торпедо) сферху? :popcorn:

алгоритмические задачки 06 Апр 2020 17:48 #230

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Не знаю, к делу это не очень относится. :(
Сам себе доктор наук

алгоритмические задачки 06 Апр 2020 19:07 #231

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Sam Sebe wrote:
Я тут поразмыслил и понял, что определять живучесть и уязвимость змеек через перманент это нелогично. Логичнее будет определить их через количество расстановок кораблей в змейках - так же, как определялась необратимость змейки. И как только это количество уменьшится до нуля с убыванием числа клеток змейки, она умрет.

Короче, живучесть и уязвимость змейки определяются так же, как в посте #490931, только n определяется по-другому: удалили n клеток - количество расстановок кораблей, потенциально помещающихся в змейку, еще положительно, а удалили (n + 1)-ю клетку, оно обнулилось. Для эксперимента я взял те же самые 50 змеек длиной 50 клеток. В случае головной, хвостовой и смешанной живучестей получилось, что n = 12, а в случае общей живучести вышло n = 8.
Сам себе доктор наук

алгоритмические задачки 07 Апр 2020 06:51 #232

  • Andralex
  • Andralex's Avatar
  • OFFLINE
  • Кравчий
  • Posts: 474
  • Thank you received: 9
  • Karma: 3
#216
Андралексу, думаю, понравится, поскольку фантазия у него работает, в отличие от некоторых. ;)
Спасибо за комплимент! Полагаю, у других фантазия так же замечательно работает. :hihihi:

Догадались теперь, к чему я клоню?

Что можно сказать насчёт лейнеров на флоте? Это такие же сменные блоки, как картриджи для принтеров.
Почему ствол после выстрелов приходит в негодность?

Дело в этой формуле. Снаряд при выстреле никогда не начинает движение идеально строго по прямой траектории, параллельной стволу. По закону Паскаля, хотя векторы сил выталкивания газов на снаряд параллельны, всегда найдутся микродеформации, или другие погрешности снаряда (лейнера), которые изменят направление при ускорении снаряда.
Ствол служит направляющим элементом орудия Чем массивнее снаряд, тем тяжелее приходится стволу корректировать такие ушатывания снаряда.

Перманентность в змейках?
Могу только предположить степени живучести кораблей в игре "Морской Бой".

◘ - однопалубный. Располагается в самых неожиданных местах. При обнаружении шансы у противника на победу возрастают на 9%. Шанс = 3(N+2), где N - количество палуб: одна клетка и восемь прилегающих.
Имеет риск быть легко "вычисленным" в окончании игры.

◘◘ - двухпалубный. Крепче, так как при попадании у противника имеется вероятность промаха 75% на следкющем ходу. При уничтожении, шансы на победу противника возрастают на 12%.

◘◘◘ - трёхпалубный. Чуть крепче, так как 75% ещё умножается на 50% при третьем, окончательном попадании.
Шансы противника 15%.

◘◘◘◘ - четырёхпалубный. Легче всего "вычислить" в начале игры, несмотря на умножения вероятности при попадании 75% 50% 50%. Шансы противника 18%.

Как-то так.
...не мы первые, не мы последние...

алгоритмические задачки 07 Апр 2020 07:07 #233

  • Vladimirovich
  • Vladimirovich's Avatar
  • OFFLINE
  • Инквизитор
  • Posts: 85224
  • Thank you received: 1275
  • Karma: 78
Andralex wrote:
Дело в этой формуле. Снаряд при выстреле никогда не начинает движение идеально строго по прямой траектории, параллельной стволу. По закону Паскаля, хотя векторы сил выталкивания газов на снаряд параллельны, всегда найдутся микродеформации, или другие погрешности снаряда (лейнера), которые изменят направление при ускорении снаряда.
Ствол служит направляющим элементом орудия Чем массивнее снаряд, тем тяжелее приходится стволу корректировать такие ушатывания снаряда.
Поэтому артиллерия и перешла на нарезные орудия. Ось вращения обеспечивает гироскопическую стабилизацию
Каждому - своё.

алгоритмические задачки 07 Апр 2020 14:03 #234

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Я пока живучесть отдельных кораблей не подсчитал, а подсчитал только живучесть змейки - как бы контейнера, их всех содержащего. Но одна идея у меня есть.
Сам себе доктор наук

алгоритмические задачки 09 Апр 2020 13:36 #235

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Sam Sebe wrote:
Я пока живучесть отдельных кораблей не подсчитал, а подсчитал только живучесть змейки - как бы контейнера, их всех содержащего. Но одна идея у меня есть.

Идея следующая. Змейка - это специальная последовательность (по-моему красивая) клеток игрового поля, состоящего из 10х10 = 100 клеток. Змейка имеет определенную емкость, измеряемую числом возможных расстановок в ней 10 кораблей игры "Морской бой". Это число обычно очень велико (но может быть и нулевым). С другой стороны, любую игровую расстановку можно заключить в такую змейку.

Вычеркнем из змейки одну клетку, ее емкость уменьшится или, в лучшем случае, сохранится. Это уменьшение - детримент (ущерб) detr - характеризует данную клетку, а суммарный по всем клеткам детримент описывает саму змейку. Для игры кажется естественным расставлять корабли так, чтобы суммарный детримент всех 20 клеток расстановки кораблей был минимальным, максимизирующим остаточную емкость (неопределенность) змейки. Абсолютным рекордсменом по идее будет расстановка с наибольшей остаточной емкостью ее змейки.

Единственное ограничение, налагаемое, чтобы избежать неподъемных вычислений, - это требование упорядоченности расстановки кораблей: по ходу змейки они должны идти по рангу (линкор, крейсера, эсминцы, катера) или наоборот; эти порядки я обозначаю dir (прямой порядок) и rev (обратный). Так что если вы зададите свою собственную расстановку кораблей, чтобы оценить ее ущербность, она должна быть упорядоченной - в рамках подходящей змейки.

Для эксперимента я обсчитал всё те же 10 случайных змеек длиной 50 клеток и 10 случайных змеек длиной 60 клеток. В целом у змеек длиной 60 емкость существенно выше, а относительный (отнесенный к detr самой змейки) минимальный детримент расстановок заметно ниже.

Вот две из этих змеек длиной 50 и 60 клеток. Числа обозначают детримент клеток, отнесенный к детрименту змейки и выраженный для точности в десятых долях процента, промилле ‰. Расстановки, имеющие минимальный декремент, я намеренно не привожу, хотя и знаю их (здесь они единственные, да и в общем случае их вряд ли много, 1-2-3, мало отличающихся друг от друга). Можете попробовать отыскать вручную (по ‰) расстановки, имеющие минимальный детримент (в %), и, может статься, меня посрамить. :)

zmejka_10_dln_50.png
zmejka_1_dln_60.png


Обе змейки в целом идут сверху вниз и у обеих минимальная расстановка получится rev (поскольку противоидущие - dir - выйдут только хуже).
Сам себе доктор наук
Last Edit: 14 Апр 2020 10:21 by Sam Sebe.

алгоритмические задачки 10 Апр 2020 06:13 #236

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Вы можете возразить, что просто суммировать детрименты клеток, составляющих флотилию, для определения ее детримента это неправильно. По-хорошему, надо вычесть из змейки всю флотилию целиком и только после этого подсчитывать остаточную емкость змейки с целью ее максимизации по всем флотилиям, вмещаемым исходной змейкой. Да, правильно, но технически это очень сложно. Представьте себе, что емкость змейки составляет миллиард флотилий, которую надо сначала подсчитать, и для каждой из них остаточная емкость змейки составляет хотя бы десять флотилий, если снова не миллиард не миллион...

Промежуточный шаг, который можно сделать, - это вычитать из змейки не отдельные клетки и не целиком флотилии, а корабли. Это лучше, но возражение все равно останется.

Так что пока не знаю, что делать.
Сам себе доктор наук
Last Edit: 10 Апр 2020 06:23 by Sam Sebe.

алгоритмические задачки 10 Апр 2020 18:45 #237

  • Хайдук
  • Хайдук's Avatar
  • OFFLINE
  • Наместник
  • Posts: 40684
  • Thank you received: 90
  • Karma: 24
бросай и забудь :dance:

алгоритмические задачки 14 Апр 2020 07:45 #238

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Немного осовременил пост #235. Детримент теперь считается чуть правильнее, более соответствует идее, а главное, в конце я вычитаю из змейки полученную рекордную расстановку (флотилию) и вычисляю остаточную емкость змейки. Пусть я и не могу гарантировать максимальность этого остатка (он может оказаться и нулевым), но это хоть какая-то рациональность. К сожалению, программа стала работать вдвое дольше. Обсчет 10 змеек длиной 60 клеток - правда в фоновом режиме - длился почти 6 часов (а длиной 50 клеток - 6 минут).

Рекордные упорядоченные флотилии (рекордные в смысле минимальности суммы детриментов их клеток) я по-прежнему не привожу - во избежание своего возможного посрамления. :) Но это не мешает вам поискать их вручную, все ‰ для этого приведены. Более того, даже вручную могут обнаружиться неупорядоченные флотилии, которые лучше рекордных (по указанной минимальности), но упорядоченных.
Сам себе доктор наук
Last Edit: 14 Апр 2020 12:07 by Sam Sebe.

алгоритмические задачки 14 Апр 2020 13:44 #239

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Ниже даны емкости m (измеряемые числом флотилий) все тех же 10 змеек длиной 50 клеток и 10 змеек длиной 60 клеток, а также их остаточные емкости sub m после удаления клеток рекордных (в указанном смысле) упорядоченных флотилий.

m-tabl-50.png
m-tabl-60.png


Непосредственно видно, во-первых, что удаляемых флотилий может быть не одна, а две, и, во-вторых, что остаточные емкости могут как разниться, так и одновременно обнуляться.

Змейкам, изображенным в посте #235, соответствуют строчка 9 в первой таблице и строчка 8 во второй.
Сам себе доктор наук
Last Edit: 14 Апр 2020 13:58 by Sam Sebe.

алгоритмические задачки 16 Апр 2020 12:16 #240

  • Sam Sebe
  • Sam Sebe's Avatar
  • OFFLINE
  • Боярин
  • Posts: 1309
  • Thank you received: 26
  • Karma: 3
Sam Sebe wrote:
Промежуточный шаг, который можно сделать, - это вычитать из змейки не отдельные клетки и не целиком флотилии, а корабли.

Проделал это с прежними змейками длиной 50 клеток (но уже не за 6, а за 12 минут). В четырех случаях (см. предыдущий пост) результат улучшился (остаточная емкость - sub m - увеличилась), в трех случаях ухудшился и в трех не изменился. В общем, так себе.

detrosudno_50.png


А затем я сделал финт ушами: заново вычислил детрименты клеток, суммировав детрименты кораблей, начинающихся в этих точках, и снова все посчитал, но уже по старой схеме. Увы, результат только ухудшился.

detrosudnokletka_50.png


Можно было бы попробовать сочетать детрименты клеток с детриментами кораблей по-другому, но у меня есть идея получше.
Сам себе доктор наук
Last Edit: 16 Апр 2020 12:23 by Sam Sebe.
Moderators: Grigoriy
Рейтинг@Mail.ru

Научно-шахматный клуб КвантоФорум