ИИ считать не умеет
-
Темный Лорд
- Сообщения: 3526
- Зарегистрирован: 15 дек 2014, 09:40
- Имя героя: Темный Лорд
ИИ считать не умеет
Повышение контактного урона:
Цена: 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
впечатление что прогнозируемая "Цена" учитывает формулу с округлением вверх, а последующий фактический подсчет который отображает "сумма" идет по формуле с округлением вниз, отсюда несоответствие
неважно куда, вверх или вниз, сделать бы одинаковые формулы для вычисления цены и суммы
Цена: 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
впечатление что прогнозируемая "Цена" учитывает формулу с округлением вверх, а последующий фактический подсчет который отображает "сумма" идет по формуле с округлением вниз, отсюда несоответствие
неважно куда, вверх или вниз, сделать бы одинаковые формулы для вычисления цены и суммы
Re: ИИ считать не умеет
Это потому, что на самом деле там цены:
5
6.25
7.8125
9.765625
12.20703125
15.258789625
Ибо конкретный элемент геометрической прогрессии вычисляется по стандартной формуле:
basePrice * Math.pow(coefficient, points)
А сумма ряда элементов геометрической прогрессии вычисляется по другой стандартной формуле:
(basePrice * (Math.pow(coefficient, points) - 1)) / (coefficient - 1)
В каждом случае значение округляется вверх, поэтому сумма по формуле может быть меньше суммы ранее округлённых элементов.
Чуть подробней, пожалуйста про ситуацию
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: ИИ считать не умеет
первая формула высчитывает и получает цифру 10
вторая формула высчитывает и получает цифру 9
раз обе формулы округляют вверх, тогда они разные цифры выходит считают
что высчитывает первая формула, она говорит игроку сколько надо потратить очков
что высчитывает вторая формула, она тратит эти очки
первая говорит надо потратить 10
вторая говорит пошла ты нафик, я потрачу 9
но если у игрока нету 10 очков, его не допустят ко второй формуле
возьмите ровно 29 очков и пробуйте взять на них 4 контактного урона, но не сразу все 4, а по одному, взяли 1, нажали галочку, взяли 2, нажали галочку, взяли 3, нажали галочку, 4 взять не получится
причина в этом:
Цена: 10, сумма: 20
Цена: 13, сумма: 29
после того как возьмете 3 пункта контакт, останется 9 свободных очков, а цена требует 10
вторая формула высчитывает и получает цифру 9
раз обе формулы округляют вверх, тогда они разные цифры выходит считают
что высчитывает первая формула, она говорит игроку сколько надо потратить очков
что высчитывает вторая формула, она тратит эти очки
первая говорит надо потратить 10
вторая говорит пошла ты нафик, я потрачу 9
но если у игрока нету 10 очков, его не допустят ко второй формуле
возьмите ровно 29 очков и пробуйте взять на них 4 контактного урона, но не сразу все 4, а по одному, взяли 1, нажали галочку, взяли 2, нажали галочку, взяли 3, нажали галочку, 4 взять не получится
причина в этом:
Цена: 10, сумма: 20
Цена: 13, сумма: 29
после того как возьмете 3 пункта контакт, останется 9 свободных очков, а цена требует 10
Re: ИИ считать не умеет
Догадываюсь за причины, проверю. Пока можно брать навыки "пачками".Темный Лорд писал(а): ↑31 авг 2026, 02:40возьмите ровно 29 очков и пробуйте взять на них 4 контактного урона, но не сразу все 4, а по одному, взяли 1, нажали галочку, взяли 2, нажали галочку, взяли 3, нажали галочку, 4 взять не получится
Так же замечу, что сейчас покупка умения "пачкой" позволяет получить значение бОольшее, чем реально положено.
Делитесь и перемножайтесь
Re: ИИ считать не умеет
Собственно, подозрения подтвердились: всё это время у нас очки Умений (из-за использования стандартных формул для геометрической прогрессии вместо честного суммирования) расходовались в количестве меньшем, чем положено. Например, для Контактного урона вместо цен:
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
Аналогично и в случае найма юнитов, но там погрешность кардинально меньше - единицы очков Харизматичности.
Теперь есть два варианта: а) не очень правильный - оставить всё как есть и б) правильный, но печальный - сделать всё как должно быть.
Я - за второй.
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: ИИ считать не умеет
"должно"?)
мы же можем сделать как заходим, как оно сейчас разве слишком сильно выглядит?
Замечательно что нашлась неточность которую не искали, но как на счет вопроса по теме, неудобство при наборе очков пропадет если прогрессия изменится или так же останется?
Неудобство ведь не только в том, чтобы набирать очки сразу все или по одному, главное неудобство когда ты снимаешь один пункт, а вернуть обратно не можешь без танцев с бубном.
ага, ровно на одну единицу больше и то не всегда
речь же тут не идет про суммарную выгоду за все пункты
-
Темный Лорд
- Сообщения: 3526
- Зарегистрирован: 15 дек 2014, 09:40
- Имя героя: Темный Лорд
Re: ИИ считать не умеет
тут я глупость сморозил, я имел в виду разница между "цена" и "сумма" иногда бывает одна единица, но это не экономит очки уменийТемный Лорд писал(а): ↑Вчера, 01:04ага, ровно на одну единицу больше и то не всегда
речь же тут не идет про суммарную выгоду за все пункты
а Док вообще про что-то другое видимо писал, может сравнивал с ценами которые задумывались, то как сейчас и как "должно быть"
Re: ИИ считать не умеет
Геометрическая прогрессия работает просто: берём текущий элемент - умножает его на коэффициент прогрессии - получаем элемент следующий.
Значение произвольного элемента можно получить двумя способами: 1. вычислить по стандартной формуле basePrice * Math.pow( coefficient, points ); 2. пошагово вычислять значения элементов, начиная с первого и до получения нужного.
Проблема в том, что при нецелом коэффициенте получаются дробные значения, которые у нас округляются вверх, что формула никак не учитывает.
Например, для стартовой цены в 5 и коэффициента в 1.25, пятый элемент при пошаговых вычислениях будет равен 15, а при использовании формулы он будет равен 12.20703125 = 13. И, чем бОльший номер элемента рассчитывается, тем больше это расхождение.
У нас сейчас используются, естественно, стандартные формулы. Как для получения значения произвольного элемента, так и для вычисления суммы ряда элементов, требуемой для получения максимумов. Отсюда и возникает "вопрос по теме", который неустраним в случае использования формул вместо пошагового вычисления элементов.
Если перейти на пошаговые вычисления, то вопрос автоматически снимается, но большие значения Умений станут дороже.
Значение произвольного элемента можно получить двумя способами: 1. вычислить по стандартной формуле basePrice * Math.pow( coefficient, points ); 2. пошагово вычислять значения элементов, начиная с первого и до получения нужного.
Проблема в том, что при нецелом коэффициенте получаются дробные значения, которые у нас округляются вверх, что формула никак не учитывает.
Например, для стартовой цены в 5 и коэффициента в 1.25, пятый элемент при пошаговых вычислениях будет равен 15, а при использовании формулы он будет равен 12.20703125 = 13. И, чем бОльший номер элемента рассчитывается, тем больше это расхождение.
У нас сейчас используются, естественно, стандартные формулы. Как для получения значения произвольного элемента, так и для вычисления суммы ряда элементов, требуемой для получения максимумов. Отсюда и возникает "вопрос по теме", который неустраним в случае использования формул вместо пошагового вычисления элементов.
Если перейти на пошаговые вычисления, то вопрос автоматически снимается, но большие значения Умений станут дороже.
Делитесь и перемножайтесь
-
Темный Лорд
- Сообщения: 3526
- Зарегистрирован: 15 дек 2014, 09:40
- Имя героя: Темный Лорд
Re: ИИ считать не умеет
То есть, Док, Вы хотите сказать, что нынешние наши "цены" и "суммы" появились лишь в следствии того, что формула оперировала не с целыми числами, а дробными, погрешность накапливалась и цифры итоговые уменьшались - пока понятно. Значит если мы убираем погрешность прогрессии из-за округления, то мы этим автоматически и цены поменяем на "правильные" более высокие - это тоже понятно.
Но чего я НЕ понимаю, так это какими такими гениальными формулами можно убрать эту погрешность округления.
Или Вы просто хотите отказаться от формул и задать "правильную" последовательность (5.7.9.12.15.19.24.30 итд) прописав ее списком, но ведь тогда списком можно прописать любые цифры, в том числе те, которые получаются из-за округления.
Но раз можно пошаговые вычисления производить, почему нынешние цены не оставить, просто другую формулу делать. Менять тогда надо будет только формулу "цены", формулу "суммы" оставить как есть. Формула "цены" будет представлять из себя разницу "суммы n+1" и "суммы n", но обе "суммы" надо будет сначала высчитать пошагово отдельно чтобы получить целые числа.
плохо разбираюсь в формулах, но вроде будет как-то так:
Цена: a*((kⁿ⁺¹-1)/(k-1)) - a*((kⁿ-1)/(k-1)) где a - цена первого пункта; k - коэффициент прогрессии; n - кол-во пунктов - тут нужны целые числа, но Вы же сами сказали сможете сделать пошагово...
Но чего я НЕ понимаю, так это какими такими гениальными формулами можно убрать эту погрешность округления.
Или Вы просто хотите отказаться от формул и задать "правильную" последовательность (5.7.9.12.15.19.24.30 итд) прописав ее списком, но ведь тогда списком можно прописать любые цифры, в том числе те, которые получаются из-за округления.
Это Ваш вариант? Вычисление "цены" и "суммы" будете производить пошагово? Высчитывая и округляя каждое число по отдельности и складывая полученные целые числа?
Но раз можно пошаговые вычисления производить, почему нынешние цены не оставить, просто другую формулу делать. Менять тогда надо будет только формулу "цены", формулу "суммы" оставить как есть. Формула "цены" будет представлять из себя разницу "суммы n+1" и "суммы n", но обе "суммы" надо будет сначала высчитать пошагово отдельно чтобы получить целые числа.
плохо разбираюсь в формулах, но вроде будет как-то так:
Цена: a*((kⁿ⁺¹-1)/(k-1)) - a*((kⁿ-1)/(k-1)) где a - цена первого пункта; k - коэффициент прогрессии; n - кол-во пунктов - тут нужны целые числа, но Вы же сами сказали сможете сделать пошагово...
-
Темный Лорд
- Сообщения: 3526
- Зарегистрирован: 15 дек 2014, 09:40
- Имя героя: Темный Лорд
Re: ИИ считать не умеет
округлять надо будет только полученное конечное число, а в процессе вычисления "суммы" никаких округлений проводить не надоТемный Лорд писал(а): ↑Сегодня, 00:45но обе "суммы" надо будет сначала высчитать пошагово отдельно чтобы получить целые числа.
a*((kⁿ⁺¹-1)/(k-1)) - считаем это без округлений и полученное в конце число округляем
a*((kⁿ-1)/(k-1)) - считаем это без округлений и полученное в конце число округляем
а потом из одного числа вычитаем другое и это и будет новой формулой "цены"
это решит только "вопрос по теме" не затрагивая вопроса "правильной" прогрессии