+ Ответить в теме
Показано с 1 по 17 из 17

Тема: Выбор технологии компом, исследование кода

  1. #1
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    Господа. не лежит ли у кого CvPlayerAI.cpp под рукой? Хоцца посмотреть правило выбора ИИ следующей науки для исследования
    продвинь это сообщение в соцсеть:  
    Krieg души

  2. #2
    продвинь это сообщение в соцсеть:  

  3. #3
    Администратор


    Аватар для Dynamic


    Регистрация
    07.04.2005
    Адрес
    Санкт-Петербург
    Сообщений
    12,186
    А нельзя было файл приложить?
    продвинь это сообщение в соцсеть:  
    PBEM-169 - Зулу, PBEM-170 - Америка, PBEM-172 - Египет, PBEM-174 - Англия

  4. #4
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    Спасибо. Аднака, долго посидеть придется
    продвинь это сообщение в соцсеть:  
    Krieg души

  5. #5
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    Итак, выбор техи - вещь стохастическая. Каждой техе ИИ приписывает число по следующему алгоритму:
    iValue = 1
    + сл.число от 1 до 2000
    + kTeam.getResearchProgress((TechTypes)iI) (не нашел, что это)
    + 100, если добавляет зрение по воде (Оптика) и есть прибрежные города; причем, если bCapitalAlone (см в конце), еще +400
    + 100, если центрирует карту (Календарь)
    + 100, если открывет карту (Спутники); еще +400, если bCapitalAlone
    +100, если позволяет торговать картами (Бумага); еще +400, если bCapitalAlone
    + 500*[1 + количество встреченных цив (iHasMetCount)], если позволяет торговать техами и не включена опция запрета на техторговлю (запрет на перепродажу не влияет - если это БтСовский файл, конечно)
    + 200, если позволяет торговлю деньгами (Валюта); еще +400, если уже кого-то встретил
    + 400, если позволяет защитный пакт (ВоенТрад)
    + 200, если позволяет Вечный Союз (Коммунизм, Фашизм)
    + 200, если позволяет вассалитет (Феодализм)
    + 200, если позволяет строить мосты (Конструкции)
    + 400, если позволяет орошение (Госслужба и Биология)
    + 500, если позволяет орошение без пресной воды (только Био)
    + 600*количество прибрежных городов. если позволяет работать на воде (Рыбалка)
    + 2 * iFeatureProductionModifier для техи (50 для Матики, это про рубку леса)
    + 4 * iWorkerSpeedModifier (50 для Парового Двигателя)
    + [максимум(2 + число своих городов; число подключенных иностранных городов) + 1] * переменную, зависящую от финансовых затруднений ИИ - это для тех, дающих +1 торговый путь (Валюта, Корпорация; замодите +3, будет в три раза больше)
    + 200 * iHealth, если до свое население/лимит доминации по населению менее 0,9; +350 * iHealth иначе; iHealth = 3 для Генетики и 0 иначе
    - 100 * TechMovementChange из файла CIV4RouteInfos (-10 для Инженерии для дороги), т.е. +1000 для Инженерии
    + 200 для Охлаждения (за +1 по морю)
    + 100 для Драмы за возможность включать ползунок культуры; еще + 1000, если ИИ идет на культурную победу
    + 50 + 100*количество городов потенциальных торговых партнеров, доступных после открытия (для Паруса и Астро) + bCapitalAlone * 950/350 (если есть прибрежные города); для торговли по неводному террайну (моддинг) - просто +1000
    + 1000 для торговли по рекам (Парус в БтС)

    ... завтра допишу

    Уточнить - расчет bool bCapitalAlone = (GC.getGameINLINE().getElapsedGameTurns() > 0) ? AI_isCapitalAreaAlone() : false; т.е. он не добавляется а) на начальном ходе или б) если у ИИ нет соседей на его континенте? Выглядит логично, т.к. применяется к разведтехам - Оптике, Спутникам, пр.
    продвинь это сообщение в соцсеть:  
    Krieg души

  6. #6
    Таким образом компьютер не учитывает завимсимость наук, то есть не учит науку для того чтобы стала доступной какая-то другая?
    Таким образом компьютер играет "честно", не видя полного дерева наук - он не знает какие науки откроются дальше. А человек, заглядывающий в дерево наук, в цивилопедию или просто знающий последовательность наук - просто читер
    Наверное стоило бы и ИИ учитывать полное дерево наук, раз уж человека наверняка используют эту информацию...
    Или kTeam.getResearchProgress как раз эту информацию даёт компу?
    продвинь это сообщение в соцсеть:  

  7. #7
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    <div class='quotetop'>Цитата</div>
    Таким образом компьютер не учитывает завимсимость наук, то есть не учит науку для того чтобы стала доступной какая-то другая?[/b]
    Я пока еще не дописал (и не дочитал), но, судя по игровому опыту, так оно и есть: верный способ затормозить ИИ на пути к Либеру - не менять ему Бумагу, хотя казалось бы...
    <div class='quotetop'>Цитата</div>
    Или kTeam.getResearchProgress как раз эту информацию даёт компу?[/b]
    Думаю, это всего лишь отражает уже выученную часть - партнерами по команде и/или самим компом, если он переключился на изучение другой техи из-за войны или по просьбе.
    продвинь это сообщение в соцсеть:  
    Krieg души

  8. #8
    О, интересная тема

    И давно надо было разместить sdk-файл онлайн. Сейчас займусь.
    продвинь это сообщение в соцсеть:  

  9. #9
    <div class='quotetop'>Цитата(NeverMind * 11.9.2008, 12:36) [snapback]260108[/snapback]</div>
    О, интересная тема

    И давно надо было разместить sdk-файл онлайн. Сейчас займусь.
    [/b]
    Для версии 3.17? Или для всех последних версий простой, Warlords и BTS?
    продвинь это сообщение в соцсеть:  

  10. #10
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    У кайзера, похоже, не весь код влез - я сегодня на работу взял свой файл. Если опять будет мало дел - добью.

    Спасибо, что вынес в отдельную тему.
    продвинь это сообщение в соцсеть:  
    Krieg души

  11. #11
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    Продолжаю.

    Что радует, алгоритм выбора техи сложный, учитывает доступность улучшений и количество рабочих, увеличение отдачи улучшений

    Если теха меняет выход с улучшений (Печатный Станок с беревень и городков, Био еды с ферм, и т.д.), то берется количество этих улучшений у ИИ, умножается на 0,5, на величину изменения по соотв. выходу и на ценность данного выхода для ИИ (AI_yieldWeight = 1 + 0,3*AIWeightPercent*коэффициент текущей эры).
    - коэффициент текущей эры = макс(эра - 1; 0)/макс(число эр - 2; 1)
    - AIWeightPercent = 1/1,1/0,8 для еды/молотков/коммерции и отражает их относительную ценность для железного болвана. Поэтому ИИ часто предпочитает фермы коттеджам; впрочем, у каждого лидера есть любимые улучшения, например у Ганди - коттеджи, что влияет на выбор улучшений, как и потребности ближайшего города.
    Это добавляется к iValue технологии.

    Продолжение следует
    продвинь это сообщение в соцсеть:  
    Krieg души

  12. #12
    Бессмертный Аватар для Линник


    Регистрация
    24.03.2006
    Адрес
    Правый берег Днепра
    Сообщений
    3,589
    Чистый прагматизм.

    Требуется доброволец для написания жалобы на Лексада в Имперскую прокуратуру... за планомерное и продолжительное истребление духа романтизма из автоматическаго интеллекта.
    продвинь это сообщение в соцсеть:  
    Знаю, подло завелось теперь на земле нашей; думают только, чтобы при них были хлебные стоги, скирды да конные табуны их, да были бы целы в погребах запечатанные меды их. Перенимают черт знает какие бусурманские обычаи; гнушаются языком своим; свой с своим не хочет говорить; свой своего продает, как продают бездушную тварь на торговом рынке. Милость чужого короля, да и не короля, а паскудная милость польского магната, который желтым чеботом своим бьет их в морду, дороже для них всякого братства. Но у последнего подлюки, каков он ни есть, хоть весь извалялся он в саже и в поклонничестве, есть и у того, братцы, крупица русского чувства. И проснется оно когда-нибудь, и ударится он, горемычный, об полы руками, схватит себя за голову...
    Н.В. Гоголь, "Тарас Бульба"

  13. #13
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    Не боИсь - тут все слишком случайно все равно; работы на рупь, толку на копейку.
    продвинь это сообщение в соцсеть:  
    Krieg души

  14. #14
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    Скажите, а что значит "? 100 : 0"? Как в iImprovementValue += ((kImprovement.isActsAsCity()) ? 100 : 0);

    Судя по коду, это *100
    продвинь это сообщение в соцсеть:  
    Krieg души

  15. #15
    <div class='quotetop'>Цитата(Lexad * 12.9.2008, 13:35) [snapback]260270[/snapback]</div>
    Скажите, а что значит "? 100 : 0"? Как в iImprovementValue += ((kImprovement.isActsAsCity()) ? 100 : 0);

    Судя по коду, это *100
    [/b]
    Это значит:
    [code]if kImprovement.isActsAsCity() == true
    продвинь это сообщение в соцсеть:  
    Нет монстров страшнее людей.

  16. #16
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396
    Понятно, спасибо. В принципе, умножение даст тот же результат, т.к. для true в хмлях стоит значение 1, для false - 0.
    продвинь это сообщение в соцсеть:  
    Krieg души

  17. #17
    Божество

    Аватар для Lexad


    Регистрация
    29.12.2005
    Адрес
    Новосибирск-Москва
    Сообщений
    7,396


    Скрытый текст

    Если теха позволяет строить новые улучшения:
    сразу +300
    если форт, еще +100
    если требует холм (ветряк, шахта), еще +100
    если требует пресной воды (ферма), еще +200
    если требует речки (водяная мельница), еще +100
    если переносит ирригацию (ферма), еще +300
    +50 еще за каждый тип террайна, где улучшение можно строить (2 для фермы - трава и степь)
    +50 за каждый тип фичи (terrain feature), где улучшение можно строить

    +TempValue, расчитывающееся так:
    __ + 200 + 100*прирост отдачи приречного тайла + 100*прирост отдачи холма + 150*прирост отдачи орошаемого тайла
    __ для части эффекта "прирост еды на не морских тайлах" умножаем на 3/2
    __ для части эффекта "рост выхода коммерции" умножаем на 2, если у ИИ проблема с деньгами
    __ домножаем полученную величину для каждого типа продукта тайла (еда/молоток/коммерция) на вес AI_yieldWeight, описанный выше).

    Если теха открывает новые ресурсы:
    + количество типов ресурсов * 450
    + 45 * AI_bonusVal, если еще и позволяет им торговать (контрпримеры - нефть, уран))
    здесь AI_bonusVal зависит от общего количества доступных ресов данного типа (например, краски) и складывается из базовой ценности ресурса и ценности для корпорации.
    Базовая ценность каждой следующей единицы ресурса после первой (т.е. для продажи) ниже в 5 раз, чем первой; ценность для корпорации всегда одинакова.


    Базовая ценность первой единицы зависит от множества факторов:
    - 0, если есть теха, делающая рес устаревшим
    иначе
    +100 * прирост счастья от реса
    +100 * прирост здоровья от реса
    для стратресурсов: берем юниты данной цивы (с учетом спецтребований УЮ), +50 за каждый тип юнита, для которого данный рес необходим, +40 за каждый тип юнита, для которого он по выбору (пример - железо для масяни). Для водных юнитов, если можем и строить, значение удваивается, умножается на мин(2*число прибрежных городов; число городов), делится на макс(1, число городов). Если юнит устарел, для него значение = 2 (т.е. почти ноль).

    Ресурс и здания (то же самое для Проектов)
    Если ресурс необходим для строительства зданий (? - в оригинале цивы таких не знаю) - +30 за каждый тип здания, если один из нужных - +20.
    Если ресурс дает бонус к строительству зданий, прибавляется суммарный бонус (в %, т.е. для Пирамид от камня = 100), деленный на 10. Если ресурс дает электоэнергию - еще +60. Если ресурс дает увеличеные производственного бонуса от здания (железо для меткомбината, например) - плюс половину эффекта (в приведенном примере 50/2). Нас интересует не наличие зданий, а возможность их строить нашей цивой в данный момент.
    Полученный результат (до сложения по разным зданиям) удваиваем.
    Если речь про приморское неЧудо (маяк, пр), то дополнительно эффект на здание умножается на число прибрежных городов и делится на половину числа всех городов игрока.
    Последняя поправка эффекта ресурса на здания - эра. Если здание текущей эры, то для него значение слагаемого домножается на 3/2, если более раннее - делится на разницу в номере эры текущей и сделавшей его доступным.
    Полученное число делим на 10.

    Ценность ресурса для корпорации:
    Берем iCityCount = (число городов * 7/6) + 1
    Для каждой корпорации считаем iCorpCount = число городов с ней + (число всех городов)/6 + 1; для каждого из потребляемых ей ресов добавляем к ценности ресурса:
    __ + 50 * iCityCount / iCorpCount для прибавки в еде или молотках с единицы реса
    __ + 30 * iCityCount / iCorpCount для прибавки в коммерциИ, колбах или золоте
    __ + 20 * iCityCount / iCorpCount для прибавки в шпионаже
    __ + 12 * iCityCount / iCorpCount для прибавки в культуре
    Полученная сумма по всем ресурсам и корпорациям делится на 10.

    Что-то я не туда закопался. Перерыв.
    продвинь это сообщение в соцсеть:  
    Krieg души

+ Ответить в теме

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru

free counters