[QUOTE]Хм, "переведи..." (с) "Москва слезам не верит"[/QUOTE]имеется глобальная база данных, в которых стрелка может быть помечена либо как занятая, либо как свободная. Сборка маршрута по идее должна проходить так (заодно и для себя напишу)
1) из базы данных "маршруты светофора N станции Х" создаётся подбаза "маршруты от светофора N до светофора K по станции Х" или "маршруты от светофора N станции Х до светофора K по станции Х2". Сортируется по приоритетам, если таковые были введены. 2) если имеется первый вариант, то:[INDENT]а)если заданный номер маршрута больше, чем маршрутов всего, ждём 15 секунд, затем смотрим маршрут №1, далее в одном потоке (т.е. для виртуальной машины скриптов "линейным алгоритмом") проходит проверка занятости стрелок б) проверяется следующая стрелка за тем светофором, занята ли она, и если занята, то не направлена ли на нас. Если направлена на нас и занята, увеличиваем номер маршрута на 1, переходим к пункту а) в) Отсылаем светофору сообщение на предоткрытие. Ждём 0.5 секунды. После ожидания проверяем положения стрелок. Если они были переведены, увеличиваем номер маршрута на 1, переходим к пункту а) г) Проверяем показание светофора. Если оно красное, убираем метки о занятости ,увеличиваем номер маршрута переходим к пункту а) [/INDENT]Если второй вариант:[INDENT]а) проверяется направление перегона по тегу во входном светофоре следующей станции б) если он повёрнут не на нас, посылаем сообщение о переключении перегона. Ждём подтверждения о его переключении, если такового не приходит за 0.4 секунды, ждём 5 минут, и переходим к пункту а) в) проверяем положение стрелок, если все свободны, вписываем их занятость, ждём 0.5 секунд. Если не свободны, переходим на следующий номер маршрута, и к пункту а) г) проверяем положение стрелок (если что-то случилось с положением, след. номер, переход к а), если ничего не случилось, переводим стрелки, открываем светофор, ждём 1 секунду д) если светофор не открывается, убираем метки о занятости, переходим к следующему маршруту [/INDENT] далее... когда стрелка освобождается, метка "занято" у неё снимается, ищутся все построенные маршруты с ней, светофорам, с которых эти маршруты были приготовлены, щлются сигналы о принудительном закрытии. Если освобождённая стрелка последняя у маршрута, то он убирается из стека. Вроде так... [QUOTE]Если в одну сторону на перегон отправляется пакет[/QUOTE]с другого конца карты тоже может отправится другой пакет (причём не выполнено правило о прохождении пакета), то на одной из станций вполне может случиться коллизия. Если же попытаться расталкивать составы по станциям, рассчитывая им пути на N станций вперёд, то вероятность коллизий в конце концов только увеличивается (из-за уменьшения количества свободных путей). Вывод: для однопутки наилучшее решение "пакет туда-пакет обратно", причём навстречу пакетам продвигаются по 1 поезду на перегон, с долгими ожиданиями. И размеры пакетов вполне можно оптимально рассчитывать. (не зря американцы делают сверхдлинные составы - у них навстречу пакетам почти нет движения) |
[QUOTE]б) проверяется следующая стрелка за тем светофором, занята ли она, и если занята, то не направлена ли на нас. Если направлена на нас и занята, увеличиваем номер маршрута на 1, переходим к пункту а)[/QUOTE]тут неверно: ждём 5 минут. Ибо коллизия.
[QUOTE]в) Отсылаем светофору сообщение на предоткрытие. [/QUOTE]перед этим переведя стрелки, естественно. |
[QUOTE]Too long, don't read[/QUOTE] You, sir, are fucking awesome!
[QUOTE]Давай после. Мне очень понравилась твоя идея с приоритетами, но ты и сам сказал, что их-то три. И ни какие "птички" и "галочки" не помогут в правилах сие изменить.[/QUOTE] Их примерно 4294967296. [QUOTE]Только вот, упал он (Т6) когда я 10-й поезд запустил...[/QUOTE] Ой не знаю... У меня в метро целая линия в 30км длиной заполнялась выскакивающими из порталов поездами. Следовали с интервалом полторы-две минуты. Количество поездов посчитай сам. :) [QUOTE]РаннингНамбер можно сделать номером поезда, который будет ключом к таблице данных поезда (мини-вариант системы расписаний) где и указывать нормальный приоритет.[/QUOTE] Поддерживаю. RunningNumber я уже использую для хранения номера поезда в моем концепте "говорящего" ДСП. По архитектуре: никак будок. Сделай его в виде правила. |
[QUOTE=TRam_;203867]имеется глобальная база данных, в которых стрелка может быть помечена либо как занятая, либо как свободная. Сборка маршрута по идее должна проходить так (заодно и для себя напишу)
1) ... 2) ... и т.д. [/QUOTE] Ой, ё! А зачем так сложно то? Чем сложнее, тем большая вероятность всяких глюков. Не проще ли сделать примерно так. У светофоров расчитаны маршруты, так? У нас есть всего лишь несколько вариантов поведения: 1) прибытие на станцию, зная на какой путь; 2) прибытие на станцию на путь из группы (нам всё равно куда прибывать, лишь бы грузовым не залезть в пассажирский парк, а пассажирским - в грузовой); 3) отправление со станции; 4) маневры. По первому случаю. Отыскиваем тот самый маршрут, который соответствует заданному направлению Н - Н1. Проверяем стрелки между этимми светофорами на занятость. Хотя бы одна занята, тогда Н - красный, стоим, курим бамбук до следующей проверки. Все стрелки свободны и открылся светофор (путь не занят другим поездом) - welcome to Н1! По второму случаю. Хватаем первый маршрут из группы (это должна быть команда такая "собрать маршрут из группы"). Далее то же, что и в первом случае, только бамбук будем курить, когда проверим последний маршрут. Через время опять по кругу. Третье. С отправлением проще. Там единственный вариант и его проверяем до умопомрачения. Но! Если это однопутка, или идём на неправильный, то тоже, что у тебя во втором варианте по пунктам а), б) и в). Маневры - это отдельная эпопея там черт ногу может сломать, так что об этом можно как-нить отдельно. Но! Меня смущают эти 5 минут везде. С одной стороны вроде и не надо бы особо часто ломиться в закрытую дверь, а с другой стороны хвост встречного спустя 5 секунд после проверки прошмыгнул обратный ему выходной (или когда входной проезжает перегон считается свободным?), а мы продолжаем ещё целых 5 минут курить бамбук. Думаю, оптимально будет 1-2 минуты. P.S. Выражение "курить бамбук" применяю исключительно к железнодорожному транспорту. Ехал как-то на электричке в Саратовской губернии. На станции - остановка. Только остановился, открыл двери и тут по громкой связи:"Стоим, курим бамбук. Минут 20, выходной - закрыт!":D |
[QUOTE]Все стрелки свободны и открылся светофор (путь не занят другим поездом) - welcome to Н1![/QUOTE]и если хотя бы одна из этих стрелок Х-овая, и по другой её стороне проложен маршрут, то стрелки на нашем маршруте переведутся через 0.5 секунд, и курить бамбук на прийдётся намного больше часа, т.к. фактически маршрут собран (за исключением той стрелки), но светофор "чё-то не открывается". Аналогично с с маркерами пересечений. Вроде и стрелки свободны, ан нет: светофор закрыт и открываться не хочет.
По поводу групп...Ты имеешь в виду "если маршрут на один путь (станции/перегона) не собрался, собираем на другой"? Возникает вопрос: а в следующей команде как мы будем узнавать, с какого пути маршрут отправления/приёма создавать? Или правило "поискать маршрут отправления для поезда ** по станции ***Х " тоже надо? [QUOTE]Но! Меня смущают эти 5 минут везде. С одной стороны вроде и не надо бы особо часто ломиться в закрытую дверь, а с другой стороны хвост встречного спустя 5 секунд после проверки прошмыгнул обратный ему выходной (или когда входной проезжает перегон считается свободным?)[/QUOTE]можно не через 5 минут, а после очередного освобождения стрелки поездом. Тут без разницы. |
[QUOTE=TRam_;203960]и если хотя бы одна из этих стрелок Х-овая, и по другой её стороне проложен маршрут, то стрелки на нашем маршруте переведутся через 0.5 секунд, и курить бамбук на прийдётся намного больше часа, т.к. фактически маршрут собран (за исключением той стрелки), но светофор "чё-то не открывается". Аналогично с с маркерами пересечений. Вроде и стрелки свободны, ан нет: светофор закрыт и открываться не хочет.
[/QUOTE] Хм, действительно. А как правило "видит" светофоры? Светофоры видят маркеры. Значит, по идее, и правило может "увидеть" на пути маркер как объект и почитать его состояние, так же, как читаем состояние стрелки. Но тогда на х-овой стрелке обязательно надо ставить х-маркеры. Хотя их вроде всегда нужно ставить, но я пользуюсь Path Control, а там они явно задаются при создании маршрута, вручную. [QUOTE] По поводу групп...Ты имеешь в виду "если маршрут на один путь (станции/перегона) не собрался, собираем на другой"? Возникает вопрос: а в следующей команде как мы будем узнавать, с какого пути маршрут отправления/приёма создавать? Или правило "поискать маршрут отправления для поезда ** по станции ***Х " тоже надо? можно не через 5 минут, а после очередного освобождения стрелки поездом. Тут без разницы.[/QUOTE] Да, именно это я и имел ввиду. Поискать маршрут отправления для поезда, думаю, не получится, потому как маршруты у светофора, а вот поискать следующий светофор впереди - это, думаю, реально и плясать уже от его маршрутов. Правда, тут маршрутные и маневровые будут путаться под ногами, но для маршрутных всё равно нужно считать маршрут, поскольку часто он выполняет роль фактически выходного, а маневровые отсеиваются исходя из категории поезда. Так получится? И таким образом реализовать "маршруты от светофора N станции Х до светофора K по станции Х2" |
[QUOTE]И таким образом реализовать "маршруты от светофора N станции Х до светофора K по станции Х2"[/QUOTE]маршрут отправления строится до входного(или ещё какого-то) следующей станции. Но перегон, естественно, при этом не проверяется, повторюсь, будет проверяться состояние этого светофора на предмет направления перегона (закрытый входной в z7 имеет состояние 0, закрытый входной из-за встречного направления перегона - 1000)
я честно не знаю, получится или нет. Ибо шаг первый -постройка элементарных маршрутов от одного светофора о другого, шаг второй - постройка любого возможного маршрута из списка, и шаг 3 - постройка любого возможного маршрута от светофора впереди поезда (со списком свтофоров, "обязательных" для прохождения). Значит, по поводу маркеров... Прийдётся их логику изучать :( . [QUOTE]Правда, тут маршрутные и маневровые будут путаться под ногами, но для маршрутных всё равно нужно считать маршрут, поскольку часто он выполняет роль фактически выходного, а маневровые отсеиваются исходя из категории поезда. Так получится?[/QUOTE]да, создание маршрутов сделанно именно так. Слово в слово :) |
Эх, а будку-то в правило превратить не удаётся... Бука умеет аакуратно выделять под себя память, а правило нет (в результате трейнз выбивает в процессе сортировки светофоров и сборки маршрутов уже который раз ). В то же время с правилом удобнее: не надо лазить за окошком за пол карты ...
Видимо прийётся делать и будку, и "правило-паразит" этой будке :(. |
Ну это то всё хорошо. Вроде как с поездными более-менее понятно. TRam, я как-то раньше сказал, что о маневровых - потом. (со вздохом) Давай сейчас это "потом" и откроем. Как ты думаешь маневровые маршруты считать? Посмотри на БМО от Tramwayz. ст. Бекасово. Там же черт ногу сломит! А всё должно работать, тем более, если он делал всё это по ТРА.
TRam, а ты часто Главный контроллер ищешь? На БМО как-то однажды хотел его найти, дабы все светофоры сразу переинициализировать, но так и не нашёл. Ну и? Сигналка там просто пыщет здоровьем! :) Так и здесь. Один раз поставил, настроил - забыл о его существовании. Так что по этому поводу, думаю, заморачиваться не стоит. |
[QUOTE]Как ты думаешь маневровые маршруты считать? Посмотри на БМО от Tramwayz. ст. Бекасово. Там же черт ногу сломит![/QUOTE]по крайней мере поездные там будка пересчитывала вполне нормально, памяти хватало. Другое дело что там маневровые отнесены к другой станции (станционный контроллёр = станция), так что там думать прийдётся долго и упорно...
Собирать маневровый маршрут я собирался уже во время игры, перебирая по станции все возможные пути (стрелки при этом естественно не переводятся). Это вызовет тормоза, но созавать кучу маршрутов размером в 50 мегабайт совсем неохота. |
[QUOTE]Бука умеет аакуратно выделять под себя память, а правило нет (в результате трейнз выбивает в процессе сортировки светофоров и сборки маршрутов уже который раз ).[/QUOTE] Как правило, неправильно выделяет память программист... Я считаю, что правило необходимо.
|
[QUOTE]Как правило, неправильно выделяет память программист...[/QUOTE]ну да, две тысячи светофоров, у каждого из которых есть имя, и есть по 3-10 маршрутов, с запоминанием 5-6 имён стрелок в каждом. Итого около 60 000 строк. Плюс сортированный массив объектов, содержащих ссылки на все стрелки (ибо для быстого поиска Soup не очень выгоден: мы из него можем получать только строки имён, и будем сильно напрягать роутер).
А правило будет, я уж говорил, что оно будет дополнительным внешним интерфейсом к будке. |
А если пересчитывать маневровые маршруты не сразу по всей карте, а в пределах только станции? Так постепенно и пересчитать все станции. К тому же, элементарные маневровые маршруты гораздо короче поездных, а значит, имеют в себе гораздо меньше стрелок, что должно облегчить пересчёт.
И ещё: как планируется алгоритм сборки составных маршрутов? |
[QUOTE]А если пересчитывать маневровые маршруты не сразу по всей карте, а в пределах только станции?[/QUOTE]у меня все поездные маршруты в пределах каждой станции свои.
Алгоритм составных пока не придумал - надо вначале хоть элементарные сделать. |
[QUOTE=TRam_;204092]ну да, две тысячи светофоров, у каждого из которых есть имя, и есть по 3-10 маршрутов, с запоминанием 5-6 имён стрелок в каждом. Итого около 60 000 строк. Плюс сортированный массив объектов, содержащих ссылки на все стрелки (ибо для быстого поиска Soup не очень выгоден: мы из него можем получать только строки имён, и будем сильно напрягать роутер).[/QUOTE]
Чево? Суп — это тип данных, реализованный, скорее всего, на дереве, каким боком к нему относится загрузка роутера? Что-то памяти многовато требуется. Если у тебя есть имена всех стрелок, то зачем нужен массив ссылок? Есть же Router.GetObject(string)? |
Текущее время: 06:04. Часовой пояс GMT +4. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim