Группа guest
Всем доброго времени суток!
Недавно администрация уведомила игроков о проблеме с альянсовыми сетями, их возможной будущей урезке на почве того, что не могут создать рабочий адекватный алгорим для вычисления алянсовых сетей.
Основной проблемой в алгоритме КА была неоднозначность принадлежности систем к сетям альянсов. То есть при определении принадлежности граничных систем, там где сети альянсов накладываются друг на друга получаестся так, что рассчитывая станцию альянса А, она перекрывает несколько других вражеских станций альянса Б, приходится пересчитывать сеть Б, а она построена таким образом, что тоже перекрывает при расчете часть сети альянса А. Получаем необходимость кучи цикличских перерасчетов и хорошо если они конечные.
Поэтому предлагаю свой вариант расчета альянсовых сетей с однозначным определеним принадлежности без отказа от существующих радиусов и серьезного изменения параметров альянсовых структур.
Идея была такой. Альянсовые станции представляем точечными объектами, аналогично тому, как в электростатике представляется точечный заряд, а сигнал станции в конкретной системе расчитываем аналогично расчету потенциала точечного заряда на некотором от него удалении.
То есть, если отображать графически, то выглядеть это в идеале должно аналогично картине потенциалов полей электрических зарядов на плоскости.
У нас же это все равно будет немного не так.
Очевидно, что сигнал падает обратнопропорционально расстоянию до системы.
Я создал рабочую модель описанного выше варианта в экселе , как бы ни смешно это звучало. Для примера взял территорию 10*10 для простоты эксперимента, но растянуть до больших размеров не составит труда, тупо машинальные растягивания.
Станция альянса 1 стоит в точке (5;3), имеет 4 уровень, мощность 6000, для более приятного отображения просто поделил на 1000, то есть мощность 6.
Слева - расстояния от станции до конкретных систем в тысячах укм. Справа величина сигнала в каждой из систем.
Станция альянса 2 стоит в точке (3;3), 4 уровень, мощность 6.
Станция альянса 3 стоит в точке (8;6), 4 уровень, мощность 6.
Результат наложения сетей по принципу вышеописанному принципу. Слева результат, справа сервисная матрица для расчета всего этого хозяйства.
Пример для станций в тех же точках 10, 5 и 2 уровня соответственно:
Еще пример.
1 - станция в (1;1), 5 лвл;
2 - станция в (5;7), 3 лвл;
3 - станция в (10;10), 7 лвл.
Еще пример с двумя альянсами.
1 - станция в (3;3), 1 лвл;
2 - станция в (5;7), 5 лвл.
Примеров накидать могу массу каких угодно как захотите.
Как видно из примеров, при таком варианте перекрыть сеть станет сложнее, что логичнее с точки зрения реализма. Я считаю абсолютно неправильным, когда за 15к+ укм накрывают сетью без возможности ее перкрытия, кроме как построить сеть более высокого уровня.
Обращаю внимание, что речь шла не про бонусы от альянсовых объектов или сети, а именно про принадлежность сетей к альянсам!!!
Теперь про бонусы. Их предлагаю не трогать воизбежание стреляния феном, их радиус действия и величину оставить прежней.
Очевидно, что при такой реализации получится картина, что бонус станции, подключенной к сети на спорных территориях и даже вражеской будет действовать в полную силу, но там будет отсутствовать бонус сети, что так же выглядит логично.
Теперь для Mr-Snake алгоритм реализации.
Станция 1 имеет координаты (x1;y1) с радиусом действия r1, откуда получаем массив систем М1 в которых следует посчитать сигнал от этой станции.
Вычисленные значения записываются в общий массив G, который отображает галактику в целом и хранит значения сигнала станций и их принадлежность к альянсам.
G - трехмерный массив, в котором по третьей размерности хранятся данные. Допустим G0 - текущее значение сигнала в системе, G1 - принадлежность системы, G2 - предыдущее значение сигнала в системе.
Предположим, что эти станции имеют пересечение.
Станция 2 имеет координаты (x2;y2) с радиусом действия r2, снова считаем массив систем М2 и перед записью каждого элемента M2 в G производим проверки:
1. Элемент m2 больше 1? Если нет, то переходим к другому элементу m2.
2. Элемент G1 равен нулю?
Если да, то не является ли он уже спорной территорией? Если спорная территория, сравниваем с предыдущим значением G2 и если больше, то меняем значение принадлежности, m2 записывается в G1, если меньше то остается спорная территория.
3. Элемент G1 не равен нулю. Сравниваем m2 c G0. Если m2 меньше, переходим к следующему m2. Если больше, записываем m2 в G0. Если равен, то m2 записывается в G2, а в G1 устанавливается 0.
Начать расчеты лучше всего со станций максимального уровня.
После пересчета всех станций и заполнения G1 запускаем ваш алгоритм по присоединению станций к центру сети, а после него уже алгоритм окружения и сети готовы.
Подобные пересчеты можно делать не каждые 15 минут, как делалось ранее, а раз в N часов или даже 1-2 раза в сутки.
Основной фишкой предложенного считаю отсутствие необходимости неоднократного пересчета уже посчитанных станций, принадлежность каждой системы в конце расчета определяется однозначно.
Считаю что при таком подходе все игроки должны остаться довольны, а игра не сведется к "игре в точки", как это предлагает Вася.
Конечно я понимаю, что все вышеописанное в реализации будет не просто, но должно решить проблему и привести эти самые сети в порядок.
Если надо табличку, то скину. Могу увеличить размер.
В конце немного риторических вопросов.
Во-первых, если ТЗ было невыполнимо, то может быть сразу стоило поменять ТЗ, обосновав нецелесообразность попыток?
Во-вторых, что за привычка решать проблемы КА за счет урезания? Ладно бы что-то быстронаживное, но сети альянсов строятся годами!
В-третьих, почему мне ничего не сказали до самого последнего момента, что сети перерабатываются?
Недавно администрация уведомила игроков о проблеме с альянсовыми сетями, их возможной будущей урезке на почве того, что не могут создать рабочий адекватный алгорим для вычисления алянсовых сетей.
Основной проблемой в алгоритме КА была неоднозначность принадлежности систем к сетям альянсов. То есть при определении принадлежности граничных систем, там где сети альянсов накладываются друг на друга получаестся так, что рассчитывая станцию альянса А, она перекрывает несколько других вражеских станций альянса Б, приходится пересчитывать сеть Б, а она построена таким образом, что тоже перекрывает при расчете часть сети альянса А. Получаем необходимость кучи цикличских перерасчетов и хорошо если они конечные.
Поэтому предлагаю свой вариант расчета альянсовых сетей с однозначным определеним принадлежности без отказа от существующих радиусов и серьезного изменения параметров альянсовых структур.
Идея была такой. Альянсовые станции представляем точечными объектами, аналогично тому, как в электростатике представляется точечный заряд, а сигнал станции в конкретной системе расчитываем аналогично расчету потенциала точечного заряда на некотором от него удалении.
То есть, если отображать графически, то выглядеть это в идеале должно аналогично картине потенциалов полей электрических зарядов на плоскости.
У нас же это все равно будет немного не так.
Цитата: Принцип действия
Мощность (P) станции будет выражаться в радиусе ее действия. Например АС 4 будет иметь значение мощности 6000 (То же самое значение что и сейчас).
Значение сигнала S на расстоянии r от станции вычисляется как S = P/r.
Система принадлежит тому альянсу, значение сигнала которого от его станции выше.
Системы, в которых сигнал менее единицы не принадлежат никакому альянсу.
Системы, в которых сигнал от не союзных станций равен считаются спорными территориями и тоже никому не принадлежат.
Значение сигнала S на расстоянии r от станции вычисляется как S = P/r.
Система принадлежит тому альянсу, значение сигнала которого от его станции выше.
Системы, в которых сигнал менее единицы не принадлежат никакому альянсу.
Системы, в которых сигнал от не союзных станций равен считаются спорными территориями и тоже никому не принадлежат.
Очевидно, что сигнал падает обратнопропорционально расстоянию до системы.
Я создал рабочую модель описанного выше варианта в экселе , как бы ни смешно это звучало. Для примера взял территорию 10*10 для простоты эксперимента, но растянуть до больших размеров не составит труда, тупо машинальные растягивания.
Станция альянса 1 стоит в точке (5;3), имеет 4 уровень, мощность 6000, для более приятного отображения просто поделил на 1000, то есть мощность 6.
Слева - расстояния от станции до конкретных систем в тысячах укм. Справа величина сигнала в каждой из систем.
Станция альянса 2 стоит в точке (3;3), 4 уровень, мощность 6.
Станция альянса 3 стоит в точке (8;6), 4 уровень, мощность 6.
Результат наложения сетей по принципу вышеописанному принципу. Слева результат, справа сервисная матрица для расчета всего этого хозяйства.
Пример для станций в тех же точках 10, 5 и 2 уровня соответственно:
Еще пример.
1 - станция в (1;1), 5 лвл;
2 - станция в (5;7), 3 лвл;
3 - станция в (10;10), 7 лвл.
Еще пример с двумя альянсами.
1 - станция в (3;3), 1 лвл;
2 - станция в (5;7), 5 лвл.
Примеров накидать могу массу каких угодно как захотите.
Как видно из примеров, при таком варианте перекрыть сеть станет сложнее, что логичнее с точки зрения реализма. Я считаю абсолютно неправильным, когда за 15к+ укм накрывают сетью без возможности ее перкрытия, кроме как построить сеть более высокого уровня.
Обращаю внимание, что речь шла не про бонусы от альянсовых объектов или сети, а именно про принадлежность сетей к альянсам!!!
Теперь про бонусы. Их предлагаю не трогать воизбежание стреляния феном, их радиус действия и величину оставить прежней.
Очевидно, что при такой реализации получится картина, что бонус станции, подключенной к сети на спорных территориях и даже вражеской будет действовать в полную силу, но там будет отсутствовать бонус сети, что так же выглядит логично.
Теперь для Mr-Snake алгоритм реализации.
Станция 1 имеет координаты (x1;y1) с радиусом действия r1, откуда получаем массив систем М1 в которых следует посчитать сигнал от этой станции.
Вычисленные значения записываются в общий массив G, который отображает галактику в целом и хранит значения сигнала станций и их принадлежность к альянсам.
G - трехмерный массив, в котором по третьей размерности хранятся данные. Допустим G0 - текущее значение сигнала в системе, G1 - принадлежность системы, G2 - предыдущее значение сигнала в системе.
Предположим, что эти станции имеют пересечение.
Станция 2 имеет координаты (x2;y2) с радиусом действия r2, снова считаем массив систем М2 и перед записью каждого элемента M2 в G производим проверки:
1. Элемент m2 больше 1? Если нет, то переходим к другому элементу m2.
2. Элемент G1 равен нулю?
Если да, то не является ли он уже спорной территорией? Если спорная территория, сравниваем с предыдущим значением G2 и если больше, то меняем значение принадлежности, m2 записывается в G1, если меньше то остается спорная территория.
3. Элемент G1 не равен нулю. Сравниваем m2 c G0. Если m2 меньше, переходим к следующему m2. Если больше, записываем m2 в G0. Если равен, то m2 записывается в G2, а в G1 устанавливается 0.
Начать расчеты лучше всего со станций максимального уровня.
После пересчета всех станций и заполнения G1 запускаем ваш алгоритм по присоединению станций к центру сети, а после него уже алгоритм окружения и сети готовы.
Подобные пересчеты можно делать не каждые 15 минут, как делалось ранее, а раз в N часов или даже 1-2 раза в сутки.
Основной фишкой предложенного считаю отсутствие необходимости неоднократного пересчета уже посчитанных станций, принадлежность каждой системы в конце расчета определяется однозначно.
Считаю что при таком подходе все игроки должны остаться довольны, а игра не сведется к "игре в точки", как это предлагает Вася.
Конечно я понимаю, что все вышеописанное в реализации будет не просто, но должно решить проблему и привести эти самые сети в порядок.
Если надо табличку, то скину. Могу увеличить размер.
В конце немного риторических вопросов.
Во-первых, если ТЗ было невыполнимо, то может быть сразу стоило поменять ТЗ, обосновав нецелесообразность попыток?
Во-вторых, что за привычка решать проблемы КА за счет урезания? Ладно бы что-то быстронаживное, но сети альянсов строятся годами!
В-третьих, почему мне ничего не сказали до самого последнего момента, что сети перерабатываются?
19 Марта 2018 19:59:07
Алгоритм соединения станций в сеть по-моему остался такой же. Попросил программиста это асилить.
19 Марта 2018 20:24:10
Цитата: VasyaMalevich
Алгоритм соединения станций в сеть по-моему остался такой же.
Так я это и написал, что механизм соединения ваш и оставить.
19 Марта 2018 20:28:25
Цитата: Ulrezaj
Так я это и написал, что механизм соединения ваш и оставить.
Представь что у тебя две станции соединились в сеть, но после того как посчитана сеть одного альянса посредине станций сигнал оказался перекрыт чужой станцией и соединение отвалилось, а от станции до которой в итоге не дошёл сигнал рухнула вся сеть, которая перекрывала сети других альянсов.19 Марта 2018 20:31:21
Репутация 483
Группа Head cluster
Альянс OnlyOneTeam4Rever
270
87
134
Очков 63 135 680
Сообщений 844
VasyaMalevich, Ты хоть топикстартер читал? Даже мне дебилу в математике и то понятно.
19 Марта 2018 20:36:32
VasyaMalevich, ты не понял, сначала считаем принадлежность системы к сети, а потом уже выстраиваем цепочку распространения сети.
19 Марта 2018 20:42:50
Ulrezaj, проблема в том что принадлежность к определённой сети зависит от других сетей потому что сети друг друга перекрывают. И на передний план выходит порядок расчёта.
19 Марта 2018 21:03:06
VasyaMalevich, у вас слишком закостенелый взгляд на аллсети. Предлагается не строить сразу же цепочку сетей, а сначала определить какая станция в какой системе будет давать больший сигнал и лишь после этого выстраивать цепочку распространения сетей уже по готовым значениям сигналов.
19 Марта 2018 23:01:48
При окружении красная сеть может накрыть отросток более сильной синей сети. Тогда кусок синей будет работать, хотя не должен.
19 Марта 2018 23:53:20
Яблочко... А-аа, агенты Эппла среди нас!! Но почему оно не надкусано? Происки Гейтса? Да-аа, запутано всё как-то...
20 Марта 2018 00:21:44
Цитата: Семен
При окружении красная сеть может накрыть отросток более сильной синей сети.
На вашем рисунке нет окружения синей сети красной. Я вижу только пересечения.
20 Марта 2018 00:24:45
Ulrezaj, добрый день. С вычислением мощности станций проблем особых нет. Проблемы начинаются когда необходимо точно узнать работает вообще эта станция или нет. В нужное время отрезать куски которые перестали контачить с сетью / банком. Приведу несколько примеров
Тут все более менее просто ад начинается дальше: Сигнал может ведь не только по прямой ходить
А теперь предлагаю отгадать загадку :)
У нас 2 сети перекрывают друг друга вот такой колбасой. Цветными цифрами показаны мощность станций. Темным тоном показана сеть которая на 100% работает. Бледным пока еще не разобранный участок.
Тут все более менее просто ад начинается дальше: Сигнал может ведь не только по прямой ходить
А теперь предлагаю отгадать загадку :)
У нас 2 сети перекрывают друг друга вот такой колбасой. Цветными цифрами показаны мощность станций. Темным тоном показана сеть которая на 100% работает. Бледным пока еще не разобранный участок.
20 Марта 2018 08:47:36
Цитата: Mr-Snake
У нас 2 сети перекрывают друг друга вот такой колбасой. Цветными цифрами показаны мощность станций. Темным тоном показана сеть которая на 100% работает. Бледным пока еще не разобранный участок.
Ответ зависит от последовательности расчёта сети. Если сперва посчитаем красную бесцветные сектора станут красными, если зелёную, то всё зохавает зелёная сеть.У меня встречный вопрос. Если сделать без радиусов чтобы с станция вещала только на 1 сс не получится ли такая же задачка?
20 Марта 2018 09:14:55
Mr-Snake, картинки под номерами 1, 2, 2.1, 2.2 некорректны, так как сети распространяются нынче не так. Станции должны не просто соприкасаться своим радиусом действия, а одна должна находиться в радиусе действия другой чтобы дальше распространять сеть.
Задачка поставлена опять же некорректно, так как не указаны уровни распространяющих станций от систем, в которых находятся банки и в промежуточных системах цвета топленого молока.
Задачка поставлена опять же некорректно, так как не указаны уровни распространяющих станций от систем, в которых находятся банки и в промежуточных системах цвета топленого молока.
20 Марта 2018 09:33:06
Я нарисовал для упрощения восприятия. Так намного компактнее.
Тоже самое с вашим пожеланиями:
Не значащие цифры я вообще опустил, вот с ними.
Тоже самое с вашим пожеланиями:
Не значащие цифры я вообще опустил, вот с ними.
20 Марта 2018 09:42:01
Mr-Snake, не то же самое. Фигуры зеленоватого цвета и красноватого по идее должны быть источниками равного сигнала, а следовательно и клетка с символом O в моей версии является спорной территорией и там просто отсутствует сеть.
Просил источники банков, но ладно, предположим что тоже 1 и 1.
Подобный случай можно решить элементарно путем отрубания обеих сетей в системах (прерывания распространения сигнала), где находятся станции нескольких альянсов. Они будут являться спорной территорией до тех пор, пока не останется только одна.
Цитата: Mr-Snake
Не значащие цифры я вообще опустил, вот с ними.
Просил источники банков, но ладно, предположим что тоже 1 и 1.
Подобный случай можно решить элементарно путем отрубания обеих сетей в системах (прерывания распространения сигнала), где находятся станции нескольких альянсов. Они будут являться спорной территорией до тех пор, пока не останется только одна.
20 Марта 2018 09:56:36
Источники банков "X" так же как и на других рисунках
20 Марта 2018 09:57:22
Цитата: Mr-Snake
Источники банков "X" так же как и на других рисунках
Банк без аллки/кпп/планика не дает сеть. Я про уровни в тех системах.
20 Марта 2018 09:58:34
20 Марта 2018 10:00:25
Цитата: Ulrezaj
Подобный случай можно решить элементарно путем отрубания обеих сетей в системах (прерывания распространения сигнала), где находятся станции нескольких альянсов.
боюсь что пол карты придётся вырубить, приведён же пример лишь двойного перекрывания в вакууме, а представьте что там 4 альянса друг друга перекрывают в зависимости от порядка чью сеть первой считать20 Марта 2018 10:04:04
«
· Дискуссионный ТОП-клуб ·
»
Информация
Вы не авторизованы
1 чел. читают эту тему (гостей: 1)
Пользователей: 0 Claude Bot