IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Определение охраны проходов, наиболее точное
Sadness
сообщение 20 Aug 2012, 08:37 (Сообщение отредактировал Vaflya - 20 Aug 2012, 08:38)
Сообщение #1

Legendary lover
Сообщений: 628
Спасибо сказали: 307 раз




Нашёл давнишнюю тему Wic-а
http://www.cyberfight.ru/site/columns/56/article_56014/

Читать следует со второго пункта второй части "Проходы между зонами".
Согласно статейке и физмигу, охрана проходов считается как Х = (Value прохода/value существа * k), k - неопределённый коэффициент; охрана же объектов в зонах так же имеет собственную формулу. На счёт последнего - не знаю, правда, но на счёт первого - через реверсинг каким-либо образом можно точно определить зависимость k от value прохода?

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


--------------------
...and the music change my life
Go to the top of the pageAdd Nick
 
+Quote Post
Sav
сообщение 18 Oct 2012, 18:01 (Сообщение отредактировал Sav - 16 Nov 2012, 21:26)
Сообщение #2

Immortal
Сообщений: 9 403
Спасибо сказали: 3770 раз




Охрана объектов рассчитывается так (для удобства чтения опускаю некоторые подробности связанные с реализацией алгоритма непосредственно в коде игры):
Вычисляется индекс_силы_охраны = сила_монстров_зоны + настроенная_сила_монстров.
сила_монстров_зоны - настраивается в шаблоне: weak = -1, avg = 0, strong = 1 (none - монстров в зоне в принципе нет).
настроенная_сила_монстров - выбирается перед генерацией карты: слабые = 2, средние = 3, сильные = 4.

Таким образом, индекс_силы_охраны может варьироваться в диапазоне 1 - 5, при этом для дальнейших расчётов не важно, из каких именно слагаемых он сложен.

Монстр всегда генерируется по суммарному AI Value. Т. е. вычисляется это значение, а то, какие будут монстры и сколько их - уже рандом, главное, чтобы в сумме их AI Value было близко к этому числу (ограничения я уже писал).

Суммарное AI Value охраны объекта складывается из 2 частей: суммарное_AI_Value = (ценность_объекта - минимальная_ценность_1)*коэффициент_1 + (ценность_объекта - минимальная_ценность_2)*коэффициент_2.

Ценность объекта (или группы объектов) - это, собственно, обычная ценность, исходя из которой они ставятся на карту, например, у улья: 9000, у утопии: 10000, у тюрьмы 30 уровня: 30000.
минимальная_ценность_1, коэффициент_1, минимальная_ценность_2, коэффициент_2 - определяются исходя из значения индекс_силы_охраны:

индекс_силы_охраны: минимальная_ценность_1
1: 2500
2: 1500
3: 1000
4: 500
5: 0

индекс_силы_охраны: коэффициент_1
1: 0.5
2: 0.75
3: 1
4: 1.5
5: 1.5

индекс_силы_охраны: минимальная_ценность_2
1: 7500
2: 7500
3: 7500
4: 5000
5: 5000

индекс_силы_охраны: коэффициент_2
1: 0.5
2: 0.75
3: 1
4: 1
5: 1.5

Если какая-то минимальная_ценность больше, чем ценность_объекта, то её слагаемое выкидывается из суммы.

Если в итоге ценность окажется < 2000, монстр вообще не будет ставиться.


Для охраны проходов всё то же самое, только вместо значения ценность_объекта берётся ценность охраны, прописанная в шаблоне, а в качестве значения индекс_силы_охраны берётся просто настроенная_сила_монстров. При этом это сила монстров каждой охраны, т. е. охрана каждой стороны монолита будет такой, каждый охранник из охраняющих проход будет таким, вне зависимости от их количества. Т. е. сила охраны не распределяется, если охранников больше одного, а для монолитов и подземных врат охрана фактически удваивается.

Пример 1.
Настроенная сила монстров - сильная, сила монстров в зоне - strong. Генерируется улей змиев (ценность 9000).
индекс_силы_охраны = 1 + 4 = 5.
9000 > 0, 9000 > 5000.
Суммарное AI Value = (9000 - 0)*1.5 + (9000 - 5000)*1.5 = 19500 > 2000.
19500 - это, например, 26 фанатиков (AI Value каждого равно 750).

Пример 2.
Настроенная сила монстров - слабая, сила монстров в зоне - weak. Генерируется улей змиев (ценность 9000).
индекс_силы_охраны = -1 + 2 = 1.
9000 > 2500, 9000 > 7500.
Суммарное AI Value = (9000 - 2500)*0.5 + (9000 - 7500)*0.5 = 4000 > 2000.
4000 - это, например, 26 гарпий (AI Value каждой равно 154).

Пример 3.
Настроенная сила монстров - средняя, сила монстров в зоне - avg. Генерируется золотая шахта (ценность 7000).
индекс_силы_охраны = 0 + 3 = 3.
7000 > 1000, 7000 < 7500.
Суммарное AI Value = (7000 - 1000)*1 = 6000 > 2000.
6000 - это, например, 24 стража (AI Value каждого равно 252).

Пример 4.
Настроенная сила монстров - слабая, сила монстров в зоне - weak. Генерируется свиток с заклинанием 5 уровня (ценность 5000).
индекс_силы_охраны = -1 + 2 = 1.
5000 > 2500, 5000 < 7500.
Суммарное AI Value = (5000 - 2500)*0.5 = 1250 < 2000.
Охрана не генерируется.

Пример 5.
Настроенная сила монстров - сильная. Генерируется охрана прохода ценностью 6000.
индекс_силы_охраны = 4.
6000 > 500, 6000 > 5000.
Суммарное AI Value = (6000 - 500)*1.5 + (6000 - 5000)*1 = 9250 > 2000.
9250 - это, например, 56 каменных горгулий (AI Value каждой равно 165).
Go to the top of the pageAdd Nick
 
+Quote Post
Sav
сообщение 18 Oct 2012, 23:08 (Сообщение отредактировал Sav - 18 Oct 2012, 23:10)
Сообщение #3

Immortal
Сообщений: 9 403
Спасибо сказали: 3770 раз




Ну и до кучи сюда, хоть и не по теме, по поводу групп объектов.

Для некоторой "точки" зоны - места, где стоит ценный объект или группа объектов (координаты изначально неопределены), генератор выбирает случайное число общая_ценность между минимальной и максимальной ценностью сокровища зоны (которые указываются в шаблоне, каждая "точка" принадлежит одному из 3 или менее настроенных в шаблоне сокровищ зоны).
Потом генератор генерирует случайный объект ценностью от общая_ценность/4 до общая_ценность. Его ценность записывается в переменную использованная_ценность. Далее проверяется: если общая_ценность - использованная_ценность >= 1500 или использованная_ценность < общая_ценность/2, то генерируется следующий объект ценностью от 0.25*(общая_ценность - использованная_ценность) до 1.25*(общая_ценность - использованная_ценность). Его ценность прибавляется к использованная_ценность. Снова проверяется то же условие, генерируется ещё один объект и т. д., пока условие не перестанет выполняться или объект в заданном диапазоне ценностей и с учётом прочих ограничений сгенерировать не станет невозможно. Потом этой группе объектов ставится одна охрана, исходя из их суммарной ценности.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Sadness
сообщение 25 Oct 2012, 12:59
Сообщение #4

Legendary lover
Сообщений: 628
Спасибо сказали: 307 раз




Цитата(Sav @ 19 Oct 2012, 00:08) *
Ну и до кучи сюда, хоть и не по теме, по поводу групп объектов.

Для некоторой "точки" зоны - места, где стоит ценный объект или группа объектов (координаты изначально неопределены), генератор выбирает случайное число общая_ценность между минимальной и максимальной ценностью сокровища зоны (которые указываются в шаблоне, каждая "точка" принадлежит одному из 3 или менее настроенных в шаблоне сокровищ зоны).
Потом генератор генерирует случайный объект ценностью от общая_ценность/4 до общая_ценность. Его ценность записывается в переменную использованная_ценность. Далее проверяется: если общая_ценность - использованная_ценность >= 1500 или использованная_ценность < общая_ценность/2, то генерируется следующий объект ценностью от 0.25*(общая_ценность - использованная_ценность) до 1.25*(общая_ценность - использованная_ценность). Его ценность прибавляется к использованная_ценность. Снова проверяется то же условие, генерируется ещё один объект и т. д., пока условие не перестанет выполняться или объект в заданном диапазоне ценностей и с учётом прочих ограничений сгенерировать не станет невозможно. Потом этой группе объектов ставится одна охрана, исходя из их суммарной ценности.

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


--------------------
...and the music change my life
Go to the top of the pageAdd Nick
 
+Quote Post
Sav
сообщение 25 Oct 2012, 13:06
Сообщение #5

Immortal
Сообщений: 9 403
Спасибо сказали: 3770 раз




А он не генерирует группы что ли?
Go to the top of the pageAdd Nick
 
+Quote Post
Sadness
сообщение 25 Oct 2012, 17:58
Сообщение #6

Legendary lover
Сообщений: 628
Спасибо сказали: 307 раз




Цитата(Sav @ 25 Oct 2012, 14:06) *
А он не генерирует группы что ли?

Он так генерирует, что дай боже не прослезиться.

Многие любители двушки не могут нормально играть по онлайну, потому что приходится рубиться в фиксы. :-(


--------------------
...and the music change my life
Go to the top of the pageAdd Nick
 
+Quote Post
Sadness
сообщение 04 Nov 2012, 09:01
Сообщение #7

Legendary lover
Сообщений: 628
Спасибо сказали: 307 раз




По результатам тестов на strong + strong у меня получилась погрешность +-5. Особенно это касается проходов: по формуле посчитано не более 19 гидр хаоса (45000), на деле их было 20-21, обычных уток было на 4 больше и на 2 меньше при разных генерациях. А вот при подсчёте value охраны объектов статистика более точная, +-2 и не более того, причём, чем слабее юнит, тем меньше погрешность. Sav, уточни, пожалуйста, есть ли какой-либо рандомизатор этих значений или же это закономерность, которая была не учтена?




--------------------
...and the music change my life
Go to the top of the pageAdd Nick
 
+Quote Post
Sav
сообщение 04 Nov 2012, 10:31
Сообщение #8

Immortal
Сообщений: 9 403
Спасибо сказали: 3770 раз




Ты учитываешь этот пост? http://forum.df2.ru/index.php?s=&showt...st&p=560072
На strong индекс силы охраны для прохода равен 4, 45000 превратится в 1.5*44500 + 40000 = 106750.
Гидр хаоса (5931) вроде как в среднем 18 (т. к. округление вверх), 25% - это 4 (тут округление всегда вниз), т. е. реально 14-22 существ.
Виверн (1350) в среднем 79 (округление вниз), 25% - это 19, реально значит 60-98 виверн.
Go to the top of the pageAdd Nick
 
+Quote Post
Sadness
сообщение 04 Nov 2012, 19:25 (Сообщение отредактировал Vaflya - 04 Nov 2012, 19:27)
Сообщение #9

Legendary lover
Сообщений: 628
Спасибо сказали: 307 раз




Цитата(Sav @ 04 Nov 2012, 11:31) *
Ты учитываешь этот пост? http://forum.df2.ru/index.php?s=&showt...st&p=560072
На strong индекс силы охраны для прохода равен 4, 45000 превратится в 1.5*44500 + 40000 = 106750.
Гидр хаоса (5931) вроде как в среднем 18 (т. к. округление вверх), 25% - это 4 (тут округление всегда вниз), т. е. реально 14-22 существ.
Виверн (1350) в среднем 79 (округление вниз), 25% - это 19, реально значит 60-98 виверн.



Виноват, не учитываю.


А что на счёт CrTraits.txt? А точнее, параметр Adv. Map. В TE, путём уменьшение и увеличения этого параметра достигался баланс по генерации охран (во всяком случае так было написано в мануале). Каким образом он влияет? Возможно это и есть тот самый рандом?

P.S. кажется, что там не 25%, а какая-то своя закономерность. Хотелось бы определить, что есть среднее в данном случае, чтобы до конца разобраться и получить результат. :-)




--------------------
...and the music change my life
Go to the top of the pageAdd Nick
 
+Quote Post
Sav
сообщение 04 Nov 2012, 19:38 (Сообщение отредактировал Sav - 04 Nov 2012, 19:39)
Сообщение #10

Immortal
Сообщений: 9 403
Спасибо сказали: 3770 раз




Я писал тут: http://forum.df2.ru/index.php?s=&showt...st&p=546608

Изменение этих параметров может изменить только минимальную необходимую ценность охраны для появления существ. Т. е. если сделать у гидры adv.low = 16, а adv.high = 22 (в среднем 19 - учитывается только среднее количество), то их суммарное AI Value будет 112689 и т. к. оно больше 106750, они никогда не будут генерироваться на проходе 45000 (ну а тем более на меньшем). Среднее между adv.low и adw.high - это минимальное количество существ этого типа, которое может появиться на карте, если считать без учёта случайных 25%.
Кроме того, количество существ, появляющихся на новой неделе, находится в диапазоне 2*adv.low - 2*adv.high и всегда чётно.
Так же это, вероятно, влияет на монстров со случайным количеством на фиксированных картах.
Вроде всё, больше ни на что он не влияет. При генерации уж точно.

Цитата(Vaflya)
P.S. кажется, что там не 25%, а какая-то своя закономерность. Хотелось бы определить, что есть среднее в данном случае, чтобы до конца разобраться и получить результат. :-)

Ну, у меня в том посте всё написано:

Если (среднее кол-во) < 4, то (кол-во охранников) = (среднее кол-во).
Иначе (кол-во охранников) = (среднее кол-во) + (случайное число 1) - (случайное число 1)
случайное число - в диапазоне от 0 до (среднее кол-во)/4, оба числа генерируются по одинаковым правилам, но отдельно, таким образом, реальная охрана может быть от 75% до 125% от средней.

В силу генерации 2 случайных чисел, чем ближе количество охранников к среднему, тем больше вероятность его выпадения. Можно показать, как это вычисляется это математически, но это пока не имеет особого смысла.
Go to the top of the pageAdd Nick
 
+Quote Post
Sadness
сообщение 04 Nov 2012, 19:38
Сообщение #11

Legendary lover
Сообщений: 628
Спасибо сказали: 307 раз




Цитата(Sav @ 04 Nov 2012, 20:35) *
Я писал тут: http://forum.df2.ru/index.php?s=&showt...st&p=546608

Изменение этих параметров может изменить только минимальную необходимую ценность охраны для появления существ. Т. е. если сделать у гидры adv.low = 16, а adv.high = 22 (в среднем 19 - учитывается только среднее количество), то их суммарное AI Value будет 112689 и т. к. оно больше 106750, они никогда не будут генерироваться на проходе 45000 (ну а тем более на меньшем). Среднее между adv.low и adw.high - это минимальное количество существ этого типа, которое может появиться на карте, если считать без учёта случайных 25%.
Кроме того, количество существ, появляющихся на новой неделе, находится в диапазоне 2*adv.low - 2*adv.high и всегда чётно.
Так же это, вероятно, влияет на монстров со случайным количеством на фиксированных картах.
Вроде всё, больше ни на что он не влияет. При генерации уж точно.


А теперь внимание, главный вопрос: как это заалгоритмизировать, чтобы получить определённый интервал? А то я слегка не догнал :-)





В общем-то, я уже начал писать программку, почти доделал, но не учитывал рандома. Можешь либо сюда, либо в личку скинуть алгоритм после нахождения суммарного AI Value, что делать? А мы тебе спасибо скажем. :-)



--------------------
...and the music change my life
Go to the top of the pageAdd Nick
 
+Quote Post
Sav
сообщение 04 Nov 2012, 19:41
Сообщение #12

Immortal
Сообщений: 9 403
Спасибо сказали: 3770 раз




Значения adv.low и adv.high влияют только на выбор типа охраны, а не на количество.
Go to the top of the pageAdd Nick
 
+Quote Post
Sadness
сообщение 04 Nov 2012, 19:44
Сообщение #13

Legendary lover
Сообщений: 628
Спасибо сказали: 307 раз




Цитата(Sav @ 04 Nov 2012, 20:41) *
Значения adv.low и adv.high влияют только на выбор типа охраны, а не на количество.


Вот оно что. Т.е. при любом изменении этого параметра, будет просто меняться тип охраны, а не количество существ. Ну а к (суммарному AI Value/AI существа) мы применяем формулу, из поста выше. Правильно?




--------------------
...and the music change my life
Go to the top of the pageAdd Nick
 
+Quote Post
Sav
сообщение 04 Nov 2012, 19:47
Сообщение #14

Immortal
Сообщений: 9 403
Спасибо сказали: 3770 раз




Да. Причём надо довольно сильно менять эти adv, чтобы реально изменить типы существ. Чтобы серьёзно балансировать охрану, надо менять AI Value, но это портит ИИ.
Go to the top of the pageAdd Nick
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 25 April 2024 - 08:50
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика