PDA

Просмотр полной версии : Формулы для расчета коррупции в цив4



Obormot
11.07.2006, 19:44
Сегодня на работе просматривал статьи по цив4 на их-фанатиках, наткнулся вот на что:
http://forums.civfanatics.com/showpost.php...83&postcount=89 (http://forums.civfanatics.com/showpost.php?p=3932883&postcount=89)

Дистанционная коррупция:
DistanceMaint = (Pop + 7) * 2.5 * Distance/DistanceScale * Building_m * WorldSize_m * Handicap_m

Distance - расстояние к ближайшему дворцу, в стандартном фираксисовском смысле (шаг по диагонали считается как 1.5, округляем вниз).

Building_m = .5 if courthouse, 1 otherwise
Worldsize_m: Duel=.50, Tiny=.60, Small=.70, Standard=.80, Large=.90, Huge=1
Handicap_m: Settler=.45, Chieftain=.55, Warlord=.65, Noble=.75, Prince=.85, Monarch=.90, Emperor=.95, Immortal=1, Diety=1

DistanceScale = (MapHeight + MapWidth), причем MapHeight и MapWidth делим пополам если карта замыкается соответственно по высоте и/или ширине.

Ранговая коррупция:
CityMaint = N * (Pop + 17)/18 * WorldSize_m * Handicap_m + (1 for some cities, depending on cityrank)
CityMaint = min(CityMaint, CitiesHandicap) * Building_m, т.е. не может превышать 4-8 в зависимости от уровня

Worldsize_m: Duel=.45, Tiny=.40, Small=.35, Standard=.30, Large=.25, Huge=.20
Handicap_m: Settler=.40, Chieftain=.50, Warlord=.60, Noble=.70, Prince=.80, Monarch=.85, Emperor=.90, Immortal=.95, Diety=1
CitiesHandicap: Settler=4, Chieftain=4, Warlord=5, Noble=5, Prince=6, Monarch=6, Emperor=7, Immortal=7, Diety=8
Building_m = .5 if courthouse, 1 otherwise

В первой формуле 1 прибавляем если
(1 if CityRank/N * 100 > 100 - (N * NumCitiesPercent) % 100)
из-за операции взятия остатка (%) эта единица появляется рандомно в зависимости от ранга (считается как в цив3). Смысл в том чтобы не было резких скачков при прибавлении города.

Интересно что значение зависит от населения города (я это и раньше замечал), особенно сильно зависит дистанционная коррупция.

По всей видимости все вычисления целочисленные, округленя вниз, но точно это неизвестно, так что возможна ошибка +/- одна монета.

Мозговой рыбак
01.03.2007, 11:39
<div class='quotetop'>Цитата</div>
Worldsize_m: Duel=.50, Tiny=.60, Small=.70, Standard=.80, Large=.90, Huge=1[/b]
Эти коэффициенты в формуле применены неправильно. С увеличением размера карты содержание за удалённость от дворца НЕ МОЖЕТ УВЕЛИЧИВАТЬСЯ. Оно уменьшается -- это проверено мной экспериментально.
И это логично. Иначе на карте Huge было бы просто невозможно играть из-за огромных расстояний до дворца.

Да и вообще, что-то не похоже это на правду. Совсем. Сумма содержания, рассчитанного по первой формуле, получается в 3 раза большей, чем на практике.

NeverMind
01.03.2007, 12:09
Так оно и по формуле уменьшается. С размером карты растет знаменатель дроби, ее значение, соответственно, уменьшается. Все логично. :D

Мозговой рыбак
01.03.2007, 12:53
Какой дроби? Здесь только одна -- Distance/Distance Scale. Размер карты в ней не учитывается.

NeverMind
01.03.2007, 13:19
Да ну? А может ты просто невнимательно посмотрел описание формулы?

DistanceScale = (MapHeight + MapWidth) : 10x6 на дуэльной, 21x13 на стандартной...

Именно в этом как раз и учитывается размер карты, что и "проверено тобой экспериментально". А WorldSize_m в данном случае скорее для сглаживания получающихся различий.

Вот сама функция из SDK.

[code]int CvCity::calculateDistanceMaintenanceTimes100() const
{

Мозговой рыбак
01.03.2007, 14:27
Блин, я тупак. Сори! Я брал для расчёта не длину и ширину карты, а расстояние до города по горизонтали и по вертикали.
Спасибо, жизнь снова обрела смысл :).

Линник
01.03.2007, 17:32
<div class='quotetop'>Цитата(Мозговой рыбак * 1.3.2007, 13:27) 166693</div>

Блин, я тупак. Сори! Я брал для расчёта не длину и ширину карты, а расстояние до города по горизонтали и по вертикали.
Спасибо, жизнь снова обрела смысл :).
[/b]
:biglol: млин, надо Лиара сюда позвать, а то он терзает себя в гайд-парке...

qweqweqwer
01.03.2007, 23:09
<div class='quotetop'>Цитата(Obormot * 11.7.2006, 17:44) 109162</div>

Ранговая коррупция:
CityMaint = N * (Pop + 17)/18 * WorldSize_m * Handicap_m + (1 for some cities, depending on cityrank)
[/b]
Итак CityMaint = N * С
Получается при основании нового города для каждого города CityMaint += С (N штук)
и для нового города CityMaint = (N+1) * С
То есть затраты приблизительно увеличиваются на 2N.
Как Вы думаете, можно ли пользоваться этим предположением?

Мозговой рыбак
02.03.2007, 10:45
<div class='quotetop'>Цитата</div>
То есть затраты приблизительно увеличиваются на 2N.
Как Вы думаете, можно ли пользоваться этим предположением?[/b]
Это только про Number Of Cities Maintenance. А есть ещё Distance Based Maintenance, которое своё для каждого случая.

Lexad
05.04.2007, 00:27
<div class='quotetop'>Цитата</div>
DistanceScale = (MapHeight + MapWidth)[/b]
Вот эта часть неверна. На самом деле нужно максимально возможное расстояние между городами - для плоской это между углами - 1 (1 = длина клетки, на которой стоит столица; если карта квадратная, должно быть 1,5, по логике), для цилиндра по склеенному измерению берется половина размера карты, и т.д.

razer
09.04.2007, 17:42
<div class='quotetop'>Цитата(Obormot * 11.7.2006, 19:44) 109162</div>

Интересно что значение зависит от населения города (я это и раньше замечал), особенно сильно зависит дистанционная коррупция.
[/b]

При числе городов 28 и больше (для Emperor и карты Standart), суммарный маинтейнс (CityMain) равен:
7*N и не зависит от населения Pop.

При 15 городах и среднем населении 15+ также 7*N

При 20 городах и среднем населении 7+ на один город также имеем насыщение: 7*N

Получается, что суммарный маинтейнс растет квадратично с N (вначале) а потом достигает своего насыщения: 7*N.

Рентабелность города определяется 1 тауном без банков и рынков:) :secret:

Интересно было бы еще глянуть как считается CivicUpkeep



А при каких условиях вы начинаете строить суды?

Мозговой рыбак
23.04.2007, 15:53
А мне вот интересно, как кто-нибудь может жить без них. Я играю на Аристократе и не перехожу на следующий уровень именно потому, что с трудом выбираюсь из технологической ямы после третьего города. У меня просто кончаются деньги.
Без святых храмов моих религий, которые (кроме судов) меня только и спасают, наука колеблется на уровне 10-30%. Без судов и святых храмов -- совсем никак.
Обычно я беру Оракулом Свод законов, получаю вторую религию конфуцианство, срочно строю суды и Тай-Мяо (или чё там у них, у конфуциев :) ), распространяю конфуцианство и только потом получаю возможность продолжить экспансию.

Мозговой рыбак
25.04.2007, 15:03
<div class='quotetop'>Цитата(Lexad * 5.4.2007, 0:27) 173998</div>

<div class='quotetop'>Цитата
DistanceScale = (MapHeight + MapWidth)[/b]
Вот эта часть неверна. На самом деле нужно максимально возможное расстояние между городами - для плоской это между углами - 1 (1 = длина клетки, на которой стоит столица; если карта квадратная, должно быть 1,5, по логике), для цилиндра по склеенному измерению берется половина размера карты, и т.д.
[/b][/quote]
Lexad, а ты в игре или в билдере это проверял? Это действительно так? Что-то я сомневаюсь.
Я решил было написать типо обзор про содержание городов. Этакая компиляция всего известного по теме. Он у меня сейчас готов. Но формулы, которые я там привёл (формулы из заглавного поста этого топика) на карте Huge, уровне Noble НЕ работают.
Сумма содержания от удалённости от дворца, которая рассчитывается по приведённой формуле, примерно в 1,58 раз больше, чем на практике. Причём это число (1,58) практически не изменяется при увеличении расстояния до дворца. То есть с небольшой натяжкой можно сказать, что все суммы, рассчитанные по формуле, равны реальным, умноженным на 1,58.
Я предполагаю, что в формуле либо не хватает какого-то уменьшающего коэффициента, либо Distance Scale действительно считается как-то по-другому. Но не так, как пишет Lexad. Тогда цифра выходит ещё больше реальной.
Кроме того, на ихфанатиках некто Glundberg заявил в апреле прошлого года, что он работает над масштабным трудом по содержанию городов и привёл его начало. Не скажу, что я хоть что-то понял из этого начала, но совершенно точно, что он считает, что содержание в зависимости от расстояния до дворца зависит от количества зданий в городе.
http://forums.civfanatics.com/showpost.php...mp;postcount=93 (http://forums.civfanatics.com/showpost.php?p=3949805&postcount=93)
Обещанного им труда я не обнаружил (похоже на меня :) ).

Lexad
25.04.2007, 17:27
<div class='quotetop'>Цитата</div>
Lexad, а ты в игре или в билдере это проверял? Это действительно так? Что-то я сомневаюсь.[/b]
Именно потому, что в игре не совпадало, и проверил, и нашел верную зависимость.

<div class='quotetop'>Цитата</div>
он считает, что содержание в зависимости от расстояния до дворца зависит от количества зданий в городе[/b] - он неверно понял модификатор от зданий - он не равен 1 только при наличии дворца/ЗД/Версаля/суда/Икханды.

Lexad
25.04.2007, 18:02
<div class='quotetop'>Цитата</div>
Я решил было написать типо обзор про содержание городов. Этакая компиляция всего известного по теме. Он у меня сейчас готов[/b]
Если в заглавном посте исправить то, что я добавил, все уже и так есть; впрочем, можешь подробнее написать про здания и цивики, уменьшающие содержание.

Мозговой рыбак
26.04.2007, 12:39
Lexad, а на каком примере ты считал, не скажешь? Интересует размер карты. Ты расстояние (от угла до угла -1) считал сам по тайлам? Или взял за основу данные из файла?
Ни фига у меня не получается повторить расчёт так, чтобы сошлось.

Lexad
26.04.2007, 14:03
Считал на примере СГОМТ-4, ветка на civru.com. У меня все работает, если у тебя нет - выкладывай сэйв, будем смотреть.

Мозговой рыбак
26.04.2007, 14:45
Сэйв притараню завтра. Ужасно неудобно -- инет на работе, а цива дома. Клеймёный XP...
То есть, я понимаю, ты считал расстояние руками... Я брал за основу для DistanceScale данные из файла Civ4WorldInfo.xml. Причём то, что там указано как <iGridWidth> и <iGridHeight> -- на самом деле не размеры карты. Для карт Duel и Tiny эти цифры нужно умножить на 4 (Duel по файлу -- 10х6, Duel в игре -- 40х24). Я предположил то же самое и для карты Huge, для которой я считаю, но глядя на твою, Lexad, уверенность, чтой-то засомневался. Ещё раз проверю, посчитаю руками.

Lexad
26.04.2007, 17:12
<div class='quotetop'>Цитата</div>
То есть, я понимаю, ты считал расстояние руками... [/b]
Нет, добрые люди посчитали за меня, я воспользовался, но де факто "руками". На ихфанатиках есть темка Sirian-а, правда, забыл адрес.

OT4E
26.04.2007, 18:44
А зулусская иканда складывается с судом просто или как?

Lexad
26.04.2007, 19:08
<div class='quotetop'>Цитата</div>
А зулусская иканда складывается с судом просто или как?[/b]
Вроде, да (т.е. в сумме -70%), но зуб не дам - проверял содержание не для зулусов, а сейчас цивы под рукой нет.

akots
26.04.2007, 19:20
<div class='quotetop'>Цитата(OT4E * 26.4.2007, 9:44) 178243</div>

А зулусская иканда складывается с судом просто или как?
[/b]
Проценты от икханды (20%) вычитаются отдельно, даже при государственной собственности, когда нет содержания по расстоянию, а только по количеству городов. Суды же снижают содержание только по расстоянию, но не по количеству городов.

razer
26.04.2007, 19:55
<div class='quotetop'>Цитата(akots * 26.4.2007, 19:20) 178252</div>

Проценты от икханды (20%) вычитаются отдельно, даже при государственной собственности, когда нет содержания по расстоянию, а только по количеству городов. Суды же снижают содержание только по расстоянию, но не по количеству городов.
[/b]

Нет, што ты. Суды обе коррупции уменьшают (city и distance). И в 1ом посте Обормот это указал.

Lexad
27.04.2007, 10:10
<div class='quotetop'>Цитата</div>
Суды обе коррупции уменьшают [/b]
:yes:

Мозговой рыбак
02.05.2007, 12:44
Голова -- предмет тёмный и изучению не подлежит. Попытался воссоздать свои собственные расчёты, которые не сходились с Lexad&#39;ом, и ни фига у меня не вышло. :nerves:
Не могу найти, где я ошибся -- как об стенку. Сейв не выложу, потому как предмет спора от меня скрылся. :no:
Очень вероятно, что где-то ошибаюсь я сам.

Lexad
02.05.2007, 15:42
Давай, разбирайся; если что - обращайся, поможем.

роман8
14.06.2007, 21:29
А как узнать ранг города (не совсем понял, как Цив 3?).

Северянин
03.05.2008, 17:27
А параметр инфляции от расстояний и размера державы в циве не зависит? Здесь есть какие-то формулы? Недавно играл инками, раш с самого начала - инфляция росла как обычно, т.е. прилично-нормально, теперь скромный мирный Рим из девяти городов с очень большим перекрытием ( все очень тесно и компактно) - на дворе уже Ренессанс, конституция- инфляция росла очень медленно, не так быстро как раньше, и в данный момент составляет 6%. Темпы роста державы не влияют?

Blacksun
03.05.2008, 18:14
<div class='quotetop'>Цитата(Северянин * 3.5.2008, 17:35) 246890</div>

А параметр инфляции от расстояний и размера державы в циве не зависит? Здесь есть какие-то формулы? Недавно играл инками, раш с самого начала - инфляция росла как обычно, т.е. прилично-нормально, теперь скромный мирный Рим из девяти городов с очень большим перекрытием ( все очень тесно и компактно) - на дворе уже Ренессанс, конституция- инфляция росла очень медленно, не так быстро как раньше, и в данный момент составляет 6%. Темпы роста державы не влияют?
[/b]

Если у тебя будет город, далеко от твоих культурных границ, тогда и узнаешь, что такое инфляция (а если будет много городов...)

Lexad
03.05.2008, 19:13
Процент инфляции зависит только от времени. Величина инфляции = сумма расходов страны*прцент инфляции.