PDA

Просмотр полной версии : Когда AI разрушает города?



Nosferatu
07.10.2007, 14:57
Хоть уже и не совсем новичок,но всё-же,а какой логикой руководствуется ии,когда разрушает города и вообще,какой в этом смысл?Читал тута где-то статью,о скрытых мотивах лидеров,дык выходит,что информация не правдоподобна,поскольку видел и как Хубилай разрушает города и Хатшепсут,(даже два порушила)не говоря уш о Людовике 14-том.Версия игры 1.61,оригинал.

Lexad
07.10.2007, 16:12
<div class='quotetop'>Цитата</div>
какой логикой руководствуется ии,когда разрушает города [/b]
Должны быть меньше 5 человек и без чуд. Кроме того, если менее 4 городов, оставит себе.

Линник
07.10.2007, 18:56
<div class='quotetop'>Цитата(Lexad * 7.10.2007, 15:12) 206956</div>

<div class='quotetop'>Цитата
какой логикой руководствуется ии,когда разрушает города [/b]
Должны быть меньше 5 человек и без чуд. Кроме того, если менее 4 городов, оставит себе.
[/b][/quote]
:nono: И более 5 рушит. Видел и 12 и 15... Если рядом мощный культ.центр и дальнейшая война нецелесообразна или не возможна (противник может отбить город).

NeverMind
08.10.2007, 00:28
Я тоже не замечал строгой привязки к размеру города. Вот полная функция для AI при взятии города.

CvPlayerAI::AI_conquerCity
[spoiler][code]void CvPlayerAI::AI_conquerCity(CvCity* pCity)
{

Lexad
08.10.2007, 00:35
Спасибо!

Nosferatu
08.10.2007, 09:53
А что за доп. условия?То есть иногда в принципе и случайно может ЛЮБОЙ город(в том числе и святой)разрушить?Ещё интересно,а есть у кого-нить объективная информация на тему поведения разнообразных цив в обращении с покорёнными городами?(думаю,что старая не очень-то объективна)

Worobjoff
08.10.2007, 11:30
Расшифровал алгоритм.

Разрушать город AI будет если:
(а)прошло 20 ходов и (б)городов у AI более 4 и (в)город не святой и (г)в городе нет чудес (неустаревших).
Вероятность разрушения (ВР) будет рассчитана по сл. образом:
1.
Если город отобран не у варваров
1.1. Усли вокруг города в есть более 3 городов врага (на каком-то расстоянии) ВР += 30
1.2. Если не 1.1. то при расстоянии от ближайшего своего города > 12, ВР += расстояние * 2.
(условное расстояние, как считается, здесь не написано)
2.
Если (а)город имеет общие клетки с другими AI-городами и (б)финансовые проблемы,
ВР += (70 - 15 * население города)
3.
В городе есть гос.религия:
3.1. Если AI обладает святым городом, ВР -= 50.
3.2. Иначе ВР -= 10
4.
Близость (чего? AI_playerCloseness)
4.1. Если близость положительная, ВР -= (25 + близость * 2)
4.1. При отрицательной близости, ВР += 60
5.
Если (а)город имеет общие клетки с сдругими Ai-городами и (б) отоборан не у варваров
ВР += getRazeCityProb (вероятность разрушения городов для данного лидера)
6.
Если полученное в пунктах 1-5 ВР положительное, то его умножают на содержание по каждому цивику
формула множителя: (100 - getUpkeepModifier)
выполняется для цивиков с содержанием.
(отрицательную ВР не умножают!)

7. И, наконец, принятие решения о разрушении на основе рандома:
Если рандомное число в диапазоне 0-100 меньше ВР, то город - рушить!
(рандом, по-видимому, для разрушения городов ведется отдельный, и возможно, не повлияют при перезагрузке какие-то другие

манипуляции (ходы или сделки) на вероятность разрушения).

Примечания:
(-= означает уменьшить, += означает увеличить)
(в фразе "общие клетки" не уверен, может быть это "примыкает к")
(шаги 1-6 выполняются последовательно и ВР суммируется)

NeverMind
08.10.2007, 12:45
:applau2: Worobjoff, оставайся на связи. Я еще функций по разным темам накидаю. Вот эта "близость AI" :blink:

[code]int CvPlayerAI::AI_playerCloseness(PlayerTypes eIndex, int iMaxDistance)
{

Nosferatu
08.10.2007, 12:53
<div class='quotetop'>Цитата</div>
Близость (чего? AI_playerCloseness) [/b]

Судя по всему это близость компьютера к границам игрока имеется в виду.(closeness-близость)Вообще,большое вам спасибо за проделанную работу,ещё ни на одном сайте не припомню,чтоб получал столь быструю помощь. :.V.: Теперича бы переложить бы сие на простой язык,стало бы совсем здорово.По таблице:но ребята,я ведь сам видел как Бисмарк два города порушил,тоже и про некоторых других,у кого вероятность нулевая,те же китайцы.

NeverMind
08.10.2007, 12:57
<div class='quotetop'>Цитата</div>
Судя по всему это близость компьютера к границам игрока имеется в виду[/b] Да нет, это скорее близость захваченного города к границам AI-игрока.

<div class='quotetop'>Цитата</div>
По таблице:но ребята,я ведь сам видел как Бисмарк два города порушил,тоже и про некоторых других,у кого вероятность нулевая,те же китайцы.[/b] Тьфу ты :sneaky:, написано же "дополнительная" вероятность. Выше приведена формула и ее расшифровка - посмотри еще раз. Есть общая вероятность разрушения города, которая считается независимо от конкретного лидера, а есть дополнительный показатель, который повышает вероятность разрушения города конкретным лидером.

Worobjoff
08.10.2007, 14:01
<div class='quotetop'>Цитата(NeverMind * 8.10.2007, 12:57) 207095</div>
[/b]
Нужен текст функции CvCity->AI_playerCloseness

NeverMind
08.10.2007, 14:11
Ага, точно.

[spoiler][code]int CvCityAI::AI_playerCloseness(PlayerTypes eIndex, int iMaxDistance)
{

Worobjoff
08.10.2007, 15:08
Интегральная оценка густоты городов вообще (на вскидку).
Что бы точно разобрать формулу расчета, надо еще несколько функций:
stepDistance, calculatePathDistance, area->getNumCities

Но надо ли?

Blacksun
08.10.2007, 15:31
<div class='quotetop'>Цитата(Worobjoff * 8.10.2007, 15:08) 207165</div>

Интегральная оценка густоты городов вообще (на вскидку).
Что бы точно разобрать формулу расчета, надо еще несколько функций:
stepDistance, calculatePathDistance, area->getNumCities

Но надо ли?
[/b]

stepDistance - это по мому движение юнита за один шаг (с учетом дорог).

calculatePathDistance - эта функция используется для прокладки пути АИ юнита от тайла до тайла (ее использует функция - generatePath)

area->getNumCities - тут по мому все ясно - кол-во городов на континенте...

Worobjoff
08.10.2007, 15:45
<div class='quotetop'>Цитата(Blacksun * 8.10.2007, 15:31) 207172</div>
area->getNumCities - тут по мому все ясно - кол-во городов на континенте...
[/b]Вряд ли. getNumCities - этот метод класса area. Класс area - поле класса CvCity.
Т.е. getNumCities вычисляет число городов относящихся к этому городу.
Не очень понятно что именно, правда?

Blacksun
08.10.2007, 15:54
<div class='quotetop'>Цитата(Worobjoff * 8.10.2007, 15:45) 207177</div>

<div class='quotetop'>Цитата(Blacksun * 8.10.2007, 15:31) 207172
area->getNumCities - тут по мому все ясно - кол-во городов на континенте...
[/b]Вряд ли. getNumCities - этот метод класса area. Класс area - поле класса CvCity.
Т.е. getNumCities вычисляет число городов относящихся к этому городу.
Не очень понятно что именно, правда?
[/b][/quote]

Ты немножко неправильно понял класс Area - это отдельный класс и генерируется он в самом начале (после генерации карты). Это не что иное, как попытка разграничить континенты и острова... (чтобы юниты через море не бегали). А в класс City - он попадает после постройки города (вернее ID Area).

Так что Area->getNumCities() - это количество городов на континенте.

З.Ы. Класс Area - относится скорее к тайлу а не к городу.

Worobjoff
08.10.2007, 16:10
Не разбирался с этим никогда. Кусочек программного кода из цивилизации увидел сегодня впервые.

Blacksun
08.10.2007, 16:15
<div class='quotetop'>Цитата(Worobjoff * 8.10.2007, 16:10) 207185</div>

Не разбирался с этим никогда. Кусочек программного кода из цивилизации увидел сегодня впервые.
[/b]

Ну, не знаю, по моему папка CvGameCoreDLL - сейчас есть везде и в ваниле и в Варлордах и в БТС (для всех разные).

NeverMind
08.10.2007, 16:53
Ээ...это все, конечно, замечательно, но что мы можем из этого выжать для интересущего нас игрового вопроса?

Worobjoff
09.10.2007, 11:00
<div class='quotetop'>Цитата(NeverMind * 8.10.2007, 16:53) 207197</div>

Ээ...это все, конечно, замечательно, но что мы можем из этого выжать для интересущего нас игрового вопроса?
[/b]
А что тут голову ломать-то?
Компы любит уничтожать города если экономика стагнирует, если захваченный город может убежать или слишком тесно или далеко расположен.
Не любят уничтожать если там есть религия.
Не будет уничтожать в начале игры или если это святой город или с чудами.

Тупой алгоритм - не учитывает перспективы наступательной кампании, географию (зачем ему город в пустыне или в тундре? А зачем рушить город на очень нужном ресурсе? Особенно если свой воткнуть туда ни культура ни запас войск не позволит), геометрию... Геометрия вообще - самая большая тупость AI. Город может быть нужен для получения дороги к другим цивам. Или к морю. Об этом AI напрочь думать отказывается. Тем более выбирать нужный город для захвата с учетом геометрии.
Не учитывает алгоритм и перспктивы перенести свою столицу. Похоже AI никогда не пытается выбраться из клоаки в которой стартует - из вечных льдов или тупика.

Nosferatu
09.10.2007, 12:16
А по персоналиям значит получается,что все лидеры рушат города,если это делать им выгодно,так?

ratamon
03.07.2008, 04:27
А от чего зависит произойдет ли разрушение города при его захвате игроком? Просто иногда окно выбора "Оставить - Разрушить" не появляется и город сразу разрушается.

Lexad
03.07.2008, 10:21
<div class='quotetop'>Цитата</div>
Просто иногда окно выбора "Оставить - Разрушить" не появляется и город сразу разрушается.[/b]
Пара случаев навскидку:
1. Если город размера 1 и никогда не был 2 (кроме случая, когда при создании игры включена опция NoRaze)
2. Если играешь OCC (= только 1 городом)

AFro
03.07.2008, 10:23
Насколько мне известно захватываемый город должен быть по населению хотя бы "2" что бы не разрушиться при захвате. А если этот город столица - то он должен был дорости до двойки хотя бы один раз перед захватом...

to Lexad у меня, кажется, разрушались "единички-нестолицы" даже если они только что были "2" и рашнули лучника в междуходье сразу после роста (даже без NoRaze).

Lexad
03.07.2008, 10:45
<div class='quotetop'>Цитата</div>
to Lexad у меня, кажется, разрушались "единички-нестолицы" даже если они только что были "2"[/b]
У меня нет. Если дашь сэйв с примером, разберемся.

AFro
03.07.2008, 10:56
<div class='quotetop'>Цитата(Lexad * 3.7.2008, 10:45) 253020</div>
Если дашь сэйв с примером, разберемся.
[/b]
Буду иметь в виду и наблюдать. В случае подтверждения моей информации в игровом моменте - вышлю сэйв. На сегодняшний день - только ощущения, увы.

Artemios
09.07.2008, 11:02
То есть кто-то видел, как комп разрушал свой, отвоёванный город?

Линник
09.07.2008, 17:45
<div class='quotetop'>Цитата(Artemios * 9.7.2008, 10:02) 253296</div>

То есть кто-то видел, как комп разрушал свой, отвоёванный город?
[/b]
Если в нем был взорван артист, то комп уже не считает его своим.