Самая спорная программа флота США
Еще в прошлом году американские военные признали провал американской программы прибрежных боевых кораблей LCS (Littoral Combat Ship).
Об этом сообщает издание Task https://masterok.livejournal.com/5318350.html» target=»_blank»]masterok.livejournal.com[/mask_link]
Программа lcs что это
О легкомысленности украинских граждан и удивительной замутненности их сознания уже ходят легенды.
Вам не кажется, читатель, что Запад начинает впадать в форменную истерику? Только два факта.
До последнего времени в США регулярно проходило увеличение лимита по госдолгу, партия действующего
Попытка США усилить свой флот
Да, мы пришли за своими. Не столько за землями, сколько за своими людьми. Русскими и не только.
Добрый день, дорогие коллеги по агрессивной агрессии и авторитарному авторитаризму. Когда недавно в
Добавить новость в:
Еще в прошлом году американские военные признали провал американской программы прибрежных боевых кораблей LCS (Littoral Combat Ship).
Об этом сообщает издание Task https://politinform.su/106220-samaya-spornaya-programma-flota-ssha.html» target=»_blank»]politinform.su[/mask_link]
Нахождение максимальной общей подпоследовательности
В настоящей статье я хотел бы сделать обзор популярных алгоритмов для решения задачи нахождения максимальной общей подпоследовательности или LCS (longest common sequense). Так как акцент сделан на обучении, а не на реальном использовании, в качестве языка для реализации выбран Python, что позволит сократить количество кода и сконцентрироваться на основных идеях.
Определения
Последовательность представляет собой упорядоченный набор элементов. Строка — это частный случай последовательности, дальнейшие примеры будут для простоты рассматривать именно строки, но без изменений их можно использовать и для произвольного текста или чего-нибудь последовательного еще.
Пусть имеется последовательность x, состоящая из элементов x1x2. xm и последовательность y, состоящая из элементов y1y2. yn. z — подпоследовательность x в том случае, если существует строго возрастающий набор индексов элементов x, из которых получается z.
Общей подпоследовательностью для x и y считаем такую последовательность z, которая является одновременно подпоследовательностью x и подпоследовательностью y.
Максимальная общая подпоследовательность — это общая подпоследовательность с максимальной длинной. Далее по тексту будем использовать сокращение LCS.
LocalCoinSwap (LCS) — P2P площадка для торговли криптовалютами
В качестве примера, пусть x=HABRAHABR, y=HARBOUR, в этом случае LCS(x, y)=HARBR. Можно уже переходить непосредственно к алгоритму вычисления LCS, но, хорошо бы понять, для чего нам может это может понадобиться.
Применение на практике
Наиболее частое применение — использование в программах для сравнения файлов, например GNU diff. Имея найденную для двух текстов LCS, составить список элементарных изменений для превращения x в y или обратно задача тривиальная. В качестве бонуса, на основе длины общей подпоследовательности можно задать метрику для определения схожести двух последовательностей. Все, теперь точно можно переходить к делу.
Первый подход или народное творчество
- Если для последовательностей x и y нами уже вычислена LCS(x, y)=z, то, LCS для последовательностей полученных из x и y путем добавления одинакового элемента, будет состоять из z и этого добавленного элемента
- Если мы добавим к последовательностям x и y по одному разному элементу, то для полученных таким образом xa и yb, LCS должна быть большая из двух: LCS(x,yb) или LCS(xa,y)
def LCS_RECURSIVE(x, y): if len(x) == 0 or len(y) == 0: return [] if x[-1] == y[-1]: return LCS_RECURSIVE(x[:-1], y[:-1]) + [x[-1]] else: left = LCS_RECURSIVE(x[:-1], y) right = LCS_RECURSIVE(x, y[:-1]) return left if len(left) > len(right) else right
Теперь можно подумать, что с этой реализацией не так. В наихудшем случае, когда между x и y нет одинаковых элементов LCS_RECURSIVE вызовется 2 len(x)+len(y) раз, при уровне рекурсии len(x)+len(y). Даже если закрыть глаза на производительность, код:
from uuid import uuid4 x = [uuid4().hex for _ in xrange(500)] y = [uuid4().hex for _ in xrange(500)] print LCS_RECURSIVE(x,y)
без дополнительного вызова sys.setrecursionlimit удачно не выполнится. Не самая удачная реализация.
Динамическое программирование или 64 кб хватит всем
Рассматриваемый алгоритм также известен как алгоритм Нидлмана—Вунша (Needleman-Wunsch).
Весь подход сводится к поэтапному заполнению матрицы, где строки представляют собой элементы x, а колонки элементы y. При заполнении действуют два правила, вытекающие из уже сделанных наблюдений:
1. Если элемент xi равен yj то в ячейке (i,j) записывается значение ячейки (i-1,j-1) с добавлением единицы
2. Если элемент xi не равен yj то в ячейку (i,j) записывается максимум из значений(i-1,j) и (i,j-1).
Заполнение происходит в двойном цикле по i и j с увеличением значений на единицу, таким образом на каждой итерации нужные на этом шаге значения ячеек уже вычислены:
def fill_dyn_matrix(x, y): L = [[0]*(len(y)+1) for _ in xrange(len(x)+1)] for x_i,x_elem in enumerate(x): for y_i,y_elem in enumerate(y): if x_elem == y_elem: L[x_i][y_i] = L[x_i-1][y_i-1] + 1 else: L[x_i][y_i] = max((L[x_i][y_i-1],L[x_i-1][y_i])) return L
Ячейки, в которых непосредственно происходило увеличение значения подсвечены. После заполнения матрицы, соединив эти ячейки, мы получим искомый LCS. Соединять при этом нужно двигаясь от максимальных индексов к минимальным, если ячейка подсвечена, то добавляем соответствующий элемент к LCS, если нет, то двигаемся вверх или влево в зависимости от того где находится большее значение в матрице:
def LCS_DYN(x, y): L = fill_dyn_matrix(x, y) LCS = [] x_i,y_i = len(x)-1,len(y)-1 while x_i >= 0 and y_i >= 0: if x[x_i] == y[y_i]: LCS.append(x[x_i]) x_i, y_i = x_i-1, y_i-1 elif L[x_i-1][y_i] > L[x_i][y_i-1]: x_i -= 1 else: y_i -= 1 LCS.reverse() return LCS
Сложность алогоритма — O(len(x)*len(y)), такая же оценка по памяти. Таким образом, если я захочу построчно сравнить два файла из 100000 строк, то нужно будет хранить в памяти матрицу из 10 10 элементов. Т.е. реальное использование грозит получением MemoryError почти на ровном месте. Перед тем как перейти к следующему алгоритму заметим, что при заполнении матрицы L на каждой итерации по элементам x нам нужна только строка, полученная на предыщем ходу. Т.е. если бы задача ограничивалась только нахождением длины LCS без необходимости вычисления самой LCS, то можно было бы снизить использование памяти до O(len(y)), сохраняя одновременно только две строки матрицы L.
Борьба за место или Алгоритм Хишберга (Hirschberg)
Идея в основе этого алгоритма проста: если разделить входную последовательность x=x1x2. xm на две произвольные части по любому граничному индексу i на xb=x1x2. xi и xe=xi+1xi+2. xm, то найдется способ аналогичного разбиения y (найдется такой индекс j, разбивающий y на yb=y1y2. yj и ye=yj+1yj+2. yn), такой, что LCS(x,y) = LCS(xb,yb) + LCS(xe,ye).
Для того, чтобы найти это разбиение y предлагается:
- Заполнить динамическую матрицу L с помощью fill_dyn_matrix для xs и y. L1 приравняем последней строке вычисленной матрицы L
- Заполнить матрицу L для *xe и *y (обратные последовательности для xe и y, в терминах Python: list(reversed(x)), list(reversed(y))). Приравняем *L2 последнюю строку вычисленной матрицы L, L2 это риверс от *L2
- Принять j равным индексу, для которого сумма L1[j]+L2[j] максимальна
Это можно представить, как заполнение матрицы L с двух противоположных концов:
Заметим, что раз есть необходимость только в последней строке матрицы L, то при вычислении хранить всю матрицу не нужно. Немного изменив реализацию fill_dyn_matrix получим:
def lcs_length(x, y): curr = [0]*(1 + len(y)) for x_elem in x: prev = curr[:] for y_i, y_elem in enumerate(y): if x_elem == y_elem: curr[y_i + 1] = prev[y_i] + 1 else: curr[y_i + 1] = max(curr[y_i], prev[y_i + 1]) return curr
Теперь непосредственно, о самом алгоритме. Он представляет собой классический divide and conquer: пока в последовательности x есть элементы, мы делим x пополам, находим подходящее разбиение для y и возвращаем сумму рекурсивных вызовов для пар последовательностей (xb,yb) и (xe,ye). Заметим, что в тривиальном случае, если x состоит из одного элемента и встречается в y мы просто возвращаем последовательность из этого единственного элемента x.
def LCS_HIRSHBERG(x, y): x_len = len(x) if x_len == 0: return [] elif x_len == 1: if x[0] in y: return [x[0]] else: return [] else: i = x_len // 2 xb, xe = x[:i], x[i:] L1 = lcs_length(xb, y) L2 = reversed(lcs_length(xe[::-1], y[::-1])) SUM = (l1 + l2 for l1,l2 in itertools.izip(L1, L2)) _, j = max((sum_val, sum_i) for sum_i, sum_val in enumerate(SUM)) yb, ye = y[:j], y[j:] return LCS_HIRSHBERG(xb, yb) + LCS_HIRSHBERG(xe, ye)
Теперь требования по памяти у нас O(len(y)), время, необходимое для вычисления, удвоилось, но асимптотически по-прежнему O(len(x)len(y)).
Алгоритм Ханта-Шуманского (Hunt-Szymanski Algorithm)
Первое что нам потребуется это создание хэш таблицы matchlist, которая будет содержать индексы элементов второй последовательностей. Время необходимое для этого O(len(y)). Следующий код на питоне делает это:
y_matchlist = <> for index, elem in enumerate(y): indexes = y_matchlist.setdefault(elem, []) indexes.append(index) y_matchlist[elem] = indexes
x_length, y_length = len(x), len(y) min_length = min(x_length, y_length) THRESH = list(itertools.repeat(y_length, min_length+1)) LINK_s1 = list(itertools.repeat(None, min_length+1)) LINK_s2 = list(itertools.repeat(None, min_length+1)) THRESH[0], t = -1, 0 for x_index,x_elem in enumerate(x): y_indexes = y_matchlist.get(x_elem, []) for y_index in reversed(y_indexes): k_start = bisect.bisect_left(THRESH, y_index, 1, t) k_end = bisect.bisect_right(THRESH, y_index, k_start, t) for k in xrange(k_start, k_end+2): if THRESH[k-1] < y_index and y_index < THRESH[k]: THRESH[k] = y_index LINK_x[k] = (x_index, LINK_x[k-1]) if k >t: t = k
После этого нам остается только собрать из LINK_x саму последовательность.
Время работы этого алгоритма равно O((r + n) log n), где n — длина большей последовательности, а r — количество совпадений, в худшем случае при r = n*n, мы получаем время работы хуже чем в предыдущем варианте решения. Требования по памяти остаются порядка O(r+n).
Итого
Алгоритмов решающих данную проблему довольно много, асимптотически, самый эффективный алгоритм (Masek and Paterson) имеет оценку по времени O(n*n/log n). Учитывая общую небольшую эффективность при вычислениях LCS, на практике перед работой алгоритма выполняются простейшие подготовки, вроде отбрасывания одинаковых элементов в начале и в конце последовательностей и поиск тривиальных отличий между последовательностями. Также, существуют некоторые оптимизации с использованием битовых операций, не влияющие на асимптотику времени работы.
скачать весь код с примерами
Источник: habr.com
Литоральные корабли. Теория, критика, реальность LCS
Новейший военно-морской боевой корабль ВМС США, будущий USS Billings (LCS 15), прибыл на военно-морскую базу Ки-Уэст в Трумэн-Харбор, чтобы подготовиться к церемонии ввода в эксплуатацию 3 августа.
USS Billings (LCS 15) — 17-й боевой корабль, входящий в состав ВМФ США и восьмой вариант судна класса Freedom. Корабль назван в честь Биллингса (Billings), крупнейшего города в американском штате Монтана. Спонсором USS Billings является Шарла Д. Тестер, жена сенатора Джона Тестера.
Новейший военно-морской боевой корабль ВМС США, будущий USS Billings (LCS 15), прибыл на военно-морскую станцию Ки-Уэст в Трумэн-Харбор, чтобы подготовиться к церемонии ввода в эксплуатацию 3 августа.
Littoral Combat Ship
USS Billings относится к так называемым литоральным боевым кораблям, или Littoral Combat Ship. Они призваны действовать в прибрежных районах, обеспечивая безопасность судоходства как у побережья США, так и в других стратегически важных регионах. Американский флот имеет два типа LCS с существенными конструктивными отличиями — Freedom и Independence.
USS Billings (LCS 15). 17-й боевой корабль, входящий в состав ВМФ США и восьмой вариант судна класса Freedom.
«Крещение будущего USS Billings уже близко. Этот грандиозный военный корабль в одном шаге от присоединения к флоту, где он в течение десятилетий послужит данью уважения великим людям Биллингса и штата Монтана», — сказал помощник главы военно-морского ведомства США Шон Стэкли.
На сегодняшний день линейка LCS включает два класса кораблей — Freedom и Independence. Первый представляет собой быстроходный монокорпусный корабль, разработанный Lockheed Martin. Второй — тримаран (трехкорпусный корабль) от компании General Dynamics. С 2006 года на воду спущено 15 таких кораблей. Корабли данного типа могут достигать скорости 45 узлов и проходить без дозаправки более 3500 морских миль.
Литоральные корабли. В теории и на бумаге
Корабли предназначены для борьбы с наземными силами, для разведки и спасательных миссий, доставки десанта и транспортировки грузов. Основной их особенностью является то, что эти корабли имеют модульную конструкцию. На них, при необходимости, можно легко «навесить» различное вооружение и противолодочные или противоминные системы.
Конструкция корабля основана на принципе plug-and-play («включай и пользуйся»).
Модульность выглядит заманчиво. На картинках.
Корабль имеет два сменных экипажа (Gold и Blue), численностью по 40 человек каждый. Кроме того, к ним прибавляются личный состав обслуживания авиагруппы и комплексов специального вооружения, так что общая численность смены составляет около 75 человек.
Высокая степень автоматизации позволяет кораблю обходиться меньшим экипажем, хотя нагрузка на каждого члена экипажа все равно возрастает.
Модуль с пушкой. Обратите внимание, сколько пустого места в модуле. Этот объём будет «стоить» десятки тонн водоизмещения.
Основные ТТХ литоральных боевых кораблей ВМС США.
Итак, модульность
На бумаге все выглядело просто: в зависимости от предстоящих задач с кораблей должны были быть сняты ненужные устройства и установлены требуемые. Например, если предстояло столкнуться с минами, LCS оснащают набором сонаров, противоминными плавающими и летающими дронами, системой лазерного разминирования.
Поддержка наземных войск? За 120 часов тот же самый LCS получает пару ударных вертолётов, кубрики под морпехов и набор десантных средств.
ЗРК самообороны SeaRAM установленный на корабле LCS «Independence».
Всего было разработано четыре взаимозаменяемых модуля: противолодочный, противоминный, для поддержки наземных операций и для поддержки специальных операций.
Ещё в ходе строительства программу LCS настигли серьёзные проблемы. Она не укладывалась в бюджет — стоимость кораблей росла почти каждый день. Не помогали уменьшение требований и упрощение конструкции будущих модулей. Так боевые единицы потеряли десять узлов скорости и почти все (и так-то небогатые) противовоздушные возможности.
Кроме того, прибрежные корабли никак не вписывались в уже существующую концепцию морских сил. Они не были адаптированы под взаимодействие с главными звёздами американского флота — авианосцами — или с их свитой.
Схема LCS «Independence».
Половина же продвинутых технологий просто не работала, ещё часть работала не так, как надо. К заменяемости модулей также возникли вопросы. Помимо того, что замена оказалась существенно более трудоёмкой, чем поначалу планировали, были проблемы и с обучением экипажей. Моряки не могли в равной степени хорошо владеть сразу четырьмя различными системами вооружений, что вынуждало или иметь на LCS «избыточный» экипаж, или же при замене модулей менять и часть команды — внося разлад в сложившийся коллектив.
Ломать копья продолжают
Сколько существует проект литоральных кораблей, столько и ведуться споры вокруг них. Типовые модули должны были устанавливаться в слоты и подключаться к кораблю за считанные часы, а полностью боеготовность корабля должна была восстанавливаться в течение сорока восьми часов.
Согласно последним данным, при необходимости заменить модуль, корабль, с учётом времени на переход в базу и назад, смену экипажа, доставку модуля и его монтаж, выбывает из боевых действий на срок от 12 до 29 дней.
Так же, данный тип кораблей имеет недостаточное количество радаров и ограниченные возможности защиты от противокорабельных ракет. В случае мощного удара у них нет защитного механизма, позволяющего снизить ущерб.
LCS «Freedom».
Если обобщить все претензии к LCS, то получим, что:
- Замена модуля на модуль с другим оружием или оборудованием очень сложный в исполнении процесс. Модули надо правильно хранить, для них должны быть экипажи или расчёты, их надо как-то тренировать, пока корабли в море с другими модулями, это стоит денег.
- Противник не даст менять модули в бою. Корабль будет воевать с тем, что на него установлено.
- Смысл модульности в правильном варианте не в том, чтобы варьировать оружие и оборудование на корабле, а в том, чтобы его легче было модернизировать, когда придёт время.
- Модули «опаздывают» – корабли для них готовы раньше, чем они сами.
- Литоральные корабли конструктивно не приспособлены к выживанию в зоне боевых действий и не способны пройти стандартные испытания USN на живучесть.
Пока же
Несмотря на критику проекта LCS, как мы писали выше, очередной боевой литоральный корабль ВМС США USS Billings (LCS 15) готовится к предстоящей церемонии ввода в эксплуатацию. Об этом сообщает Defence blog.
Спонсором USS Billings (LCS 15) выступает Шарла Тестер, жена сенатора из Монтаны Джона Тестера, высокопоставленного члена комитета по делам ветеранов Сената.
Источник: naukatehnika.com
Судьба LCS
После долгих метаний и разбирательств, ВМФ США, наконец, определился, что делать с литторальными боевыми кораблями (Littoral Combat Ships — LCS).
Зародившаяся в эпоху «Pax America» начала 2000-ых, программа LCS исходила из того, что в обозримом будущем флоту США не придется иметь дело со сравнимыми противниками, и основными задачами будет борьба против инсургентов и враждебных государств третьего мира. Литторальные боевые корабли должны были стать новой итерацией колониальных канонерок: небольшие, многофункциональные платформы для действий малой интенсивности в прибрежных районах. Основная ставка была сделана на универсальность за счет применения модульной архитектуры — предполагалось, что LCS смогут играть роль тральщиков, эскортных кораблей, быстроходных десантных транспортов и борцов с легкими единицами противника за счет использования быстрозаменяемых функциональных модулей.
Результаты, впрочем, оказались далеки от ожидаемых. Программу с самого начала преследовали технические сложности и задержки, а также быстрый рост стоимости. Ключевая ставка на модульность оказалась в итоге несостоятельной: помимо того, что «быстрая» замена модулей была невозможна, «внезапно выяснилось» также что небольшой экипаж LCS не может быть мастерами на все руки, равно умеющими использовать принципиально разное оборудование в функциональных модулях. Наконец, радикальное изменение геополитического «климата» во второй половине 2010-ых оставило LCS в подвешенном положении — патрульные и полицейские операции ушли на второй план, а для «настоящей» войны на море LCS подходили слабо.
Тем не менее, отказаться от LCS полностью флот США не мог и не хотел. При всех своих недостатках, эти кораблики имели и достоинства (высочайшую маневренность, низкую ЭПР, хорошую мореходность), а самое главное — производились серийно и достаточно быстро. В 2016-2020 была проведена серия экспериментов по оснащению LCS различными системами вооружений, вроде дальнобойных противокорабельных ракет. И вот, наконец, наступила определенность.
В течении ближайших 18 месяцев предполагается:
* Из 35 имеющихся кораблей, 4 первых (USS «Freedom», USS «Coronado», USS «Independence», USS «Fort Worth») будут выведены в резерв.
* Оставшиеся 31 корабль будут поголовно вооружены противокорабельными крылатыми ракетами Naval Strike Missile (NSM) — оптимизированными для действий в прибрежной обстановке, способными летать над сушей и находить цели среди островков и рифов, и за счет малой ЭПР и противозенитных маневров успешно преодолевать ПВО цели.
* 15 кораблей будут перманентно оснащены противолодочным модулем — включающим буксируемый сонар Thales 2087, многофункциональный пассивный звуколокатор TB-37, и противолодочные торпеды Mark-54 для палубного вертолета.
* 15 кораблей будут перманентно оснащены противоминным модулем — включающим буксируемый сонар AN/AQS-20A, поисково-ликвидационное оснащение для палубного вертолета (позволяющее ему с воздуха находить и провоцировать на подрыв неконтактные мины) и беспилотный подводный аппарат Knifefish для поиска и идентификации донных мин.
Эта программа представляет собой коренное изменение в подходе к LCS. Вместо универсальных канонерок, они становятся специализированными ракетоносными корветами, «заточенными» под действия в прибрежной зоне и акваториях небольших морей. Проблемы с модульностью решили радикально, попросту отказавшись от идеи замены модулей: теперь половина кораблей будет нести противолодочное, а вторая — противоминное оснащение. И то и другое чрезвычайно актуально для флота США, испытывающего жесткий дефицит эскортов (после списания оставшихся фрегатов типа «Оливер Х. Перри») и минных тральщиков (ввиду старения тральщиков типа «Авенджер»).
В целом, американский подход достаточно прагматичен: вместо 35 малополезных в современных реалиях легковооруженных патрульных кораблей с ограниченной функциональностью, флот получит 31 узкоспециализированный, но эффективный корвет, прекрасно адаптированный к условиям юго-восточной Азии. Еще 13 LCS обеих типов находятся в данный момент в постройке — с их вступлением в строй в ближайшие годы, парк корветов ВМФ США увеличится до 44 единиц.
Источник: fonzeppelin.livejournal.com