Группа 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
Ага, там по 15 станций бывают в одном месте и надо как то это все разруливать.
20 Марта 2018 10:04:57
Mr-Snake, уже ответил. Считать их просто спорной территорией, не принадлежащей никому, а следовательно не распространяющей сеть.
Предвосхищал вчера этот вопрос, думал никто не задаст, но я вчера специально посмотрел глобальную карту и нашел только одно пересечение трех альянсов в районе 19:73.
Боюсь что не придется, так как подобные пересечения, как в задачке бывают лишь на границах.
Цитата: Ulrezaj
Подобный случай можно решить элементарно путем отрубания обеих сетей в системах (прерывания распространения сигнала), где находятся станции нескольких альянсов. Они будут являться спорной территорией до тех пор, пока не останется только одна.
Цитата: VasyaMalevich
а представьте что там 4 альянса друг друга перекрывают в зависимости от порядка чью сеть первой считать
Предвосхищал вчера этот вопрос, думал никто не задаст, но я вчера специально посмотрел глобальную карту и нашел только одно пересечение трех альянсов в районе 19:73.
Цитата: VasyaMalevich
боюсь что пол карты придётся вырубить
Боюсь что не придется, так как подобные пересечения, как в задачке бывают лишь на границах.
20 Марта 2018 10:07:44
Поверьте там много больше всяких непонятных случаев, а случись один - сами же начнете писать администрации почему так закрасилось а не иначе :)
20 Марта 2018 10:09:55
Mr-Snake, хорошо, вам удалось пока что только посеять сомнения, но еще я не согласился с вами и не отказался от своей идеи. Требуется время на размышления.
20 Марта 2018 10:15:17
Цитата: Ulrezaj
Боюсь что не придется, так как подобные пересечения, как в задачке бывают лишь на границах.
Мы проведём эксперимент с отрубанием всех спорных территорий через несколько минут на рабочем сервере. Спасибо за идею.20 Марта 2018 11:09:19
Эксперимент показал что старый алгоритм можно попытаться доработать и вообще ничего не резать и не менять. Будем дорабатывать и смотреть. Вероятнее всего мы доделаем старый алгоритм и оставим все значения как есть. Спорные участки как и написал РБ будем просто вырубать.
21 Марта 2018 09:20:42
«
· Дискуссионный ТОП-клуб ·
»
Информация
Вы не авторизованы
1 чел. читают эту тему (гостей: 1)
Пользователей: 0 Claude Bot