Страница 3 из 15

СообщениеДобавлено: Ср ноя 08, 2006 10:28
Pk
К сожалению нет. Тогда я не разобрался с тем как сделать 8-и битные спрайты (бмп тут 32 бит =( ), а потом у меня не запустились нужные программы...
По этому остались только слова.

По остановкам - впрочем не оффтоп!
1.Изначально они задумывались в установке как релсы, т.е. ставятся на любую прямую дорогу, а не заменяют её.
2.А введение фур кому не нравится? Рассчёты могу и я провести, но не думаю, чтобы они были жутко сложными. Если вводить диагоналки через ЖД-алгоритмы, то можно попытаться ввести и фуры.
3.По вэй-поинтам: а) Представим, что противник построил деревянный мост.... (комменты нужны?). б) Проложил ЖД с интенсивным движением.

СообщениеДобавлено: Чт ноя 09, 2006 21:27
Norther
Жаль, ну что ж буду ждать пока вернется вдохновение... Или может кто возьмет эстафетную палочку?!

А ты проголосовал!! :twisted:

СообщениеДобавлено: Вс ноя 12, 2006 08:45
Quark
машинки это сумасшедствие какое-то — еле заставил их по двум дорогам ездить :)

СообщениеДобавлено: Вс ноя 12, 2006 11:56
SanMihalich
Вот по мне так машинки надо доводить
(про обгоны).
Диагональные дороги авто...
Очень интересно было б мосты через диагональные ж д пути, очень помогло бы.

СообщениеДобавлено: Вс ноя 12, 2006 14:12
AH-64
SanMihalich писал(а):Очень интересно было б мосты через диагональные ж д пути, очень помогло бы.

2SanMihalich
Это уже реализованно в сборке уважаемого Quark-а и если не ошибаюсь есть патч для таких целей :!:

СообщениеДобавлено: Вс ноя 12, 2006 14:33
DarkFenX
Не патч, а отдельная ветка развития ОТТД для доводки этой фичи... то есть все очень даже официально :)

СообщениеДобавлено: Пн ноя 13, 2006 06:43
AH-64
DarkFenX писал(а):Не патч, а отдельная ветка развития ОТТД для доводки этой фичи...

Ну собственно говоря :wink: я это и имел в виду

СообщениеДобавлено: Ср дек 27, 2006 14:47
Pk
Доводка к ИИ:

1. В игре заранее/динамически создать "черновую карту" - карту для экспериментов компа и его бреда. (2 копии - дефолт и рабочая)
2. Далее: Комп выделяет новый маршрут (блоками 10х10 или как там удобней) и ставит его на динамическую карту. *Копирует на черновик и в дефолт вместе с поверхностью.
3. Затем он выделяет определённую сумму денег на данную площадь и размазывает их по блокам. (соответственно, блоки с городами и блоки с горами и озёрами дороже, чем равнины)
4. Далее он начинает модифицировать по отдельности каждый блок. через один/с концов/3 блока - середина, конец, начало. *Т.е. строит пути/дороги/станции. Производит терраформ.
5) Если он замечает, что у оппонента по тому же направлению есть трасса, то он начинает анализ её расположения и свою экономию при её эксплуатации, а не строительстве своего пути (опять копирование области, строительство, рассчёт). *Дополнительное построение.
5.а) Если оказывается, что её не хватает, но шанс экономии на ней есть (хоть два фунта на рейсе!), то он опять копирует и производится рассчёт. *возврат к п 1 для этой секции.
5.а.1) Примечание: Средства берутся из остатков той же сметы.
5.а.2) Примечание: Для освобождения памяти можно ограничить количество этажей 3-4 на блок, либо 2-3 действия сливать в одно, ставя пометку, сколько логичных ходов пропустить.

6) По достижении результата (секция/проект вошли в смету) комп перепроверяет его (воспринимая дороги как нейтральные) и вносит поправки. так до тех пор, пока поправки не станут незначительными/бессмысленными (или же закончится смета ;) ) *возврат к п 1 для этой секции.
7) Затем рассчитывается смета изменённого проекта (без строительства черновых, не удачных линий) с рассчётом расходования средств. Если на какие-то секции не хватает сметных денег, то начинается поиск иного решения секции из сэкономленных средств. (т.е. откат секции к её виду до первой модификации).
8) Если не получается - откатываем две соседние клетки. Если не получается компьютер выделяет этот маршрут как временно невозможный и не использует его. *возврат к п 1 для этой секции.
8.а) Примечание: Первым делом смотреть надо "сложные" секции. Если их решить невозможно - проект помечается "временно нерешаемым"

ВСЁ ЭТО ЕЩЁ НЕ В ИГРЕ, А В ОПЕРАТИВКЕ!!!
*Т.е. это не на настоящей карте, а в воображении компа.

Каждые 10-20 ходов карта в оперативке обновляется к современному виду, если на ней что-то изменилось в ландшафте/строениях. Деревья не учитываются!

По достижению конечного результата он начинает строить именно то, что задумал без лишних отклонений от проекта.

В итоге комп находит более или менее нормальное решение.

Примечание: была исправлена одна дыра в логике, которая могла привести к срыванию горы, что не выгодно => перерассчёт => гора срывается, значит проект невозможен.

СообщениеДобавлено: Ср дек 27, 2006 14:58
Pk
!
Если это поставить выше на уровень, т.е. изначально вести рассчёт на виртуальной карте, с пробой запуска разнообразных видов транспорта (лишь бы работало!), то можно добиться и кораблей от компа.
А при установке дополнительных рассчётов (например, развитие города, резервирование площадей) мы получаем нормального оппонента.
Кстати, а не так ли работал ИИ в оригинальном TrT?
Изменения
Если в той весии логики путь удалялся и из памяти, то в этой версии маршрут (свокупность N путей) тестируется и сохраняется с указанием результатов (доходности). Затем проверяется другой вариант проведения путей. Как только изменения становятся незначительны.... =) Они сравниваются и выбирается наилучший. Из имеющихся.

Примечание: обратите внимание: в случае, если комп сразу рассчитывает все возможности, то тогда он может выдать даже запуск своего состава по вашей ЖД с вашей же станции! Причём, груз изначально будет доставлен по дороге (цена постройки ЖД в какой-то области больше, чем смета, но в остальном путь успешен. Проверяется возможность решения зоны другими видами транспорта.)
Так же можно научить его маленько гадить...

СообщениеДобавлено: Ср дек 27, 2006 15:56
Quark
ИИ во с виртуальной картой вроде никогда не работал, да и держать копию или делать на ней эксперименты это, простите меня, бред — падение производительности будет слишком велико, а пользы минимум

Оригинальный ИИ пытается посторить дорогу методом сближения двух концов с использованием метода случайного строительства, именно поэтому у него получаются такие извороты, что диву даёшся, когда например он строит автодорогу до диагонали, а потом обкладывает её змейкой из самых дешевых ж/д мостов и пускает мо ней поезд :) Скрывать это на виртуальной карте нет смысла именно потому, что такой метод был выбран разработчиками для создание эффетка «постепенного» сторительства с использованием минимального количества ресурсов

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

Кстати, комп не может использовать трассу оппонента :) и что означает «количество этажей»?

Вобщем, анализ предложенной логики показал, что она частично неверна :) (на сколько % лучше промолчу)

А вот как, с моей точки зрения, должен проводится расчёт: берем алгоритм для поиска пути A*, при этом можем как-то учитывать варианты с изменением ландшафта с введением для них второй стоимости (первая это длина маршрута, а лучше время на его преодоление), однако тут надо либо пренебречь стоимостью строительства, либо как-то сохранить несколько маршрутов с последующим выбором, либо же сделать формулу расчёта ценности с учетом сразу многих параметров (длина×стоимость)
В принципе, тут мы уже имеем готовый маршрут, можем еще обработать для придания лучшего вида или использования альтернативных методов строительства, можем также найти еще маршруты с примерно равной ценностью.
После этого полученный маршрут (возьмем первый (лучший) необработанный) сравним с маршрутами в других областях карты для выбора что же мы будем строить, альтернативы можно сохранить на будущее. Выберем, что мы будет строить сейчас и действуем по принципу выкупки земли и постепенным прокладыванием по ней трассы

Этот алгоритм теоритически можно расширить до создания транспортных сетей, однако я не знаю как тут проверять или изменять существующую часть трассы, чтобы по ней можно было пустить дополнительные поезда (с автотраспортом тут проще) — можно в принципе поначалу строить только одноколейные маршруты точка-точка, а потом двухколейные маршруты с вставкой в них развилок и расширением станций, чтобы те могли принимать больше поездов (тут надо вводить алгоритмы с применением к примеру одной платформы для одного типа груза, различать погрузочные и разгрузочные платформы, строить станции с предварительно сконструированными входами/выходами и выбирать между типами станций «terminus» и «ro-ro»)

Единственная проблема с ИИ в том, что это всё довольно сложно (и долго) реализовывать.

СообщениеДобавлено: Ср дек 27, 2006 16:08
Quark
еще проясню некоторые моменты с расчетом и хранением результатом — расчёт всегда произоводится на реальной карте, а результаты хранятся отдельно в памяти (без карты)

такой незначительной деталью, как деревья пренебрегают везде и всегда даже обычные игроки :) поэтому просто считаем, что деревьев нет (можно просто учесть стоимость расчистки клетки)

СообщениеДобавлено: Ср дек 27, 2006 16:16
Pk
Количество этажей - количество уточнений при рассчёте.

Quark, ты тормозишь, а я перескакиваю:

Он сначала забирает себе в память часть мира, где он будет строить дорогу.

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

И ещё. Скачай MiniIN там - уже можно.

Так же - "падение производительности".
Ладно, соглашусь, падение будет, но не всё же время будет тратиться на рассчёты (хотя, да, был случай - сервер Звёздных войн 2 часа 42 минуты лежал, переводя 3-х этажный русский мат.), а лишь часть. Да и тратиться будет так же, как и при строительстве.

ПРИМЕЧАНИЯ И ОПТИМИЗАЦИЯ:
1) Тестирование - прогон Маршрута с полной загрузкой по шаблонам/тест
2) проверка путей - выполняется тем же образом, что и строительство, т.е. пускается единица и смотрится, где были падения скорости, почему и как это можно исправить.

Добавил:
1. В игре заранее/динамически создать "черновую карту" - карту для экспериментов компа и его бреда. (2 копии - дефолт и рабочая)
- результаты ТАМ.

СообщениеДобавлено: Ср дек 27, 2006 16:27
Quark
Небольшой ликбез по алгортиму A*:
для начала берем все соседние клетки от источника, для каждой считаем затраченную (длину, время и/или стоимость) и оценочную цену до цели, оценочную цену можно брать без учёта ландшафта (просто считаем расстояние до цели), получаем для каждой клетки общую стоимость и выбираем самую дешёвую, все результаты сохраняем;
повторяем процесс для выбранной клетки и выбираем самую дешёвую по нашей формуле с учётом предыдущих результатов, сохраняем все результаты и снова повторяем процесс пока не достигнем целевой клетки

пример работы алгоритма на рисунке (большие красные круги обозначают препядствия), код на Visual Basic можно скачать по ссылке
Изображение

СообщениеДобавлено: Ср дек 27, 2006 16:31
Quark
Pk писал(а):Он сначала забирает себе в память часть мира, где он будет строить дорогу. Кстати, не забывай, что есть такая вещь как оптимизаия!

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

Оптимизация в первую очередь это изменение алгоритма таким образом, чтобы он делал ту же работу за меньшее время — делать копию карты это лишнее

СообщениеДобавлено: Ср дек 27, 2006 16:34
Quark
Pk писал(а):И ещё. Скачай MiniIN там - уже можно.
то есть уже можно строить диагональные автодороги?

Кстати, если отвечаешь на что-то экраном выше, приводи цитату, либо отвечай полно, например «Скачай MiniIN там уже можно строить диагональные автодороги»