а мы у пассажиров спрашиваем, куда они хотят ехать?

Вопросы разработки OpenTTD, обсуждение новых сборок и патчей, решение проблем новых версий.

Модераторы: Smoky555, Группа модераторов

Сообщение Dictu » Вт ноя 06, 2007 23:27

George писал(а):Т.е. если я поставлю на краю каждого города аэропорт (так, чтобы города в их область захвата не попадали), пущу между каждой парой аэропортов самолёт, сделаю автобусные маршруты с центра города до аэропорта, то ни один пассажир никуда не поедет? Бред.
Аккуратней в выражениях :roll: (с)George
Да конечно же поедет! Если сделать трансфер через аэропорт. Правда, на Свердловских автобусных остановках появятся пассажиры до Москвы.

Насчёт схемы - никаких возражений. Она просто другая. Красивая, но сложная и ресурсоёмкая. И требует перелопатить много кусков кода. Сейчас стану внимательно читать.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение Dictu » Ср ноя 07, 2007 00:13

Э-э-э... George, я перечитал тему, но твоего варианта алгоритма не нашёл. Только общий эскиз. Поэтому отвечу с точки зрения своего алгоритма.

1) В моём варианте абсолютно неважно, где и как генерятся пассажиры. Сейчас они генерятся нормально - вот и carry on.

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

3) Платить пассажир будет как и платил. ИМХО, на нынешний момент с баблом всё в порядке.

Вообще же мне, как я уже говорил, кажется не совсем правильной идея плясать от пассажира. В жизни, как ни странно, пляшут от наличия/отсутствия маршрута. Куда можно доехать - туда едем. Куда нельзя доехать - туда не ездят, там глушь и Бирюлёво, обитель зла. Человек покупает дачу "по Павелецкому направлению", ищет работу "в трёх остановках от дома"... Протянут метро в новый район - и там жизнь начнётся. Большие селения генерят большой трафик, маленькие - угадай какой.

PS: читаю тут тред про New Passenger Destinations, дык там золотые слова мелькнули:
-This is not Soviet Russia.
-In Soviet Russia, destination chooses YOU!

::::)

А для желающих найти баги в моём алгоритме - вперёд: если у нас на ЖД-линии один за другим стоят города A, B, C, D, E, а поезд идёт по маршруту A-C-E-D-B-A, то незадачливые пассажиры в пункты D и B поедут через жо... через пункт Е, короче. Не дожидаясь более удобных поездов. Так, конечно, никто не делает, но если сделает - увидит, что вместо пассажиров у нас всё-таки лемминги.
Последний раз редактировалось Dictu Ср ноя 07, 2007 01:00, всего редактировалось 1 раз.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение George » Ср ноя 07, 2007 00:59

Dictu писал(а):Да конечно же поедет! Если сделать трансфер через аэропорт. Правда, на Свердловских автобусных остановках появятся пассажиры до Москвы.
Т.е. трансфер - это то, что я назвал пересадкой? Тогда всё правильно, мы говорим об одном и том же, только не договорились об определениях.

Dictu писал(а):Насчёт схемы - никаких возражений. Она просто другая. Красивая, но сложная и ресурсоёмкая. И требует перелопатить много кусков кода. Сейчас стану внимательно читать.
Э, а может лучше заняться зданиями? А у меня индустрии ждут ... :roll:

Dictu писал(а):Э-э-э... George, я перечитал тему, но твоего варианта алгоритма не нашёл. Только общий эскиз.
Э! стоп! У меня даже эскиза не было - только вопросы! Где ты его нашёл? :shock:

Dictu писал(а):Поэтому отвечу с точки зрения своего алгоритма.
1) В моём варианте абсолютно неважно, где и как генерятся пассажиры. Сейчас они генерятся нормально - вот и carry on.
Тогда я не понял, как они выбирают маршрут в Москву через 2, 3, ... N аэропортов? Случайный выбор из всех достигаемых станций?

Dictu писал(а):2) Про пересадки ты чуть раньше сказал:
А при реализации через трансфер - ничего и придумывать не надо.
Как меня пугают такие выссказывания, что ничего не надо думать ... Как пить дать потом граблей вылезет - мама не горюй.

Dictu писал(а):Тем более что трансфер в реальной жизни встречается часто. Ну, будет встречаться в игре чаще, чем в жизни - и уй с им. Игра есть неизбежное упрощение реальности.
Да куда уж игре до реальности, когда мне до аэропорта 2 пересадки надо делать, а тут прямой автобус :)

Dictu писал(а):3) Платить пассажир будет как и платил. ИМХО, на нынешний момент с баблом всё в порядке.
За каждый из участков независимо? Тогда кто мешает его возить по спирали по всей карте?

Dictu писал(а):Вообще же мне, как я уже говорил, кажется не совсем правильной идея плясать от пассажира. В жизни, как ни странно, пляшут от наличия/отсутствия маршрута.
Ну не полечу я в Москву, если мне надо в Казань. Хоть ты тресни.

Dictu писал(а):Куда можно доехать - туда едем. Куда нельзя доехать - туда не ездят, там глушь и Бирюлёво, обитель зла. Человек покупает дачу "по Павелецкому направлению", ищет работу "в трёх остановках от дома"... Протянут метро в новый район - и там жизнь начнётся.
Ито ограничение на точки назначения. Пассажир не может ехать туда, где нет остановок. На на этом ограничение заканчивается.
Ты прав в том, что не обязательно просчитывать маршрут каждого пассажира. Можно держать БД маршрутов и пополнять её при событии запуска нового маршрута. И периодически балансировать по загрузке. Тогда действительно, процессорных мощностей надо меньше. Зато памяти - больше.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Сообщение Dictu » Ср ноя 07, 2007 01:12

Конечно, вот пофлудим - и займёмся зданиями и индустриями. Тем более что я, как известно, кодировать не умею. Просто наболело, когда тут уже четвёртая страница флуда пошла :::)
Тогда я не понял, как они выбирают маршрут в Москву через 2, 3, ... N аэропортов? Случайный выбор из всех достигаемых станций?
На станции А появляются пункты назначения со всех станций, с которыми станция А связана трансферами напрямую или через любое их кол-во.
Как меня пугают такие выссказывания, что ничего не надо думать ...
Просто до нас уже хорошо подумали. Трансферы - вполне отработаны.
Dictu писал(а):
3) Платить пассажир будет как и платил. ИМХО, на нынешний момент с баблом всё в порядке.
За каждый из участков независимо? Тогда кто мешает его возить по спирали по всей карте?
А вот не знаю. Как сейчас за трансфер платит - так и тогда будет платить. Сейчас вроде никто от действующей системы не плачет.
Ну не полечу я в Москву, если мне надо в Казань. Хоть ты тресни.
Да. Печально. В игре полностью смоделировать жизнь не получается. Можно только слегка к ней приблизиться.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение George » Ср ноя 07, 2007 01:32

Трансфер - это unload на станции?
Тогда не то, потому что он управляется транспортом, а пересадки - пассажиром.
Если у меня электричка Питер - Окуловка и электричка Окуловка - Москва и обе без unload, то никто из Питера в Москву не едет. Это не то, что подразумевалось (что все поедут из Питера в Москву через Окуловку).
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Сообщение Dictu » Ср ноя 07, 2007 02:11

Ну, батенька, за неимением горничной - живут с дворником. Я просто попытался представить как путём минимальных изменений можно достичь максимального эффекта. Ну, неполного, согласен. Пересадки надо прямо обозначать. Но какая разница, что чем управляет, если видимость та же, вот это я не понял?

Трансфер - это трансфер. У анлоуда даже кнопка в расписании другая. К стыду своему я не помню их тонких различий и для трансфера пользуюсь трансфером. Что-то кажется там деньги по-другому считаются...

А вообще всё происходящее напоминает мне Швейковского персонажа, который по жизни занимался тем, что ковырял в носу, а временами извлекал палец и говорил: "Я только что изобрёл электричество". Ведь есть и Passenger destinations, и даже New Passenger Destinations... Правда, там очень мудро всё завёрнуто.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва

Сообщение Neko » Ср ноя 07, 2007 04:58

Dictu писал(а):Далее конструктив. Возможно, стоит так и оставить пассажиров мясом, но подумать, как это мясо грамотно развозить по стране?

Я в самой ближайшей перспективе собирался делать "Летучего Голландца", т.е. поезд, у которого изначально НЕТ никакого путевого листа, а этот самый путевой лист каждый раз автоматически создаётся на станции в зависимости от загруженного груза, а вагоны автоматом реферятся в зависимости от того груза, который есть в данный момент на станции.
Похоже, что этот алгоритм вполне подойдёт и к новым русским, пардон, к новым пассажирам, у которых на лбу теперь написано TileIndex destination; ,т.е. пункт назначения.
Если мы подадим на станцию поезд без путевого листа, нагрузим туда пассажиров, то тогда, согласно купленным билетам, автоматически создастся путевой лист и GO с песнями вперёд.

Я с помощью этого алгоритма собираюсь уголь возить, а применительно к пассажирам надо его ещё додумывать в плане - как лучше организовать погрузку на станции и что делать на промежуточных станциях, когда часть груза сойдёт с вагона, но тамошние мешочники наверняка захотят занять их место. Возникнет проблема с автоматической корректировкой маршрутного листа.
Но эти проблемы намного реальнее решить, чем решение транспортной задачи. Поэтому, реальность увидеть всё описанное на наших экранах и самолично поиграться, менее призрачна, если, конечно, взяться за всё это.
Револьвер - лучший аргумент в любом споре
Аватара пользователя
Neko
Президент
Президент
 
Сообщения: 750
Зарегистрирован: Чт окт 13, 2005 12:23
Откуда: Москва

Сообщение Pk » Ср ноя 07, 2007 10:17

>>George
Полностью согласен с постановкой вопроса (кроме точки назначния, но это второстепенно).

>>Dictu
Под кого заточен алгоритм, тот и "думает".
У тебя главный - поезд.

Варианты прохождения: (не все пункты)
Движение по маршруту:
"пересадка"
Если единица более не удовлетворяет потребности /маршрут для неё исчерпан/ то заплатить, выйти и ждать.
"Выбор" (по сущ. маршруту)
Если позже на этой единице можно будет добраться до точки назначения быстрее (с меньшим к-вом промежут. остановок), то тогда пропустить и ждать.
Выбор маршрута:
"Трассировка"
5 Поставить остановку в "очередь".
10 Для всех маршрутов на остановке (1 или более единиц с одинаковым путевым листом (включая расписание))
15 взять все остановки.
20 Для каждой остановки запросить маршрут на конечную точку. Если такого нет GO SUB 5,
25 Если у неё есть маршрут или же это она и есть (единичный длины маршрут), то: снять остановку из очереди, взять её маршрут
26 Если у неё нет возможных маршрутов, конечной точке дать значение "недоступно"
29 Последней в очереди остановки маршрутный лист дополнить, снять остановку из очереди.
30 return
Примерный набросок, надеюсь общая мысль ясна. Просьба не бить ногами по голове за отсутствие механизма оптимизации БД на остановках - это всё-таки другая БД.
Анализируй то, как ты делаешь сам. Потом объясни это компьютеру.
Кладу асфальт, гружу Лейланды.
новый вариант мышления ИИ
Pk
Директор
Директор
 
Сообщения: 320
Зарегистрирован: Пт сен 30, 2005 06:50
Откуда: Москва

Сообщение George » Ср ноя 07, 2007 17:26

Pk писал(а):Примерный набросок, надеюсь общая мысль ясна. Просьба не бить ногами по голове за отсутствие механизма оптимизации БД на остановках - это всё-таки другая БД.
Т.е. для каждой остановки хранить массив вида (ID остановки, маршрут до этой остановки, плановая средняя скорость движения на маршруте). Если считать N максимальной длинной маршрута (пусть 10), L длинной ID (пусть 2 байта), K байт на среднюю скорость (пусть 2), M число остановок на карте (1000), то надо (M-1)*M*(K+N*L), байт для хранения, т.е. 21МБ. Согласен, расчёт будет идти почти мгновенно, но потребление памяти очень ощутимое. Хотя и не смертельное. Интересно, сильно ли мы выиграем, если будем использовать динамические массивы.
Пересчитывать сами маршруты можно при создании нового маршрута, добавлении ТС на маршрут и ежемесячно.
Среднее время прохождения маршрута можно добавить к ТС, записывая 2 значения - сумма времени прохода маршрута (между 2-я остановками) в днях и количеством совершённых проходов. Можно также хранить сумму перевезённых пассажиров для оценки средней загруженности.
Тогда средняя скорость на маршруте может быть расчитана через сумму отношений вместимости тс и среднего времени прохождения с учётом среднего заполнения.
Всё бы хорошо, но есть одно большое НО:
Все пассажиры едут из точки 1 в точку 2 всегда по одному и тому же маршруту. Пусть даже он и пересчитывается раз в месяц. С одной стороны, путём большого расхода памяти мы задачу решили. С другой стороны, решение не очень красивое. Если же иметь несколько альтернативных маршрутов, то объём памяти переходит в раздел неприемлемого.
Альтернативой является расчёт. Требуется ресурсы CPU, снижается расход памяти. Где разумный компромис - не ясно
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Сообщение Killen » Ср ноя 07, 2007 20:05

"Тогда кто мешает его возить по спирали по всей карте?"
А кто нашим транспортникам мешает возить нас по всему городу? =) Никто. Вот они и придумывают самые извращенные маршруты.
Аватара пользователя
Killen
Начальник станции
Начальник станции
 
Сообщения: 114
Зарегистрирован: Ср окт 11, 2006 05:32

Сообщение Pk » Ср ноя 07, 2007 20:11

Ну я же просил не бить!!
И как с вами после этого прикажете общаться? Кстати, думается мне, что придумать алгоритм для ужимания объёма БД под силу далеко не только мне, и алгоритм этот не будет завязан на Винрар и т.п. софтину.
Дальше - больше.
1000 остановок... это, извините, сколько игроков и на какой карте должно быть? Да и количество остановок взято, в общем, ударное (не все станции будут иметь хотябы 3 маршрута)
В любом случае, даже Пень 1 не жала сейвка от Вангеров на 36 Мб.

Опять же, кто мешает реализовать... оба подхода: лёгкий (Dictu) и мой, но работают они только раздельно: либо с БД либо "нормальный".

Таким образом, создав возможность смены балланса "на лету" можно уйти от некоторых проблем связанных с несовместимостью версий и т.п. проблем.
PS: Я думаю, что если кто-то захочет пожертвовать 50Мб на сейвку то он сделает это. Ведь тратят же 5-7 Гб под Висту.
Анализируй то, как ты делаешь сам. Потом объясни это компьютеру.
Кладу асфальт, гружу Лейланды.
новый вариант мышления ИИ
Pk
Директор
Директор
 
Сообщения: 320
Зарегистрирован: Пт сен 30, 2005 06:50
Откуда: Москва

Сообщение George » Ср ноя 07, 2007 21:43

Pk писал(а):Ну я же просил не бить!!
Я ещё не начинал
Pk писал(а):И как с вами после этого прикажете общаться? Кстати, думается мне, что придумать алгоритм для ужимания объёма БД под силу далеко не только мне, и алгоритм этот не будет завязан на Винрар и т.п. софтину.
Т.е. на использование CPU. Тогда лучше хранить только удаление 1, а всё остальное расчитывать при искуственном ограничении максимального количества пересадок. Например до 5. Тут собрать весь массив должно быть не особо трудоёмко.

Pk писал(а):1000 остановок... это, извините, сколько игроков и на какой карте должно быть?
8 игроков, карта 256х256. Всего 125 остановок на брата :)

Pk писал(а):PS: Я думаю, что если кто-то захочет пожертвовать 50Мб на сейвку то он сделает это. Ведь тратят же 5-7 Гб под Висту.
Это не память сэва, это оперативка. Восстановить всё это хозяйство проще расчётом при запуске (для остановок). А вот для транспорта да - надо хранить.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Сообщение Pk » Ср ноя 07, 2007 22:03

...в частности, если несколько маршрутов идентичны в каком-то промежутке по длине большем, чем указатель на объект, то заменяем описание маршрута этим указателем. (соответственно, можно дать сразу несколько элементов, тогда будет ещё и оптимизация по объёму для маршрутов "по waypoint'ам" (актуально для поездов, а/м, кораблей.)

Так же "длину" можно вычислить вручную и грубо забить вручную.
Анализируй то, как ты делаешь сам. Потом объясни это компьютеру.
Кладу асфальт, гружу Лейланды.
новый вариант мышления ИИ
Pk
Директор
Директор
 
Сообщения: 320
Зарегистрирован: Пт сен 30, 2005 06:50
Откуда: Москва

Сообщение Pk » Ср ноя 07, 2007 22:30

В порядке полурабочего бреда:
Если к-во невывезенного пассажиропотока получается приличным, то в зависимости от богатства город может начать адресные закупки легковушек. До точки назначения люди добираются сами.
Новая графика:
Автомобили:
Легковушки А (1915...1935-й) (25-35 Mph)
Легковушки Б (1930...1945-й)* (35-50 Mph)
Легковушки В (1940...1973-й) (45-80 Mph)
Легковушки Г (1969...1985-й)* (40-60 Mph)
Легковушки Д (1982...2005-й) (45-75 Mph)
Легковушки Е (1999...2020-й)* (45-70 Mph)
Легковушки Ё (2015...2040-й) (40-60 Mph)
Легковушки Ж (2037...2055-й)* (40-65 Mph)
Легковушки З (2050...2085-й) (40-70 Mph)
* - при частичном изменении свойсив м/б только они
Поезда:
'Jinty' Class (300Hp, 35 Mph) с 1915
Stannier Crab (700Hp 65 Mph) с 1923
Gresley A3 (1100Hp 70 Mph) с 1929
Gresley A4 (1500Hp 90 Mph) см. Умеренный климат Ginzu A4
BR 8P (1900Hp 95 Mph) см. Умеренный климат 8P
Gresley A5 (2100Hp 110 Mph) с 1950
Строения:
Открытая парковка (как в SC4000), 8 машиномест 1х1.
Частично крытая парковка (a'la Mafia) 20 машиномест, 2х1 (2 этажа, в этом проблема)
Крытая парковка (1х1, неогр.)
строится городом, когда количество машин в доме не соответствует парковочному месту возле объекта (по дефолту для каждого типа объекта своё свободное парковочное место).
Заводы строят свою парковку.
----
Но это так, набросочки к маньячествам.
Анализируй то, как ты делаешь сам. Потом объясни это компьютеру.
Кладу асфальт, гружу Лейланды.
новый вариант мышления ИИ
Pk
Директор
Директор
 
Сообщения: 320
Зарегистрирован: Пт сен 30, 2005 06:50
Откуда: Москва

Сообщение Killen » Ср ноя 07, 2007 23:27

Pk
Было бы отлично, но едва ли в этом поколении компьтеров найдутся такие, которые смогут это потянуть... В смысле, легковушки и поезда. А вдобавок ко всему, как будут ходить поезда? По рельсам игрока? Не вариант. А если сами прокладывать начнут, то... то едва ли в этом поколении программистов найдутся такие, которые смогут это потянуть =)))
Аватара пользователя
Killen
Начальник станции
Начальник станции
 
Сообщения: 114
Зарегистрирован: Ср окт 11, 2006 05:32

Пред.След.

Вернуться в Разработка OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

cron