ИИ считать не умеет

Ищем, что поломалось, и чиним
Ответить
Темный Лорд
Сообщения: 3526
Зарегистрирован: 15 дек 2014, 09:40
Имя героя: Темный Лорд

ИИ считать не умеет

Сообщение Темный Лорд » 30 авг 2026, 20:51

Повышение контактного урона:

Цена: 5, сумма: 0
Цена: 7, сумма: 5 \ 0+5=5 True
Цена: 8, сумма: 12 \ 5+7=12 True
Цена: 10, сумма: 20 \ 12+8=20 True
Цена: 13, сумма: 29 \ 20+10=29 False
Цена: 16, сумма: 42 \ 29+13=42 True
Цена: 20, сумма: 57 \ 42+16=57 False
Цена: 24, сумма: 76 \ 57+20=76 False


впечатление что прогнозируемая "Цена" учитывает формулу с округлением вверх, а последующий фактический подсчет который отображает "сумма" идет по формуле с округлением вниз, отсюда несоответствие

неважно куда, вверх или вниз, сделать бы одинаковые формулы для вычисления цены и суммы

Аватара пользователя
phdoc
Администратор
Сообщения: 29269
Зарегистрирован: 29 май 2010, 16:43

Re: ИИ считать не умеет

Сообщение phdoc » 30 авг 2026, 23:33

Это потому, что на самом деле там цены:
5
6.25
7.8125
9.765625
12.20703125
15.258789625

Ибо конкретный элемент геометрической прогрессии вычисляется по стандартной формуле:
basePrice * Math.pow(coefficient, points)
А сумма ряда элементов геометрической прогрессии вычисляется по другой стандартной формуле:
(basePrice * (Math.pow(coefficient, points) - 1)) / (coefficient - 1)

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

Чуть подробней, пожалуйста про ситуацию
Темный Лорд писал(а):
30 авг 2026, 19:52
если снять один пункт, обратно его уже вернуть не получается, пишут недостаточно очков, хотя только что очков было достаточно
Делитесь и перемножайтесь

Темный Лорд
Сообщения: 3526
Зарегистрирован: 15 дек 2014, 09:40
Имя героя: Темный Лорд

Re: ИИ считать не умеет

Сообщение Темный Лорд » 31 авг 2026, 02:40

первая формула высчитывает и получает цифру 10
вторая формула высчитывает и получает цифру 9
раз обе формулы округляют вверх, тогда они разные цифры выходит считают

что высчитывает первая формула, она говорит игроку сколько надо потратить очков
что высчитывает вторая формула, она тратит эти очки
первая говорит надо потратить 10
вторая говорит пошла ты нафик, я потрачу 9
но если у игрока нету 10 очков, его не допустят ко второй формуле




возьмите ровно 29 очков и пробуйте взять на них 4 контактного урона, но не сразу все 4, а по одному, взяли 1, нажали галочку, взяли 2, нажали галочку, взяли 3, нажали галочку, 4 взять не получится

причина в этом:
Цена: 10, сумма: 20
Цена: 13, сумма: 29
после того как возьмете 3 пункта контакт, останется 9 свободных очков, а цена требует 10

Аватара пользователя
phdoc
Администратор
Сообщения: 29269
Зарегистрирован: 29 май 2010, 16:43

Re: ИИ считать не умеет

Сообщение phdoc » 31 авг 2026, 17:01

Темный Лорд писал(а):
31 авг 2026, 02:40
возьмите ровно 29 очков и пробуйте взять на них 4 контактного урона, но не сразу все 4, а по одному, взяли 1, нажали галочку, взяли 2, нажали галочку, взяли 3, нажали галочку, 4 взять не получится
Догадываюсь за причины, проверю. Пока можно брать навыки "пачками".


Так же замечу, что сейчас покупка умения "пачкой" позволяет получить значение бОольшее, чем реально положено.
Делитесь и перемножайтесь

Аватара пользователя
phdoc
Администратор
Сообщения: 29269
Зарегистрирован: 29 май 2010, 16:43

Re: ИИ считать не умеет

Сообщение phdoc » 01 сен 2026, 17:56

Собственно, подозрения подтвердились: всё это время у нас очки Умений (из-за использования стандартных формул для геометрической прогрессии вместо честного суммирования) расходовались в количестве меньшем, чем положено. Например, для Контактного урона вместо цен:
1. Цена: 5
2. Цена: 7
3. Цена: 8
4. Цена: 10
5. Цена: 13
6. Цена: 16
7. Цена: 20
8. Цена: 24
должно было быть:
1. 5
2. 7
3. 9
4. 12
5. 15
6. 19
7. 24
8. 30

Аналогично и в случае найма юнитов, но там погрешность кардинально меньше - единицы очков Харизматичности.

Теперь есть два варианта: а) не очень правильный - оставить всё как есть и б) правильный, но печальный - сделать всё как должно быть.
Я - за второй.
Делитесь и перемножайтесь

Темный Лорд
Сообщения: 3526
Зарегистрирован: 15 дек 2014, 09:40
Имя героя: Темный Лорд

Re: ИИ считать не умеет

Сообщение Темный Лорд » Вчера, 01:04

phdoc писал(а):
01 сен 2026, 17:56
должно было быть:
1. 5
2. 7
3. 9
4. 12
5. 15
6. 19
7. 24
8. 30
...
Теперь есть два варианта: а) не очень правильный - оставить всё как есть и б) правильный, но печальный - сделать всё как должно быть.
Я - за второй.
"должно"?)
мы же можем сделать как заходим, как оно сейчас разве слишком сильно выглядит?



Замечательно что нашлась неточность которую не искали, но как на счет вопроса по теме, неудобство при наборе очков пропадет если прогрессия изменится или так же останется?
Неудобство ведь не только в том, чтобы набирать очки сразу все или по одному, главное неудобство когда ты снимаешь один пункт, а вернуть обратно не можешь без танцев с бубном.
phdoc писал(а):
31 авг 2026, 17:01
Так же замечу, что сейчас покупка умения "пачкой" позволяет получить значение бОольшее, чем реально положено.
ага, ровно на одну единицу больше и то не всегда
речь же тут не идет про суммарную выгоду за все пункты

Темный Лорд
Сообщения: 3526
Зарегистрирован: 15 дек 2014, 09:40
Имя героя: Темный Лорд

Re: ИИ считать не умеет

Сообщение Темный Лорд » Вчера, 04:00

Темный Лорд писал(а):
Вчера, 01:04
phdoc писал(а):
31 авг 2026, 17:01
Так же замечу, что сейчас покупка умения "пачкой" позволяет получить значение бОольшее, чем реально положено.
ага, ровно на одну единицу больше и то не всегда
речь же тут не идет про суммарную выгоду за все пункты
тут я глупость сморозил, я имел в виду разница между "цена" и "сумма" иногда бывает одна единица, но это не экономит очки умений
а Док вообще про что-то другое видимо писал, может сравнивал с ценами которые задумывались, то как сейчас и как "должно быть"

Аватара пользователя
phdoc
Администратор
Сообщения: 29269
Зарегистрирован: 29 май 2010, 16:43

Re: ИИ считать не умеет

Сообщение phdoc » Вчера, 16:38

Геометрическая прогрессия работает просто: берём текущий элемент - умножает его на коэффициент прогрессии - получаем элемент следующий.
Значение произвольного элемента можно получить двумя способами: 1. вычислить по стандартной формуле basePrice * Math.pow( coefficient, points ); 2. пошагово вычислять значения элементов, начиная с первого и до получения нужного.
Проблема в том, что при нецелом коэффициенте получаются дробные значения, которые у нас округляются вверх, что формула никак не учитывает.
Например, для стартовой цены в 5 и коэффициента в 1.25, пятый элемент при пошаговых вычислениях будет равен 15, а при использовании формулы он будет равен 12.20703125 = 13. И, чем бОльший номер элемента рассчитывается, тем больше это расхождение.

У нас сейчас используются, естественно, стандартные формулы. Как для получения значения произвольного элемента, так и для вычисления суммы ряда элементов, требуемой для получения максимумов. Отсюда и возникает "вопрос по теме", который неустраним в случае использования формул вместо пошагового вычисления элементов.
Если перейти на пошаговые вычисления, то вопрос автоматически снимается, но большие значения Умений станут дороже.
Делитесь и перемножайтесь

Темный Лорд
Сообщения: 3526
Зарегистрирован: 15 дек 2014, 09:40
Имя героя: Темный Лорд

Re: ИИ считать не умеет

Сообщение Темный Лорд » Сегодня, 00:45

То есть, Док, Вы хотите сказать, что нынешние наши "цены" и "суммы" появились лишь в следствии того, что формула оперировала не с целыми числами, а дробными, погрешность накапливалась и цифры итоговые уменьшались - пока понятно. Значит если мы убираем погрешность прогрессии из-за округления, то мы этим автоматически и цены поменяем на "правильные" более высокие - это тоже понятно.

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

phdoc писал(а):
Вчера, 16:38
Если перейти на пошаговые вычисления, то вопрос автоматически снимается, но большие значения Умений станут дороже.
Это Ваш вариант? Вычисление "цены" и "суммы" будете производить пошагово? Высчитывая и округляя каждое число по отдельности и складывая полученные целые числа?

Но раз можно пошаговые вычисления производить, почему нынешние цены не оставить, просто другую формулу делать. Менять тогда надо будет только формулу "цены", формулу "суммы" оставить как есть. Формула "цены" будет представлять из себя разницу "суммы n+1" и "суммы n", но обе "суммы" надо будет сначала высчитать пошагово отдельно чтобы получить целые числа.

плохо разбираюсь в формулах, но вроде будет как-то так:
Цена: a*((kⁿ⁺¹-1)/(k-1)) - a*((kⁿ-1)/(k-1)) где a - цена первого пункта; k - коэффициент прогрессии; n - кол-во пунктов - тут нужны целые числа, но Вы же сами сказали сможете сделать пошагово...

Темный Лорд
Сообщения: 3526
Зарегистрирован: 15 дек 2014, 09:40
Имя героя: Темный Лорд

Re: ИИ считать не умеет

Сообщение Темный Лорд » Сегодня, 01:13

Темный Лорд писал(а):
Сегодня, 00:45
но обе "суммы" надо будет сначала высчитать пошагово отдельно чтобы получить целые числа.
округлять надо будет только полученное конечное число, а в процессе вычисления "суммы" никаких округлений проводить не надо

a*((kⁿ⁺¹-1)/(k-1)) - считаем это без округлений и полученное в конце число округляем
a*((kⁿ-1)/(k-1)) - считаем это без округлений и полученное в конце число округляем
а потом из одного числа вычитаем другое и это и будет новой формулой "цены"
это решит только "вопрос по теме" не затрагивая вопроса "правильной" прогрессии

Ответить