|
|
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые гуру! Сразу оговорюсь - вопрос чисто учебный(курсовой пишу :) ), поэтому имеется некоторая ограниченность в выборе средств и способов разработки. Необходимо хранить маршруты кораблей в акватории порта. Возможные маршруты имеют вид графа. Вершины графа обозначены B1, B2... Соответственно, есть некая таблица Routes. Задумался, как лучше хранить маршрут - в виде ребер (т.е. создать связь с таблицей GraphRibs, где храняться все связанные пары B1B2, B1B5 etc), т.е. маршрут выглядит как совокупность ребер в соответствии со всеменем прохождения (навигации, это ж корабли :) ) по участку маршрута, либо хранить в виде вершин, сохраняя время прибытия в каждую вершину. А интересует меня применительно к такой прблеме - на участке маршруте одновременно не может находится более 2 кораблей, т.е. необходимо добавить триггер на вставку. Какие условия - пока точно не представляю. Как _правильнее_ спроектировать эти таблицы, чтобы максимально упростить логику? Сорри за сумбурность, точнее сформулировать не получилось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 12:50 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Да, забыл добавить - среда разработки MySQL5, менять нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 12:51 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Yuri_ChДа, забыл добавить - среда разработки MySQL5, менять нельзя. да какая разница-то :) среда разработки то тут причем (если оэто реляционная БД, конечно) замечание в строну: что любопытно - обычно такого рода задания дают на сеть автомобильных или железных дорог а тут совершенно иная парадигма в одном случае дороги - это то где можно проехать, но в акватории проплыть можно везде (по идее) например если между пунктами А и Б прямой дороги нет - попасть из одного в другой можно будет только через пункты Г-Д-Е... а в акватории, полагаю, можно проплыть из любого пункта в любой, за исключением очевидно бессмысленных - из А в А или из Б в Б или может быть запрещенных получается что все маршруты в акватории это декартово произведение всех пристаней/причалов в акватории минус "нулевые ребра из себя в себя", хотя - почему бы и нет.. пусть будут и нулевые - можно будет обрабатывать как швартовку у стенки Код: plaintext 1. кроме того, поскольку "кратчайше растояние между двумя точками бла-бла-бла", то зная координаты точек можно расчитывать дину ребер и вычислять предпочтительный (кратчайший) маршрут между пристанями в акватории и даже прокладывать курс. зная скорость судна и время выхода из начальной точки можно расчитать время прохождения по маршруту и добиться того, чтобы на маршруте не было больше двух судов одновременно (составить расписание) от такая вот петрушка - занятная задачка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 16:13 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Прежде всего нужно исключить одновременное изменение маршрутов в окрестности какой-либо точки параллельными сессиями. Т.е если сессия намерена добавить точки Б1..Бn между А и В, то она сначала пытается получить А,Б1,..,Бn ,В в монопольное пользование. Затем уже триггером проверяется отсутвия дублирования отрезков. Представления маршрута точками (не дугами) вполне дстаточно, перечисление дуг даст простой запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 14:29 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
позвольте уточнить 8) что ты вы тут такое завернули - не разобраться без бутылки ModelRПрежде всего нужно исключить одновременное изменение маршрутов в окрестности какой-либо точки параллельными сессиями. что имеется в виду, можете пояснить - имеется в виду, и что прежде всего исключить? чтобы одно судно не пошло по двум маршрутам А-Б и А-Г например или чтобы не пошло по одному маршруту в две стороны сразу А-Б и Б-А (и туда и обратно) вообще сессия это что такое - движение некоторого судна в акватории из А в Б? параллельная сессия - одновременное движение судна в разных направлениях? что такое маршрут что такое изменение маршрута (в контексте меседжа) ModelRТ.е если сессия намерена добавить точки Б1..Бn между А и В, то она сначала пытается получить А,Б1,..,Бn ,В в монопольное пользование. Затем уже триггером проверяется отсутвия дублирования отрезков какая сессия? что намерена добавить? что определяет разницу между точками Б1 <> Бn? я совсем вас не понял, простите... мы можем вернуться к нашим (? почему нашим ?) баранам? я угадаю, если предположу, что всю акваторию пригодную для навигации (с некотрой дискретностью - 1 морская миля, скажем) вы рассматриваете как вершины графа а маршрут это прохождение (определенным алгоритмом) по вершинам или вы что-то еще более экзотическое хотите предложить? :) ModelRПредставления маршрута точками (не дугами) вполне дстаточно, перечисление дуг даст простой запрос. само собой разумеется. для перечисленного множества вершин вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. запрос вида: Код: plaintext 1. 2. вернет все возможные дуги (туда и обратно) - т.е. опишет орграф (двунаправленый граф) <p2=p1 можно исключить> т.е. каждой их 11 вершин прилегают все оставшиеся 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 16:18 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Спасибо за участие Уточню задачу: - граф не сильно связный, из любой точки нельзя попасть в любую - составлять маршрут полностью необходимости нет, т.е. в промежуточных вершинах есть возможность выбора, если один из возможных маршрутов занят. - Есть маршруты, которые могут стать доступны/недоступны в какой-то момент (подводные работы), есть которые недоступны всегда (отмель между точками) В результате пришел к следующей структуре (фрагмент базы): Таблица Routes (маршрут судна по прибытии или отплытии) RouteID SailID (ссылка на таблицу, описывающую факт прибытия или отплытия - описывает судно, дату прибытия/отплытия, обслуживающий буксировочный катер и т.п.) StartPointID (точка в которой находимся на момент принятия решения о дальнейшем маршруте) StartPointTime(время прибытия в эту точку) NextPointID (точка к которой планируем двигаться - если кто-то движется навстречу, срабатывает триггер) Таблица Straight - описывает возможные маршруты StraightID StartPointID EndPointID IsAvailable Distance Думаю, таблица Straight не будет избыточна, т.к. описывает связность узлов. Т.е. в ней дуга A1-A2 == A2-A1 Если сделать в ней встречные маршруты уникальными(A1-A2 != A2-A1), можно изменить таблицу Routes следующим образом: RouteID SailID StraightID (маршрут по которому планируем двигаться, триггер по конечной точке) StartPointTime(время прибытия в стартовую точку маршрута) Но, тогда в таблице Straight расстояния будут храниться дважды, что не хорошо. Поэтому я остановился на первой реализации. В правильную сторону я рассуждаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 16:24 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Yuri_Ch Уточню задачу: - граф не сильно связный, из любой точки нельзя попасть в любую Код: plaintext Код: plaintext Код: plaintext Таблица Routes (маршрут судна по прибытии или отплытии) Код: plaintext SailID (ссылка на таблицу, описывающую факт прибытия или отплытия - описывает судно, дату прибытия/отплытия, обслуживающий буксировочный катер и т.п.) Код: plaintext StartPointTime(время прибытия в эту точку) NextPointID (точка к которой планируем двигаться - если кто-то движется навстречу, срабатывает триггер) Код: plaintext Код: plaintext StraightID StartPointID EndPointID IsAvailable Distance Код: plaintext 1. 2. Думаю, таблица Straight не будет избыточна, т.к. описывает связность узлов. Т.е. в ней дуга A1-A2 == A2-A1 Если сделать в ней встречные маршруты уникальными(A1-A2 != A2-A1), можно изменить таблицу Routes следующим образом: RouteID SailID StraightID (маршрут по которому планируем двигаться, триггер по конечной точке) StartPointTime(время прибытия в стартовую точку маршрута) Но, тогда в таблице Straight расстояния будут храниться дважды, что не хорошо. Поэтому я остановился на первой реализации. В правильную сторону я рассуждаю? дело хозяйское... если это реальная задача - тогда ой! я в вашей акватории не пловец, если задачка из методички - к чему "подводные работы" "отмели" и прочие вводные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 17:12 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
BULK INSERTпозвольте уточнить 8) что ты вы тут такое завернули - не разобраться без бутылки ModelRПрежде всего нужно исключить одновременное изменение маршрутов в окрестности какой-либо точки параллельными сессиями. что имеется в виду, можете пояснить - имеется в виду, и что прежде всего исключить? чтобы одно судно не пошло по двум маршрутам А-Б и А-Г например или чтобы не пошло по одному маршруту в две стороны сразу А-Б и Б-А (и туда и обратно) вообще сессия это что такое - движение некоторого судна в акватории из А в Б? параллельная сессия - одновременное движение судна в разных направлениях? что такое маршрут что такое изменение маршрута (в контексте меседжа) Я понял, что: Маршрут судна - перечень точек в порядке их посещения. Точки выбираются как путь в графе непосредственного соседства точек (графа дорог). Изменение маршрута - добавление/ удаление/ перестановка порядка точек в перечне. Исключить нужно одновременное нахождение более чем одного судна на одном ребре графа дорог. Ну а сессия - это сессия СУБД. Предполагается, что задачка многопользовательская. BULK INSERT ModelRТ.е если сессия намерена добавить точки Б1..Бn между А и В, то она сначала пытается получить А,Б1,..,Бn ,В в монопольное пользование. Затем уже триггером проверяется отсутвия дублирования отрезков какая сессия? что намерена добавить? что определяет разницу между точками Б1 <> Бn? я совсем вас не понял, простите... мы можем вернуться к нашим (? почему нашим ?) баранам? я угадаю, если предположу, что всю акваторию пригодную для навигации (с некотрой дискретностью - 1 морская миля, скажем) вы рассматриваете как вершины графа а маршрут это прохождение (определенным алгоритмом) по вершинам или вы что-то еще более экзотическое хотите предложить? :)Как автор уже уточнил, не все точки являются непосредственно соседними. BULK INSERT ModelRПредставления маршрута точками (не дугами) вполне дстаточно, перечисление дуг даст простой запрос. само собой разумеется. для перечисленного множества вершин вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. запрос вида: Код: plaintext 1. 2. вернет все возможные дуги (туда и обратно) - т.е. опишет орграф (двунаправленый граф) <p2=p1 можно исключить> т.е. каждой их 11 вершин прилегают все оставшиеся 10Имелось ввиду, если заданы Точки_маршрута Номер точки в маршруте (Pos) ИДТочки графа дорог (Point)1Приветинское2Х 3Морской прибой 4X5Тесовый берег (Наличие точки X вытекает из того , что 3.8+14<>17.5), то запрос Код: plaintext 1. 2. вернет перечень дуг графа дорог, ХПриветинскоеХМорской прибой XТесовый берегпо которым проходит маршрут. Как я понял, именно эти перечени дуг не должны пересекаться в разных маршрутах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 17:58 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
ModelR вернет перечень дуг графа дорог, по тз вопрос в том, чтобы небыло двух кораблей на любом участке любого маршрута. т.е. маршрут = участок маршрута = одна дуга т.е любой маршрут = некая отправная вершина ->- некая прилежащая вершина т.е. маршрут как перечень точек выглядит как А ->- Б и состоит только из двух точек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 18:48 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
И в чем тогда задача? Не, маршрут - список точек. Единственно непонятно, почему некотрые ограничения должны учитываться триггером а не алгоритмом планирования, которым бы решать диспетчер решал задачу сразу для всех кораблей. Ну для учебных целей видимо считается, что капитаны сами пытаются дойти до нужной точки, а диспетчерская база лишь региструет маршруты и пресекает столкновения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 09:58 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
ModelRИ в чем тогда задача? Не, маршрут - список точек. Единственно непонятно, почему некотрые ограничения должны учитываться триггером а не алгоритмом планирования, которым бы решать диспетчер решал задачу сразу для всех кораблей. Ну для учебных целей видимо считается, что капитаны сами пытаются дойти до нужной точки, а диспетчерская база лишь региструет маршруты и пресекает столкновения. это-ш курсовик задача на полный безостовный орграф ЗЫ ИМХО предложил бы вообще отказаться от такого толкования понятия маршрут - автор говорит, чито в каждой точке возможен выбор следующей точки - ИМХО это основа задачи - просто обход графа с выбором дуги ЗЫ условие задачи выполняется всегда если судов < 2-х ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 11:30 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
BULK INSERT Таблица Routes (маршрут судна по прибытии или отплытии) эта таблица бессмысленна RouteID SailID (ссылка на таблицу, описывающую факт прибытия или отплытия - описывает судно, дату прибытия/отплытия, обслуживающий буксировочный катер и т.п.) в этой таблице вы будете описывать все тоже что и в таблице Route то что дальше я даже комментировать не буду - это неверное решение А можно поподробнее, что именно неверно? По-моему, одна сущность-одна таблица. В одной таблице хранятся все точки, в другой - маршруты, т.е. пары точек, в третей - информация о связности. Что тогда вы предлагаете хранить в таблице CheckPoints? Если честно, мне и самому не все понятно из задания, например, на любом маршруте не могут находится только встречные или любые корабли, так что буду уточнять. Вообще, я опасался, что будут замечания "так не делается". Да, база не обеспечивает реальную функциональность, это просто учебный пример. Она просто фиксирует события, для поддержания логической целостности должны использовтаься триггера, поэтому я и выбрал такую реализацию. Если моя схема ошибочна, объясните плз в каком месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 12:20 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
ModelRИ в чем тогда задача? Единственно непонятно, почему некотрые ограничения должны учитываться триггером а не алгоритмом планирования, которым бы решать диспетчер решал задачу сразу для всех кораблей. Ну для учебных целей видимо считается, что капитаны сами пытаются дойти до нужной точки, а диспетчерская база лишь региструет маршруты и пресекает столкновения. Можно поподробнее? Под алгоритмом планирования вы подразумеваете резервирование возможного маршрута полностью, исходя из его доступности в определенный момент времени? Вообще, такая задача не ставилась, но это может быть интересно. Надеюсь, препод не будет возражать против небольшой корректировки ТЗ. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 12:33 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Yuri_ChНадеюсь, препод не будет возражать против небольшой корректировки ТЗ. :) зачем ему это может понадобиться? сделайте рабочую имитационную модель акватории и запустите по таймеру... задача типа: какой алгоритм обеспечит большее суммарное время нахождения как можно большего количества судов в плавании (на маршруте) но у вас-то так вопрос не стоит :) вам нужно просто набросать схему БД для хранения данных :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 12:40 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
зачем ему это может понадобиться? сделайте рабочую имитационную модель акватории и запустите по таймеру... задача типа: какой алгоритм обеспечит большее суммарное время нахождения как можно большего количества судов в плавании (на маршруте) но у вас-то так вопрос не стоит :) вам нужно просто набросать схему БД для хранения данных :)[/quot] Да ему-то в принципе все равно, это мне хочется сдлать *правильнее*. :) Кстати, повторю вопрос - если не сложно, обсясните что не так со схемой таблиц Routes и Points. Как сделать лучше (в текущем контексте - база "только для хранения") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 12:47 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Yuri_ChВообще, я опасался, что будут замечания "так не делается". да, действительно, "так не делается". начинать нужно с формализации задачи, выяснения недостающих сведений и устранения противоречий а вы бросились схему БД проектировать, ничтоже сумняшеся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 12:48 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
BULK INSERT Yuri_ChВообще, я опасался, что будут замечания "так не делается". да, действительно, "так не делается". начинать нужно с формализации задачи, выяснения недостающих сведений и устранения противоречий а вы бросились схему БД проектировать, ничтоже сумняшеся... ок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 12:54 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
BULK INSERT Yuri_ChВообще, я опасался, что будут замечания "так не делается". да, действительно, "так не делается". начинать нужно с формализации задачи, выяснения недостающих сведений и устранения противоречий а вы бросились схему БД проектировать, ничтоже сумняшеся... ок, начну с уточнения задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 12:56 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
Yuri_ChМожно поподробнее? Под алгоритмом планирования вы подразумеваете резервирование возможного маршрута полностью, исходя из его доступности в определенный момент времени? Вообще, такая задача не ставилась, но это может быть интересно. Надеюсь, препод не будет возражать против небольшой корректировки ТЗ. :)Алгоритм, который в качестве исходных данных имеет N кораблей, граф дорог, для каждого корабля начальную и целевую точки и в результате выдает маршрут и график движения всех кораблей. Только вряд ли это можно считать небольшой корректировкой. В общем случае задачка вычислительно трудная - кобинаторика же. Снизить комбинаторную сложность могут какие-то приоритеты, правила, чем больше тем лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 14:04 |
|
||
|
Хранить и анализировать маршрут на графе
|
|||
|---|---|---|---|
|
#18+
ModelRТолько вряд ли это можно считать. для построения графиков движения орграф должен быть взвешенным... должны быть тарированны расстояния между вершинами в графе и известна скорость кораблей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 15:07 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=124&tid=1544687]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 384ms |

| 0 / 0 |
