Файл: Методыискусственногоинтеллекта.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 07.11.2023

Просмотров: 458

Скачиваний: 22

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

170
Гл. 4. Интеллектуальные динамические системы
1. Для двух автомобилей, один из которых движется в ППЧ, а вто- рой в ПСлПЧ или ППЧ и поворачивает на перекрестке налево или едет прямо, конфликтной областью является область ППЧ.
2. Для двух автомобилей, один из которых движется по ПСпПЧ,
а второй по ППЧ или ППЧ и поворачивает на перекрестке налево или едет прямо, конфликтной областью является область ПСпПЧ.
3. Для двух автомобилей, один из которых движется по ВПЧ, а вто- рой по ППЧ, при этом:
• первый автомобиль поворачивает на перекрестке направо или едет прямо, а второй поворачивает налево, конфликтной областью является область ППЧ.
• первый автомобиль поворачивает на перекрестке налево,
а второй направо или едет прямо, то конфликтной областью является область ВПЧ;
• первый автомобиль поворачивает на перекрестке направо,
второй поворачивает налево, то у автомобилей две кон- фликтные области — это ППЧ и ВПЧ.
если зоны нет, то функция принимает пустое (или нулевое)
значение DangerZone(NameCar1, NameCar2) = Null.
Stop(NameCar1, DangerZone(NameCar1, NameCar2)) — агент определяет возможность собственной остановки до конфликтной обла- сти между ним и NameCar2.
Семантика: формула Can(Stop) может быть истинной или лож- ной в зависимости от того, сможет ли рассматриваемый автомобиль остановиться до конфликтной области с некоторым другим автомоби- лем, чтобы избежать столкновения. Для этого необходимо определить конфликтную область с помощью функции DangerZone, расстояние до нее и остановочный путь автомобиля при текущей скорости. Если остановочный путь автомобиля меньше расстояния до конфликтной области, то формула Can(Stop) принимает истинное значение, иначе —
ложное.
InFront (NameCar1) — автомобиль с идентификатором NameCar1
определяет нахождение и идентификатор другого автомобиля, движу- щегося впереди него на определенном расстоянии и c той же траекто- рией движения.
Семантика: функция принимает значение идентификатора авто- мобиля, находящегося впереди InFront(NameCar1) = NameCar2; если такого автомобиля нет, то значение функции — пустое (или нулевое)
InFront(NameCar1) = Null.
StopDis(NameCar) — автомобиль (агент) с идентификатором
NameCar определяет остановочный путь.

4.6. Примеры интеллектуальных динамических систем
171
Семантика: функция StopDis(Car) — автомобиль (агент) с иден- тификатором Car в зависимости от скорости определяет тормозной
(остановочный) путь по формуле:
StopDis =
(Speed)
2 2 · Acceleration
;
Результат работы функции — остановочный путь автомобиля в метрах.
1   ...   15   16   17   18   19   20   21   22   ...   33

MinDis(NameCar) — автомобиль (агент) с идентификатором
NameCar определяет минимальную дистанцию.
Семантика:
пусть автомобиль имеет идентификатор
Car:
MinDis(Car). В зависимости от своей скорости (от остановочного пути), автомобиль с идентификатором Car определяет минимальную дистанцию, которую он должен соблюдать по отношению к другому автомобилю, находящемуся на той же полосе ППЧ впереди него.
Функция рассчитывает дистанцию и формула Min(Dis(NameCar))
принимает истинное значение,
если дистанция соблюдена:
Dis(NameCar) = true, т. е. если StopDis(NameCar) < ∆(NameCar1,
NameCar2), где ∆(NameCar1, NameCar2) — расстояние между автомобилям; ложное значение в противном случае Dis(NameCar) =
false.
ρ
max(Lane) — агент определяет интенсивность движения на поло- се Lane ППЧ.
Семантика: функция
ρ(max(Lane)) принимает истинное значение при интенсивном движении, в противном случае — ложное значение.
Lane(Lane) — функция определяет, свободна ли полоса Lane для обгона.
Семантика: функция Free(Lane(Lane)) принимает истинное зна- чение, если полоса Lane свободна для обгона, и ложное значение в противном случае.
Vобг (NameCar1, NameCar2) — функция вычисляет диапазон скорости Vобг для обгона, учитывая скорость обгоняемого автомобиля.
Семантика: функция возвращает значение скорости, необходимой для обгона.
Vпер (NameCar1, NameCar2) — функция вычисляет диапазон скорости для перестроения.
Семантика: функция возвращает значение скорости, необходимой для перестроения Vпер, учитывая скорость автомобиля впереди и по- лосу, на которую нужно перестроиться.
Каждая пара автомобилей может находиться в одном из двух со- стояний: а) быть конфликтной парой (имеющей конфликтную область)
и б) быть неконфликтной парой.

172
Гл. 4. Интеллектуальные динамические системы
Ok(NameCar1, NameCar2) — ситуация для автомобилей с иденти- фикаторами NameCar1 и NameCar2 не является опасной.
Conflict(NameCar1, NameCar2) —
ситуация для автомобилей
NameCar1 и NameCar2 является опасной и может привести к столкно- вению.
Возникновение конфликта.
Для двух автомобилей, находящихся на перекрестке, конфликт возникает в том случае, если автомобили имеют конфликтную об- ласть. Конфликт является разрешимым, если возможно выполнение соответствующего для данной ситуации правила П
i
. Для разрешения конфликта нужно применить одно из правил переходов.
Правила переходов.
Stop(NameCar, where) — автомобиль с идентификатором NameCar останавливается в области «where».
Start(NameCar, where) — автомобиль с идентификатором
NameCar начинает движение в область «where».
Constant(NameCar) — автомобиль NameCar начинает движение c постоянной скоростью.
4.6.3. Замыкание состояний. Аксиомы. В рассматриваемой за- даче оказалось возможным ввести аксиомы предметной области, позво- ляющие в рамках каждого состояния находить множества удаляемых фактов, что делает излишним (в рамках STRIPS-допущения) мно- жество правил замыкания состояний. В частности, применяя внутри каждого состояния множество аксиом и правило вывода modus ponens,
можно вывести множество противоречащих фактам текущего состоя- ния формул и удалить их. (В дальнейшем там, где это не вызывает неоднозначности, круглые скобки будут опускаться.)
Аксиомы определения ускорения:
1. Stand(NameCar) → (¬SlowDown(NameCar)

¬SpeedUp(NameCar)

¬SteadySpeed(NameCar));
2. SteadySpeed(NameCar) → (¬SlowDown(NameCar)

¬SpeedUp(NameCar)

¬Stand(NameCar));
3. SpeedUp(NameCar) → (¬SlowDown(NameCar)

¬Stand(NameCar)

¬SteadySpeed(NameCar));
4. SlowDown(NameCar) → (¬Stand(NameCar)

¬SpeedUp(NameCar)

¬SteadySpeed(NameCar)).
Аксиомы определения конфликтности:
1. Ok(NameCar1, NameCar2) → ¬ Conflict(NameCar1, NameCar2);
2. Conflict(NameCar1, NameCar2) → ¬ Ok(NameCar1, NameCar2).
Аксиомы определения полос движения:
1. Аксиома определения полосы движения на однополосной дороге:
PRoad(NameCar, ППЧ, LLane, 1, — )↔ PRoad(NameCar, ППЧ,


4.6. Примеры интеллектуальных динамических систем
173
RLane, 1, — )↔PRoad(NameCar, ППЧ, MidLane, 1, — ) ↔ PRoad
(NameCar, ППЧ, —, 1, — ).
2. Аксиомы определения полосы движения на двухполосной дороге:
2.1. PRoad(NameCar, ППЧ, LLane, 2, — ) → ¬ (PRoad (NameCar,
ППЧ, RLane, 2 , —)∧ ¬PRoad (NameCar, ППЧ, MidLane,
2, —));
2.2. PRoad(NameCar, ППЧ, RLane, 2, — ) → ¬ (PRoad (NameCar,
ППЧ, LLane, 2 , — ));
2.3. PRoad(NameCar, ППЧ, MidLane, 2, — ) → ¬ (PRoad
(NameCar, ППЧ, RLane, 2 , —));
2.4. PRoad(NameCar, ППЧ, RLane, 2, — )↔ PRoad(NameCar,
ППЧ, MidLane, 2, — ).
3. Аксиомы определения полосы движения на трехполосной дороге:
3.1. PRoad(NameCar, ППЧ, LLane, 3, — ) → (¬PRoad (NameCar,
ППЧ, RLane, 3 , — , —) ∧ ¬PRoad (NameCar, ППЧ, MidLane,
3, —));
3.2. PRoad (NameCar, ППЧ, RLane, 3, — ) → (¬PRoad(NameCar,
ППЧ, LLane, 3 , —) ∧ ¬PRoad ( —, ППЧ, MidLane, 3 , — ));
3.3. PRoad (NameCar, ППЧ, MidLane, 3, —) → (¬PRoad
(NameCar, ППЧ, RLane, 3 , —) ∧ ¬PRoad (NameCar, ППЧ,
LLane, 3, —)).
Символ «—» означает, что переменная может принимать любое значе- ние из области определения.
Независимо от условий, автомобили при движении обязаны соблю- дать дистанцию, поэтому правило, приведенное ниже, является общим для всех задач.
Правила. Соблюдение дистанции.
Автомобилю следует тормозить, если его тормозной (остановочный)
путь больше, чем дистанция между ним и автомобилем впереди, нахо- дящимся на той же полосе движения.
Правило П0: Автомобилю сбавить скорость, если дистанция между ним и автомобилем, движущемуся по той же траектории, мень- ше необходимой минимальной дистанции между ними. Автомобилю продолжить движение с постоянной скоростью в противном случае:
Stop[MyCar]=h{PCar(MyCar,
—,
Course1,
—),
PRoad(MyCar,
Position1, Lane1, NumLane1, —), PCar(NameCar, —, Course1, —),
PRoad(NameCar, Position1, Lane1, NumLane1, —), InFront(MyCar) =
NameCar, MinDis(MyCar)=false},
{SlowDown(MyCar), Conflict(MyCar, NameCar), DangerZone(MyCar,
NameCar)},
{Axiom}i
Constant[MyCar]=h{PCar(MyCar, —, Course1, —), PRoad(MyCar,

174
Гл. 4. Интеллектуальные динамические системы
Position1, Lane1, NumLane1, —), PCar(NameCar, —, Course1, —),
PRoad(NameCar, Position1, Lane1, NumLane1, —), InFront(MyCar) =
NameCar, MinDis(MyCar)=true},
{SteadySpeed(MyCar), Conflict(MyCar, NameCar), DangerZone(MyCar,
NameCar)},
{Axiom}i
Примечание. Для однополосного движения полосы движения все- гда совпадают при одинаковых траекториях.
4.6.4. Крестообразный перекресток равнозначных однополос-
ных дорог. Для проезда перекрестка равнозначных дорог применяют- ся правила дорожного движения 13.11, 13.12:
ПДД 13.11. На перекрестке равнозначных дорог водитель без-
рельсового транспортного средства обязан уступить дорогу транс-
портным средствам, приближающимся справа. Этим же правилом
должны руководствоваться между собой водители трамваев.
На таких перекрестках трамвай имеет преимущество перед
безрельсовыми транспортными средствами независимо от направ-
ления его движения.
ПДД 13.12. При повороте налево или развороте водитель
безрельсового транспортного средства обязан уступить дорогу
транспортным средствам, движущимся по равнозначной дороге со
встречного направления прямо или направо. Этим же правилом
должны руководствоваться между собой водители трамваев.
Правила переходов в соответствии с ПДД.
Основной задачей является построение модели движения автомо- билей согласно правилам дорожного движения для предперекрестной области (положение автомобиля вне перекрестка (пересечения дорог),
по введенному ранее разбиению — это попутная, прилегающая сле-
ва, прилегающая справа и встречная проезжая части). Каждый участник движения (агент) считает, что находится в попутной обла- сти проезжей части (обозначено ППЧ). Для каждого агента вводится собственный идентификатор. Будем считать, что слово «находится»
означает то, что автомобиль может ехать, а может и стоять в указанной области, в отличие от слов «едет» или «движется». Запишем правила движения.
Правило П1: Автомобилю пропустить другой автомобиль (остано- виться в прилегающей к ППЧ части перекрестка (ППЧ) или проехать перекресток, не останавливаясь на нем), если на перекрестке он едет прямо или поворачивает налево, а любой другой автомобиль едет в области ПСпПЧ;
Наибольший приоритет, из соображений безопасности, имеет
правило выполнения команды «остановиться».


4.6. Примеры интеллектуальных динамических систем
175
Stop[MyCar, ППЧ] = h{PCar (MyCar, —, (St or L), —), PRoad
(MyCar, ППЧ, —, 1, ×), PRoad (NameCar, ПСпПЧ, —, —, ×),
CanStop(MyCar, DangerZone(MyCar, NameCar))}, {SlowDown (MyCar),
Conflict(MyCar, NameCar), DangerZone(MyCar, NameCar)}, {Axiom}i
Разъясним запись правила. Согласно введенным обозначениям:
• PCar (MyCar, —, (St or L), —): «автомобиль с идентификатором
MyCar на перекрестке едет прямо или поворачивает налево»;
• PRoad (MyCar, ППЧ, —, 1, ×): «автомобиль с идентификатором
MyCar находится в ППЧ, имеющей одну полосу движения, отно- сящейся к пересечению равнозначных дорог»;
• CanStop(MyCar, DangerZone(MyCar, NameCar)): «автомобиль с идентификатором MyCar может остановиться перед конфликт- ной областью между ним и автомобилем с идентификатором
NameCar»;
• SlowDown (MyCar): «автомобиль с идентификатором MyCar тор- мозит»;
• Conflict(MyCar, NameCar): «существует конфликт между автомо- билем с идентификатором MyCar и автомобилем с идентифика- тором NameCar»;
• DangerZone(MyCar, NameCar): «существует и определена кон- фликтная область между автомобилем с идентификатором MyCar и автомобилем с идентификатором NameCar»;
• Axiom — удаление фактов с помощью подходящих аксиом пред- метной области.
Аналогично понимаются все остальные правила.
Наименьший приоритет имеет правило с командой «начать
движение» (или «продолжить», если не было остановки).
Start[MyCar, ППЧ] = h{PCar(MyCar, —, (St or L), — ),
PRoad(MyCar, (ППЧ or ППЧ), —, 1, ×), PRoad(NameCar, ПСпПЧ,
—, 1, ×), CanPass(MyCar, NameCar), ¬InFront }, {SpeedUp(MyCar,
Vmax), Conflict(MyCar, NameCar), DangerZone(MyCar, NameCar)},
{Axiom}i.
Правило П2: Автомобилю, поворачивающему на перекрестке нале- во, пропустить автомобиль, движущийся по ВПЧ.
Наибольший приоритет
Stop[MyCar, ПСпПЧ] = h{PCar (MyCar, — , L, —), PRoad (MyCar,
ППЧ, —, 1, ×), PRoad (NameCar, ВПЧ, —, 1, ×), CanStop(MyCar,
DangerZone(MyCar, NameCar)) }, {SlowDown(MyCar), Conflict(MyCar,
NameCar), DangerZone(MyCar, NameCar)}, {Axiom}i.
Наименьший приоритет
Start[MyCar, ПСлПЧ] = h{PCar (MyCar, — , L, —), PRoad (MyCar,
ППЧ, —, 1, ×), PRoad (NameCar, ВПЧ, —, 1, ×), CanPass(MyCar,

176
Гл. 4. Интеллектуальные динамические системы
NameCar), ¬InFront (MyCar)}, {SpeedUp(MyCar, Vmax(MyCar)),
Conflict(MyCar, NameCar), DangerZone(MyCar, NameCar)}, {Axiom}i.
В остальных случаях (не применимо ни одно из правил) следует продолжать движение.
Правила переходов «по взаимной договоренности».
Дополнительной задачей считаем дополнительную к основной мо- дель поведения автомобилей, правила для которой не указанны в ПДД,
но которая позволяет избежать столкновения автомобилей. Так же как и в основной задаче, считаем, что рассматриваемый автомобиль находится в попутной области проезжей части и имеет некоторый идентификатор MyCar.
Правило П3: Автомобилю остановиться в ППЧ, если любой дру- гой автомобиль едет в ПСлПЧ, на перекрестке движется прямо или поворачивает налево и имеет скорость, которая не позволяет ему оста- новиться.
Stop[MyCar, ППЧ] = h{PRoad(MyCar, ППЧ, —, 1, ×),
PRoad(NameCar, ПСлПЧ, —, 1, ×), PCar(NameCar, —, (St or L), —),
+CanStop[NameCar, DangerZone(NameCar, MyCar)], CanStop(MyCar,
DangerZone(MyCar, NameCar)) }, {SlowDown (MyCar), Conflict
(MyCar, NameCar), DangerZone(MyCar, NameCar)}, {Axiom}i.
Следующее правило не является правилом для предотвращения столкновения, оно позволяет избежать остановки всех автомобилей при неопределенной ситуации. Напомним, неопределенная ситуация возни- кает в случае, когда автомобили движутся по встречным направлениям и оба поворачивают на перекрестке налево.
Правило П4: Автомобилю тормозить (сбавить скорость) в ППЧ
или ПСпПЧ, если он поворачивает налево, а любой другой автомо- биль едет в ВПЧ и тоже поворачивает налево.
Stop[MyCar] = h{PCar(MyCar, —, L, —), PRoad(MyCar, (ППЧ
or ПСпПЧ), —, 1, ×), PCar(NameCar, —, L, —), PRoad(NameCar,
ВПЧ, —, 1, ×)}, {SlowDown(MyCar), Conflict(MyCar, NameCar),
DangerZone(MyCar, NameCar)}, {Axiom}i.
В остальных случаях следует продолжать движение.
Правила переходов для области пересечения дорог.
Считаем, что автомобиль двигался по ППЧ и в рассматриваемый момент находится в ППЧ.
Правило П5: Автомобилю остановиться в ППЧ, если он в ППЧ
едет прямо или поворачивает налево, а любой другой автомобиль находится в области ПСпПЧ.
Stop[MyCar, ППЧ] = h{PRoad(MyCar, ППЧ, —, 1, ×),
PCar(MyCar, —, (St or L), —), PRoad(NameCar, ПСпПЧ, —, 1, ×)},


4.6. Примеры интеллектуальных динамических систем
177
{SlowDown(MyCar), Conflict(MyCar, NameCar), DangerZone(MyCar,
NameCar)}, {Axiom}i.
Правило П6: Автомобилю остановиться в области ПСпПЧ, если он поворачивает налево, а любой другой автомобиль находится в обла- сти ВПЧ или едет в ВПЧ;
Stop[MyCar, ПСпПЧ] = h{PCar(MyCar, —, L, —), PRoad(MyCar,
(ППЧ or ПСпПЧ), —, 1, ×), PRoad(NameCar2, (ВПЧor
ВПЧ), —, 1, ×)}, {SlowDown(MyCar), Conflict (MyCar, NameCar),
DangerZone(MyCar, NameCar)}, {Axiom}i;
Start[MyCar, ПСлПЧ] = h{PCar(MyCar, —, L, —), PRoad(MyCar,
(ППЧ or ПСпПЧ), —, 1, ×), PRoad (NameCar, ВПЧ, —,
1, ×), CanPass(MyCar, NameCar)=true, InFront(MyCar)=false)},
{SpeedUp(MyCar,
Vmax(MyCar)),
Conflict
(MyCar,
NameCar),
DangerZone(MyCar, NameCar)}, {Axiom}i;
Start[MyCar, ПСпПЧ] = h{PCar (MyCar, V0, — , (L or
St)), PRoad(MyCar, ППЧ, —, 1, ×), PCar(NameCar, (ВПЧor
ВПЧ), —, — , L), PRoad(NameCar, (ВПЧor ВПЧ), —, 1, ×)},
{SpeedUp(MyCar, Vmax(MyCar)), Brake(NameCar), Conflict(MyCar,
NameCar), DangerZone(MyCar, NameCar)}, {Axiom}i.
Правила переходов при выезде c перекрестка.
Start[MyCar] = h{PCar (MyCar, —, — , St), PRoad(MyCar, ПСпПЧ,
—, 1, ×), InFront(MyCar)=false }, {SpeedUp(MyCar, Vmax(MyCar)},
{Axiom}i;
Start[MyCar] = h{PCar (MyCar, —, — , L), PRoad(MyCar, ПСлПЧ,
—, 1, ×), InFront(MyCar)=false }, {SpeedUp(MyCar, Vmax(MyCar)},
{Axiom}i;
Start[MyCar] = h{PCar (MyCar, —, — , R), PRoad(MyCar, ППЧ,
—, 1, ×), InFront(MyCar)=false }, {SpeedUp(MyCar, Vmax(MyCar)},
{Axiom}i.
4.6.5. Движение по попутной проезжей части.
Рассмотрим движение автомобиля по двух- и трехполосной попутной проезжей части.
Правила перестроения, опережения и обгона транспортных
средств.
Перестроение.
Ппер: Автомобилю перестроиться на соседнюю полосу движения
• перед перекрестком в соответствии с дальнейшей траекторией на перекрестке;
• на дороге: правее — при свободной правой полосе;

178
Гл. 4. Интеллектуальные динамические системы
• на дороге: левее — при плотном движении на правой полосе
(если есть такая полоса), плотном движении на своей полосе и свободной левой полосе.
Движение по ППЧ
Start[MyCar, (ППЧ, MidLane)] = h{PCar(MyCar, Vпер, St, —),
PRoad(MyCar, ППЧ, RLane, (2 or 3), —), FreeLane(MidLane),
ρmax(RLane)} , {PRoad (MyCar, ППЧ, MidLane, (2 or 3), —)}, {Axiom}i;
Start[MyCar, (ППЧ, LLane)] = h{PCar(MyCar, Vпер, St, —),
PRoad(MyCar, ППЧ, MidLane, (2 or 3), —), FreeLane(LLane),
ρmax(RLane), ρmax(MidLane)} , {PRoad (MyCar, ППЧ, LLane, (2 or 3),
–)}, {Axiom}i.
Автомобилю повернуть на перекрестке налево.
При трехполосном движении автомобиль перед перекрестком для поворота на нем налево сначала перестраивается с крайней правой полосы на среднюю полосу:
Start[MyCar, (ППЧ, MidLane)] = h{PCar(MyCar, —, L, —),
PRoad(MyCar, ППЧ, RLane, 3, —), FreeLane(MidLane)}, {PRoad
(MyCar, ППЧ, MidLane, 3, —)}, {Axiom}i.
затем на крайнюю левую полосу движения:
Start[MyCar, (ППЧ,
LLane)] = h{PCar(MyCar, —, L, —),
PRoad(MyCar, ППЧ, MidLane, 3, —), FreeLane(LLane)}, {PRoad
(MyCar, ППЧ, LLane, 3, —)}, {Axiom}i.
Для двух полос:
Start[MyCar, (ППЧ,
LLane)] = h{PCar(MyCar, —, L, —),
PRoad(MyCar, ППЧ, RLane, 2, —), FreeLane(LLane)}, {PRoad (MyCar,
ППЧ, LLane, 2, —)}, {Axiom}i.
Автомобиль поворачивает на перекрестке направо или движется прямо.
При трехполосном движении автомобиль с крайней левой полосы сначала перестраивается на среднюю полосу:
Start[MyCar, (ППЧ, MidLane)] = h{PCar(MyCar, —, (R or St),
—), PRoad(MyCar, ППЧ, LLane, 3, —), FreeLane(MidLane)}, {PRoad
(MyCar, ППЧ, MidLane, 3, —)}, {Axiom}i.
Затем на правую полосу (при повороте направо):
Start[MyCar, (ППЧ, RLane)] = h{PCar(MyCar, —, R, —),
PRoad(MyCar, ППЧ, MidLane, 3, —), FreeLane(RLane)}, {PRoad(MyCar,
ППЧ, RLane, 3, —)}, {Axiom }i.
Для двух полос:
Start[MyCar, (ППЧ, RLane)] = h{PCar(MyCar, —, (R or St), —),
PRoad(MyCar, ППЧ, LLane, 2, —), FreeLane(RLane)}, { PRoad (MyCar,
ППЧ, RLane, 2, —)}, {Axiom}i.