Программы для квантового компьютера
Обновление: я на самом деле не ищу имитацию квантового компьютера, но я не уверен, возможно ли эффективно эмулировать его на обычном неквантовом компьютере.
Да, это возможно (но медленно). Существует несколько существующих (это только частичный список) эмуляторов:
QDD - это библиотека C ++, которая предоставляет относительно интуитивно понятный набор конструкций квантовых вычислений в контексте среды программирования C ++. QDD уникален тем, что его эмуляция квантовых вычислений основана на представлении квантового состояния в двоичной диаграмме решений (BDD).
jQuantum - это программа, которая имитирует квантовый компьютер. Вы можете создать квантовые схемы с ним и позволить им работать. Текущее состояние квантового регистра иллюстрируется.
QCE - это программный инструмент, имитирующий различные аппаратные разработки Quantum Computers. QCE моделирует физические процессы, которые управляют работой аппаратного квантового процессора, строго в соответствии с законами квантовой механики. QCE также предоставляет среду для отладки и выполнения квантовых алгоритмов в реальных экспериментальных условиях.
Недостаток всего этого прост: они все еще работают на двоичных (не квантовых) схемах. Насколько мне известно, нет никакого легкодоступного квантового компьютера, который можно было бы использовать для запуска этих вещей. А поскольку для выражения одного кубита требуются несколько двоичных битов, объем вычислительной мощности, необходимый для моделирования квантовой программы, очень быстро увеличивается.
Я процитирую статью на эту тему ( J. Allcock, 2010 ):
Наша оценка показывает, что наши реализации очень точны, но в то же время мы используем значительный объем дополнительной памяти для достижения этой цели. Снижение наших целей по точности позволило бы нам уменьшить размер представления и, следовательно, эмулировать больше кубитов с тем же объемом памяти.
стр. 89, раздел 5.1
Поскольку наши реализации становятся более точными, они также становятся медленнее.
TL; DR: это возможно, и некоторые эмуляторы существуют, но ни один не очень эффективен для больших количеств кубитов.
Прямо сейчас в компьютерном мире происходит что-то удивительное. Если судить по последним разработкам, становится ясно, что мы уже находимся на пороге новой эры квантовых вычислений. Многочисленные проекции свидетельствуют о том, что мы реализуем повсеместное и полноценное использование квантовых компьютеров в течение примерно десяти лет.
В сердце квантовых вычислений лежит квантовая суперпозиция —странный принцип, согласно которому частицы существуют в двух разных состояниях в одно и то же время. Квантовые компьютеры используют суперпозицию вместо битов, они используют кубиты. Бит — это обычно 0 или 1, а кубит может быть 0, 1 или и 0, и 1 одновременно. Взаимодействуют также другие принципы вроде запутанности или интерференции, которые дают квантовым компьютерам значительное преимущество.
Это существенное отклонение от конвенциональных методов вычислений означает, что современным программистам придется ускориться, чтобы преуспеть в квантовой реальности. На данный момент доступно не очень много учебных материалов по квантовому программированию. Большинство людей в этой отрасли задаются вопросов, на каких языках стоит сконцентрироваться, чтобы иметь преимущество в квантовую эпоху.
Другой сложностью является то, что только у некоторых компаний на данный момент есть квантовое оборудование. Однако системы облачных вычислений сделали возможным начать обучение квантовому программированию для кого угодно с подходящим компьютером. И угадайте, что? Это абсолютно бесплатно. Google, Microsoft, IBM и D-wave — все предлагают доступ к квантовому программированию без оплаты. Это бесценная возможность для любого желающего войти в новую эру.
Проще всего работать с платформой IBM. Можно начать с малого — запуска квантового компьютера в короткий промежуток времени.
Итак, прежде чем погрузиться в обучающие ресурсы, давайте обсудим несколько языков, которые сделают вас экспертом в квантовом программировании.
Python
Python остается номером один: простой в использовании, доступный, универсальный язык подойдет каждому, кто интересуется программированием. Даже люди, плохо знакомые с написанием кода, могут с ним сдружиться.
К нашему счастью, многие программные пакеты написанные для симуляции квантовых компьютеров или связи с ними устроены так, чтобы их можно было использовать с Python. Таким образом, понимание основ языка будет чрезвычайно полезно для квантового программирования.
Таким образом, для тех, кто хочет изучать квантовое программирование, Python — хороший способ начать. Из-за его популярности уже существует множество обучающих ресурсов. Python удобен для новичков, что делает его подходящим языком для понимания основных концепций информатики.
Qiskit
Qiskit — это IBM’s комплект разработки программного обеспечения с открытым исходным кодом (SDK) для работы с квантовыми компьютерами.
Qiskit упрощает разработку квантовых приложений, предлагая ресурсы, необходимые для взаимодействия с квантовыми системами и симуляторами. Qiskit подходит для конечных пользователей без опыта в квантовой разработке. С четырьмя пакетами Qiskit — Aqua, Terra, Ignis, и Aer — вы можете работать как с простыми, так и со сложными алгоритмами.
Если вы рассматриваете Qiskit, то доступны два варианта: можно либо запустить его локально, либо в облаке без установки какого-либо ПО, используя Компьютерную лабораторию IBM.
Cirq — это основанная на Python библиотека программного обеспечения Google для написания, управления и оптимизации квантовых схем, а затем — их запуска на квантовых системах или симуляторах.
По состоянию на начало 2021 года Cirq работает над предложением доступа к одному из реальных квантовых компьютеров Google. Между тем, все еще можно создавать алгоритмы и схемы и тестировать их на квантовом симуляторе.
Google предлагает различные руководства, которые помогают новичкам перейти от нулевого к экспертному уровню квантовой симуляции с использованием Cirq.
Ocean
ПО Ocean — это набор инструментов, предоставляемых D-Wave для решения сложных задач с помощью квантовых компьютеров. Программное обеспечение выполняет вычисления, необходимые для преобразования случайных задач в форму, которую может решить квантовый компьютер.
Важные обучающие ресурсы
Если вы хотите начать путешествие в мир квантовых вычислений, вот несколько ресурсов, которые могут пригодиться:
1. Документация для Forest и pyQuil
Этот обучающий гайд содержит руководства к SDK, включая pyQuil, компилятор Rigetti Quil и квантовую виртуальную машину.
Их облачные сервисы также предлагают пользователям точки доступа к вантовым компьютерам.
2. Документация для Ocean
Документация для Ocean знакомит обучающихся с базовыми концепциями установки и пользования инструментами Ocean простым и понятным способом. SDK включает многочисленные пакеты, полезные для квантового программирования.
3. Полное руководство пользователя IBM Q
Полное руководство пользователя IBM Q позволяет создавать квантовые модели и приложения с помощью квантовой лаборатории IBM, интерфейса Jupyter, оптимизированного для Qiskit.
4. Заметки Джона Прескилла о квантовых вычислениях
Этот ресурс наиболее подробный, если речь идет о презентации концепций квантовых вычислений. Он знакомит обучающихся с физикой, лежащей в основе удивительных квантовых явлений перед тем, как углубиться в основы квантовых вычислительных моделей.
Это обязательно к прочтению для всех тех, кто хочет получить глубокие знания о квантовой программировании.
5. Туториалы Qiskit
В этом ресурсе содержится коллекция руководств Jupyter для тех, кто хочет использовать Qiskit для написания программ для квантового компьютера и их выполнения на онлайновых квантовых симуляторах. Он стремительно растет и приветствует вклад от онлайн-сообщества для улучшения качества ресурса.
Подождите, почему вы хотите изучать квантовое программирование?
Забавно, как быстро нас захватило безумие квантовых вычислений, хотя никто из нас еще даже не представляет, что квантовые компьютеры могут сделать или сделают для нас. Но в этом и заключается все веселье — обещание неограниченного потенциала, возможностей и перспектив.
С чем мы все можем согласиться — так это с тем, что знание о квантовых вычислениях даст преимущество первопроходца, когда этот вид вычислений приобретет масштабы. Так что не сидите на месте! Пользуйтесь преимуществом настоящего, чтобы насладиться изучением технологий будущего.
Прототип ядра ионного квантового компьютера. Ion Quantum Technology Group, Сассекский университет
Квантовые компьютеры время от времени попадают в СМИ. Вы слышите о том, как человек шаг за шагом приближается к их созданию, хотя для большинства развитие квантовых вычислений остается странным и таинственным искусством.
К счастью, для решения этой проблемы появляются отличные проекты, привлекающие внимание широкой аудитории. Например, несколько лет назад IBM дала возможность любому подключиться к 5-кубитному компьютеру. В проекте зарегистрировались 70 000 человек.
Однако индустрия квантовых вычислений по-прежнему остается в зачаточном состоянии. Хотя уже создано немало прототипов, они не могут сделать то, с чем не справится обычный ноутбук. Необходимое аппаратное обеспечение еще не существует, но для изучения у нас есть кое-что еще — языки квантового программирования.
Путешествие в мир квантовых вычислений доступно каждому и напоминает изучение любого обычного языка в нормальном программировании.
Квантовые вычисления
Для погружения в мир квантовых вычислений не понадобится держать дома квантовый компьютер. Есть проекты, которые предоставляют доступ к реальным квантовым устройствам, но простые квантовые программы можно легко моделировать и на обычном ноутбуке.
Прежде чем заняться программами, давайте вспомним базовые вещи о квантовых вычислениях. И здесь нам поможет статья Брайана Хейса «Programming Your Quantum Computer».
Обычный компьютер основан на битах: речь идет переменных, которые имеют только два возможных значения. Мы часто называем их 0 и 1, хотя в контексте булевой алгебры мы можем назвать их «Истинные» и «Ложные».
С битами можно выполнять простые булевы операции, такие как NOT, AND и OR. Любая переменная, более сложная, чем бит (например, int или float), представляет собой просто набор из множества бит.
Квантовые компьютеры основаны на квантовых битах или кубитах. Они также имеют два возможных значения, которые мы можем назвать 0 и 1. Но законы квантовой механики также допускают другие значения, которые мы называем состояниями суперпозиций.
В каком-то смысле состояния суперпозиции представляют собой значения, которые существуют между крайностями 0 и 1. Мы можем представить кубит как сферу, причем 0 и 1 расположены на противоположных полюсах. Состояния суперпозиции — все остальные возможные точки на поверхности.
Дело не в том, что кубит может иметь промежуточное значение, например 0,63; когда измеряется состояние кубита, результат всегда равен 0 или 1. Но в ходе вычисления кубит может действовать так, как если бы он представлял собой смесь состояний — например, 63% нуля и 37% единицы.
Другим ключевым аспектом поведения кубитов является интерференция, явление, хорошо известное в физике волн. Когда две волны перекрываются, они могут усиливать друг друга (если пики и волнообразные спады совпадают), либо они могут нивелировать друг друга (если волны не соответствуют фазе). Математически интенсивность комбинированных волн в любой точке определяется квадратом суммы индивидуальных амплитуд волн. Когда две амплитуды имеют один и тот же знак, интерференция конструктивна; когда одна амплитуда положительна, а другая отрицательна, возникающая в результате деструктивная интерференция дает интенсивность меньше, чем у одной волны.
Подобно волнам, состояния 0 и 1 кубита имеют амплитуды, которые могут быть либо положительными, либо отрицательными. В зависимости от знаков амплитуд квантовая интерференция может либо увеличивать, либо уменьшать вероятность того, что определенное состояние будет наблюдаться, когда мы измеряем состояние кубита.
Интерференция играет роль во всех интересных алгоритмах для квантовых компьютеров, то есть алгоритмах, которые могут позволить такой машине превосходить классический компьютер. Общая идея организовать эволюцию квантовой системы состоит в том, чтобы ошибочные ответы были подавлены деструктивными помехами, а правильные ответы усиливались конструктивной интерференцией. Таким образом, алгоритмы используют форму параллелизма, уникальную для квантовых систем.
Одним из последних аспектов квантовой странности является запутанность. Вы не можете изменить один кубит внутри квантового регистра, оставив остальное без изменений. Для начала каждая функция, вычисленная квантовой системой, должна быть полностью обратимой. Если машина получает на вход A для вывода результата B, то должна быть возможность восстановить A при наличии B.
Каждая функция должна иметь одинаковое количество входов и выходов. Одним махом это правило запрещает большую часть арифметики. Обычный алгоритм сложения, например, необратим. Вы можете добавить 3 и 4, чтобы получить 7, но вы не можете «отсоединить» 7, чтобы восстановить исходные 3 и 4.
Другим запретом в квантовых вычислениях является копирование кубита (этот принцип называется теоремой о запрете клонирования). Также вы не можете произвольно установить или перезагрузить кубиты в середине вычисления. Попытка сделать это уничтожила бы квантовую суперпозицию.
В совокупности ограничения на операции кубита подразумевают, что любая квантовая программа должна иметь архитектуру дымоходной трубы — информация проходит прямо от одного конца к другому. Особенно важно, что в структуре программы не может быть циклов, где управление передается назад в более раннюю точку.
Ответ на эти сложности находят в языках квантового программирования. Фактически, квантовые компьютеры представляют собой гибридные устройства: частично квантовые и частично классические компьютеры. Использование элементов обычного компьютера необходимо для обработки входов и выходов, чтобы взаимодействовать с внешними приложениями. Таким образом, в одной программе можно комбинировать классический код и квантовый код.
Open Quantum Assembly Language (OpenQASM)
Исходный код OpenQASM был выпущен как часть программного обеспечения IBM Quantum Information Software Kit (QISKit) для использования с квантовой вычислительной платформой Quantum Experience. OpenQASM имеет общие черты со специализированными языками программирования (такими, как Verilog), используемыми для описания структуры и поведения электронных схем.
Программы QASM фактически всегда начинаются одинаково: мы определяем все биты, которые нам понадобятся — как квантовые, так и нормальные. Ниже приведен пример исходного кода OpenQASM. Программа добавляет два четырехбитовых номера.
Если следовать туториалу от Microsoft, то процесс обучения пойдет от наблюдения запутанных состояний из двух кубитов к моделированию квантовой телепортации.
LIQUi (Language-Integrated Quantum Operations)
LIQUi позволяет моделировать до 30 кубитов на одной машине с 32 ГБ оперативной памяти. Платформу можно использовать для определения, выполнения и отображения в различных графических форматах квантовых схем. С помощью LIQUi можно имитировать простую квантовую телепортацию, алгоритм факторизации Шора, квантовую ассоциативную память, квантовую линейную алгебру.
Quantum Computation Language (QCL)
QCL, или Quantum Computation Language создан Бернхардом Омером в 1998 году. Развитие языка продолжается и сейчас: существует эмулятор, который позволяет запускать квантовые программы на классическом компьютере. Конечно, эмулятор не может обеспечить ускорение квантового параллелизма; с другой стороны, он предлагает программисту некоторые полезные функции, такие как команды для проверки внутреннего состояния кубитов (что крайне трудно сделать на реальном квантовом оборудовании).
QCL заимствует синтаксис C и Java, которые иногда описываются как «императивные» языки, потому что они полагаются на прямые команды для установки и сброса значений переменных. Такие команды обычно запрещены в квантовом вычислении, поэтому основные части программы QCL работают только на классическом оборудовании. Квантовая система служит «оракулом», отвечающим на вопросы, которые могут быть заданы в формате, подходящем для вычислений кубитов. Каждый запрос к оракулу должен иметь требуемую архитектуру дымоходной трубы, но он может быть встроен в цикл во внешнем классическом контексте.
Фрагмент кода, созданного в QCL (дискретное преобразование Фурье):
Дискретное преобразование Фурье является решающим шагом в алгоритме факторизации Шора. В алгоритме Шора число, подлежащее факторизации, рассматривается как волнообразный, периодический сигнал. Если N имеет коэффициенты u и v, то N состоит из u повторений v или v повторений u. Алгоритм Шора использует квантовый параллелизм для поиска периода таких повторений, хотя процесс не такой простой и прямой, как может показаться в примере выше.
Quipper
Язык был создан коллективом авторов под руководством Питера Селингера. Quipper предназначен для тех же задач программирования, что и QCL, но имеет другую структуру и внешний вид. Язык реализован как расширение Haskell, которое использует функциональный, а не императивный способ выражения.
Рассмотрим классическую квантовую телепортацию. Она включает в себя две стороны — Алису и Боба. Целью Алисы является телепортация кубита q к Бобу. У Алисы и Боба должен быть доступ к кубитам из запутанной пары (a, b). Мы можем думать о роли Алисы в терминах функции, которая вводит два кубита q и a. На выходе функции будет пара классических бит, созданных Алисой:
А вот интересный пример возведения в 17 степень, путем возведения x в 16 степень встроенной процедурой возведения в квадрат и перемножением x и x^16:
Система Quipper — это компилятор, а не интерпретатор; он переводит полную программу за один раз, а не выполняет инструкции друг за другом. Выход компилятора состоит из квантовых схем: сетей взаимосвязанных, обратимых логических вентилей. Схема может иметь форму электрической схемы, но также представляет собой последовательность инструкций, готовых к выполнению с помощью подходящего квантового оборудования или симулятора.
Quipper, как и QCL, автоматически генерирует схемы из высокоуровневых исходных смысловых конструкций.
Другие подходы
Разноцветные квадраты говорят пяти квантовым битам IBM, что нужно делать. Перетаскиванием вы можете создавать свои собственные квантовые вычисления
Проект IBM Quantum Experience предоставляет возможность каждому запустить экспериментальную программу на реальном квантовом компьютере. Работа с языком программирования IBM похожа на процесс написания музыки с помощью приложения. Программист может просто перетащить квантовые объекты в определенную область, чтобы написать программу.
Quantum Computing Playground — эксперимент WebGL Chrome, позволяющий смоделировать работу с квантовым компьютером в окошке браузера. Имеется собственный язык сценариев Qscript с функциями отладки и 3D-квантовой визуализации. Квантовая вычислительная площадка может эффективно имитировать квантовые регистры до 22 кубитов.
Python QISKit SDK включает в себя несколько инструментов, которые инженеры IBM Q предоставили для иллюстрации целей квантового программирования. В частности, SDK показывает, как вы можете выполнить несколько заданий для сложных экспериментов. Как ясно из названия, QISKit позволяет разработчикам исследовать квантовый компьютер с помощью Python.
Qbsolv — open source проект для работы с кубитами квантового процессора D-Wave (подходит только для компьютеров этой компании).
Языков квантового программирования (и симуляторов) уже десятки, но все они работают на виртуальной машине. Вероятно, IBM Q — это единственный проект, который предлагает доступ к реальному квантовому компьютеру. Однако для того, чтобы начать заниматься «квантовым программированием», вовсе не обязательно иметь доступ к реальному передовому устройству. Уже сейчас можно не только изучать работу перспективных квантовых алгоритмов, но и создавать работающие приложения, например игры. Но это уже совсем другая история.
Квантовый компьютер — тема нашего новой статьи, если вы давно хотели узнать о них больше, сейчас самое время. Помимо теории вы напишите первый алгоритм.
То устройство, с которого вы прямо сейчас читаете этот текст, является примером классического компьютера.
Смартфоны, планшеты, ноутбуки – все они являются устройствами общего назначения, с помощью которых мы можем написать какой-либо алгоритм, дать какую-то информацию, и в теории они могут выполнить любое задание.
Потоковое вещание, создание захватывающих трехмерных сред, избавление от экзистенциального кризиса – все это выполнимо благодаря использованию этих устройств. Но в самой глубине, в своем ядре они совершают совершенно элементарные вещи. За каждым приложением стоят последовательности из простейших математических операций. Покупка билетов, игры, приложения - это все всего лишь перевод информации в строки из 0 и 1. Они представляют собой ввод данных, который передается на обработку, в результате которой появляется новая строка из 0 и 1.
Несмотря на всю сложность алгоритмов, по сути они просто совершают манипуляции со строками битов, где каждый бит это 1 или 0. Мы используем 0 и 1, потому что они демонстрируют способ представления информации, которая может быть только в одном из двух возможных состояний.
Компьютер использует схемы, называемые logic gates (логические вентили), состоящие из транзисторов, соединенных вместе. Они сравнивают биты для того, чтобы превратить их в новые шаблоны битов, используя простую арифметику.
Жесткие диски хранят 0 и 1, изменяя магнитные поля маленьких частей металлического диска. + и - заряды представлены 1 и 0. Компьютеры делают эти вещи очень хорошо. Они хранят числа в памяти и могут их обработать с помощью простых математических операций.
В 1965 основатель Intel - Гордон Мур предсказал, что количество транзисторов на квадратный дюйм в интегральных схемах будет удваиваться каждые 18 месяцев. Это предположение было доказано, но существуют законы, которые мы не властны изменить – законы физики. Именно они не позволяют уменьшать размер транзисторов до бесконечности.
Идея квантовых вычислений - возможное решение проблемы, и в связи с этим интерес к ним с каждым годом только увеличивается. Слово квант в физике означает минимальное количество любой физической величины, вовлеченной во взаимодействие.
Фотон - это квант света. Но это физическое определение. в просторечии используют обороты вроде квантового скачка. На самом деле, они не имеют ничего общего с квантовой физикой. Квантовая физика - это изучение физического феномена, который происходит на атомном или субатомном уровне.
На уровне атомов законы классической механики перестают работать. Ричард Фейнман лучше всего описал это: "Вещи в очень маленьком масштабе ведут себя так, что никакой прежний опыт вам совсем не поможет."
Мельчайшие частицы вроде электронов и фотонов могут одновременно принимать несколько состояний, которые в бОльших масштабах взаимоисключаемы. Они могут быть в нескольких местах в одно и то же время, или могут показывать два вида поляризации так же одновременно.
У нас нет возможности увидеть суперпозицию различных состояний, потому что только как кто-то пытается ее измерить, она исчезает. Никто на самом деле не знает, как это происходит, но это происходит.
Мы можем использовать этот концепт для освобождения компьютеров от двоичных рамок.
Квантовые компьютеры используют частицы, находящиеся в магнитном поле, при температуре близкой к абсолютному нулю, чтобы представить не биты, а кубиты вместо 0 или 1.
Они также могут представить оба состояния одновременно. Вы можете подумать: "Ну и в чем смысл?". Нельзя ли добиться суперпозиции в обычном компьютере, просто используя два обычных бита в одно и то же время, и зачем тогда кубит.
Но кроме принципа суперпозиции в квантовой физике существует идея квантовой запутанности. Если у нас есть система, состоящая из более чем одного кубита, эти частицы перестают быть независимыми друг от друга. Они запутаны так, что в системе из двух кубитов один кубит говорит другому, что вы увидите во время измерения первого.
Частицы могут быть запутаны даже на значительном расстоянии. Эйнштейн назвал квантовую запутанность жутким действием на расстоянии. Это значит, что вы не можете просто описать систему из нескольких кубитов, используя описания отдельных кубитов, вы должны описать корреляции между кубитами. Увеличение числа кубитов экспоненциально увеличивает число корреляций. Поэтому для системы всего в триста кубитов вам нужно чисел больше, чем для того, чтобы описать количество атомов в видимой части Вселенной.
Так как мы не можем просто записать информацию, содержащуюся в системе из нескольких сотен кубитов, используя классические биты, возможно, компьютер, работающий на этих кубитах, может выполнять задачи, которые недостижимы для классических компьютеров.
Поэтому люди ожидают многое от квантовых вычислений. Давайте создадим простой квантовый алгоритм в Python с использованием квантового API от IBM.
Чтобы узнать больше, рекомендуем вам зарегистрироваться на веб-сайте IBM для доступа к их API. Для дальнейшей работы вам нужно загрузить SDK и использовать его в Python.
Итак, в этот раз мы создадим алгоритм Дойча-Йожи, один из первых алгоритмов, предложенных к выполнению на квантовых компьютерах.
Нам дан квантовый компьютер, известный как Oracle, реализующий некоторую функцию f, которая принимает n двоичных значений в качестве ввода и выводит либо 0, либо 1.
Для каждого значения функция постоянна, 0 либо 1 на вводе.
Она также может быть сбалансирована, что позволит получить 1 в половине вводимого множества всех допустимых значений и 0 в другой половине.
Задача состоит в том, чтобы определить постоянна функция f или же она сбалансирована, используя Oracle.
Для начала мы должны инициализировать объект квантовой программы с квантовым и классическим регистром, содержащим 3 бита.
Программа позволяет совершать манипуляции с квантовыми схемами, и каждая имеет набор регистров данных.
Мы применим Адамаров вентиль к каждому кубиту. Так, что можно будет увидеть все возможные состояния.
Для каждого возможного состояния мы применим Oracle.
В нашем случае Oracle - это сбалансированная функция. Затем мы применим H-gate ко всем кубитам снова, вот и весь наш алгоритм.
Для постоянной функции мы можем ожидать 100% шанс наблюдения всех нулей, а от сбалансированной функции мы можем ожидать, что угодно.
Это демонстрирует, что проблема черного ящика может быть эффективно решена с помощью квантового компьютера без ошибок. Классическому компьютеру для достижения этой цели понадобиться гораздо больше запросов к черному ящику.
Читайте также: