Трехсторонняя дуэль
Оглавление
Трехсторонняя дуэль
Страница 2
Страница 3
Страница 1 из 3
А теперь автор представляет на суд читателя еще одну свою любимую
"статистическую" задачу — задачу о трехсторонней дуэли. Вот ее условия.
Сэм, Билл и Джон договорились сразиться на дуэли втроем по следующим
правилам:
- жеребьевка определяет, кто стреляет первым, вторым и третьим;
- дуэлянты располагаются на одинаковых расстояниях друг от друга (по ' углам
равностороннего треугольника);
- обмениваются выстрелами по очереди, определенной жребием, пока двое не
будут убиты;
- очередной стреляющий может стрелять в любого из живых.
Известно, что Сэм — снайпер и никогда не промахивается с данной дистанции,
Билл поражает мишень в 80% случаев, а Джон — в 50%. Какова наилучшая стратегия
для каждого из участников и каковы вероятности их выживания, если они следуют
оптимальным стратегиям?
В этой дуэли у Сэма и Билла могут быть две тактики поведения. Нулевая — это
когда стреляющий ничего не знает о меткости соперников и целит в первого
подвернувшегося. Первая — когда дуэлянту известно о том, кто как стреляет, и он
метит в соперника с наивысшими стрелковыми качествами в надежде остаться tete-a-
tete с наихудшим стрелком.
Джон может следовать и второй тактике. Чтобы получить наивысшие шансы выйти
победителем из дуэли, он должен намеренно стрелять в воздух, пока двое его
соперников живы. Ведь очередной стреляющий будет бить не в него, а в более
меткого противника. После того как Сэм или Билл будет убит, Джон должен показать
все, на что он способен. В такой ситуации его шансы выжить составляют 50%, если
он остался наедине с Сэмом, и еще больше — если с Биллом.
Участник дуэли, прежде чем выстрелить, должен, во-первых, определить самого
меткого соперника, в которого нужно стрелять, руководствуясь первой тактикой
поведения. Для этого предназначена функция Самый_меткий (см. пункт 2 на рис.
4.21), возвращающая номер противника с наивысшими стрелковыми качествами. В ней
перебором всех участников дуэли (цикл for) учитываются, естественно, только
живые противники (Статус Цель="жив") и не сам стреляющий (Цель=Стрелок).
Участник дуэли, придерживающийся второй (хитрой) тактики, перед выстрелом в
цель или перед намеренным промахом должен пересчитать противников, стреляющих
лучше его. Эту работу выполняет функция Меткие. В нее заложен такой же алгоритм
перебора противников, как и в функцию Са-мый_меткий. Функции самый_меткий и
меткие в качестве аргументов имеют вектор меткость, вектор Статус и скаляр стрелок. Функции при своей работе
вызывают логическую функцию And (логическое И — см. пункт 1) с
аргументом-вектором, которая возвращает 0 (логическое отрицание), если хотя бы
один из элементов вектора (аргумента) равен нулю.
![](../../../../pic/mcad14/tmp3A88-244.jpg)
Рис. 4.21. Трехсторонняя дуэль — функции пользователя
Функция победитель (пункт 3 на рис. 4.22) возвращает номер победителя в
одиночной дуэли. При этом учитывается меткость и тактика каждого участника дуэли
(два вектора-аргумента функции победитель).
Рис. 4.22. Трехсторонняя дуэль — моделирование одиночной дуэли и серии
дуэлей
Пред. - След. »