Что умеют машины

По всей видимости, счет везде начинался «на пальцах», так что пальцы следует считать первой (или первобытной) вычислительной машиной.



Следующим шагом предыстории вычислительных машин следует считать счетный абак и дошедшие до наших дней русские счеты, где числа изображались камешками или косточками, надетыми на спицы. Вычисления на этих устройствах производятся полностью вручную, так что счеты следует рассматривать как устройство для облегчения вычислений, но не как вычислительную машину.

История вычислительных машин начинается с 1642 года, когда Блез Паскаль изобрел десятичное счетное колесо и механизм автоматического переноса из разряда в разряд. Идея этого механизма переноса используется и сегодня в настольных клавишных машинах по существу без всякого изменения. Но тогдашний уровень техники был слишком низким для создания надежно работающих механизмов и приборов. Понадобилось еще около полутораста лет для того, чтобы осуществить эти идеи и создать практически используемые вычислительные машины.

В 1874 году русский инженер В. Т. Однер изобрел и построил первый арифмометр, в котором для изображения чисел использовались шестерни с переменным числом зубцов. В 1878 году великий русский математик П. Л. Чебышев (1821—1894) изобрел арифмометр с непрерывным механизмом переноса из разряда в разряд. В 1891 году началось промышленное производство арифмометров Однера.

Широкое распространение получила также суммирующая машина Бэрроуза, изготовленная в 1885 году. В дальнейшем создавалось и создается большое количество различных вычислительных машин, обеспечивающих механизацию счета, сначала ручных, а затем и снабженных электродвигателем. Однако все они имеют ручное управление: для каждого действия оператор, работающий на машине, должен ввести в машину требуемые числа и указать требуемое действие, нажав соответствующую клавишу.

Другую линию в развитии математических машин представляют так называемые машины непрерывного действия или аналоговые машины. Первыми их представителями была всем известная логарифмическая линейка и различные планиметры и лонгиметры, предназначенные для нахождения площадей плоских областей и длин, плоских кривых. В конце XIX и начале XX века были сконструированы непрерывные машины для выполнения операций дифференцирования и интегрирования. В 1912 году великий русский ученый, математик и кораблестроитель А. Н. Крылов (1863—1945) сконструировал машину для решения дифференциальных уравнений. Все они были основаны на механических элементах. С развитием электротехники и электроники аналоговые машины, построенные с широким использованием электрических и электронных элементов получили очень большое распространение.

Настоящей предшественницей современных электронных вычислительных машин следует считать машину, которую сконструировал около 1830 года профессор Кембриджского университета Чарльз Бэббедж. Идея Беббеджа оказалась технически неосуществимой в то время, и фактически его машина так никогда и не работала. Но она содержала уже все основные устройства, которыми обладает современная вычислительная машина: у нее был «склад» для хранения всего числового материала, используемого в процессе счета, «мельница» для обработки этого материала и «управление», выполняющее роль автоматического оператора.

Причиной неудачи Бэббеджа явилась невозможность осуществления такого сложного комплекса на базе лишь механических элементов. Спустя сто с лишним лет положение существенно изменилось: в распоряжении математиков оказались электричество и электроника.

Использование электромотора позволило заменить ручные арифмометры полуавтоматическими и автоматическими клавишными вычислительными машинами. У нас, например, очень широкое распространение получили автоматические клавишные машины ВММ-2, которые выпускались до недавнего времени.

Следующим этапом явилось использование электромеханических реле, которые позволили создать счетно-аналитические и релейные вычислительные машины. Наконец, в конце сороковых годов, т. е. немногим более двадцати лет назад, появились первые электронные вычислительные машины, использующие электронные лампы.

Для электронных вычислительных машин существенны две основные характеристики — скорость выполнения арифметических операций и объем памяти. Первые советские электронные вычислительные машины БЭСМ, М-2, Стрела, Урал имели скорость 200—2000 арифметических операций в секунду и объем памяти 1024—2048 ячеек. Эти машины были ламповыми и имели по несколько тысяч электронных ламп каждая.

Наиболее распространенными машинами конца шестидесятых годов являлись БЭСМ-4, М-220, Минск-22, Раздан-3 со скоростями около 25 000 арифметических операций в секунду и объемом оперативной памяти 8192—32 768 ячеек. Машина БЭСМ-6 при оперативной памяти 32 768 ячеек имеет уже скорость до миллиона арифметических операций в секунду. В этих машинах электронные лампы уже полностью заменены полупроводниковыми элементами (транзисторами), имеющими значительно меньший объем и требующими значительно меньшей мощности.

Применение транзисторов позволило создать малогабаритные настольные электронные клавишные машины, заменяющие электромеханические. Они отличаются большой скоростью и полной бесшумностью, что очень важно для больших вычислительных лабораторий. Поэтому настольные клавишные электронные машины начинают вытеснять электромеханические. Широкую популярность завоевали у нас машины «Вятка», «Искра», «Орбита» и некоторые другие.

Первые же успехи в создании вычислительных машин позволили использовать их и для не вычислительных задач различного рода.

Не очень трудно, по крайней мере теоретически,- «достроить» вычислительную машину до управляющей.



Рассмотрим задачу об управлении некоторым технологическим процессом, например процессом получения какого-либо химического вещества в специальном реакторе.

Течение процесса определяется состоянием внутри реактора: концентрацией исходных веществ и получающегося вещества, температурой и давлением внутри реактора и т. п. Управление процессом обычно состоит в изменении регулируемых параметров, например скорости поступления исходных веществ и температуры. При ручном управлении оператор по показаниям приборов определяет состояние процесса в данный момент и, определив наивыгоднейшие для данного состояния величины регулируемых параметров, приводит их к требуемым значениям.

Для автоматического управления таким процессом нужно соединить вычислительную машину с измерительными приборами, характеризующими состояние процесса, и регулирующими приборами. Получив от измерительных приборов сведения о состоянии процесса, машина рассчитает наивыгоднейший при данном состоянии режим и переведет в нужные положения регулирующие приборы, причем такой расчет и регулировка могут повторяться через определенные промежутки времени.

Конечно, при практическом осуществлении такой схемы могут встретиться и фактически встречаются самые различные трудности, но их преодоление есть уже, как принято выражаться, «дело техники».

Особенно важным является применение быстродействующих электронных вычислительных машин для управления быстротекущими процессами. Многие из таких процессов требуют регулирующего вмешательства десятки и сотни раз в секунду; без участия быстродействующих машин регулирование таких процессов вообще невозможно. Но эта тема заслуживает более подробного обсуждения и мы собираемся это сделать в одном из последующих номеров журнала.

Различные «невычислительные» применения современных вычислительных машин достаточно широки и многообразны. Весьма интересно, например, использование их для перевода текстов с одного языка на другой. Мы сможем дать здесь лишь приблизительное описание принципов работы такой программы. Но и по такому грубому приближению можно представить себе достигнутые результаты и имеющиеся трудности.

Представим себе два языка, состоящие из одинакового количества слов, которые не изменяются при склонении или спряжении и все являются значащими (в русском языке практически все слова являются значащими; напротив, в других европейских языках имеется ряд служебных слов, не имеющих самостоятельного значения. К ним относятся, например, der или ein в значении артикля в немецком языке, the — в английском и т. п.). Предположим далее, что каждое слово одного языка имеет точно один перевод на другой язык. В математических терминах это означает, что между словами двух рассматриваемых языков существует взаимно однозначное соответствие. Если еще предположить, что порядок слов в предложении для обоих языков несуществен (примерно так и обстоит дело в русском языке, где слова в предложении можно переставлять достаточно произвольно, в отличие от многих других, где их порядок предписывается грамматической конструкцией и смысл написанной фразы от перестановки слов может измениться), то для таких языков написать программу перевода совсем просто.

Достаточно ввести в машину словарь. Это можно сделать, например, таким косвенным путем. Занумеруем слова первого языка каким-либо способом, например по алфавиту. Слова же второго языка занумеруем теми же номерами так, чтобы соответствующие друг другу слова двух языков имели один и тот же номер. Теперь остается сделать программу, с помощью которой машина могла бы по введенному слову первого языка находить его номер, затем по номеру — соответствующее слово второго языка, и выдавать его на печать. Тем самым программа перевода будет создана.

Для фактически существующих языков дело обстоит, конечно, гораздо сложнее. Прежде всего, обычно слова являются изменяемыми и порядок слов в предложении не безразличен. Поэтому, кроме словаря, программу необходимо снабдить достаточно подробным перечнем грамматических правил для обоих языков, которые позволили бы:

1) проанализировать введенное предложение синтаксически, определить подлежащее, сказуемое и второстепенные члены предложения и выяснить их характер;

2) исследовать каждое слово, выделить его корень и найти основную форму (именительный падеж единственного числа для существительного и т. п.);

3) после перевода каждого слова на другой язык с помощью словаря расставить слова другого языка в переведенном предложении в нужном порядке;

4) изменить каждое слово в соответствии с нужной формой (число, падеж и т. п. или другие грамматические формы в зависимости от части речи).

Отсюда видно, что для программы перевода необходимы довольно глубокие знания структуры языка (структурная лингвистика), да еще доведенные до такого состояния, чтобы их можно было изложить совершенно формально — для машин. Сейчас мы такими знаниями языков не обладаем.

Но все это, как говорится, еще цветочки. Ягодки же машинного перевода созревают в полную меру тогда, когда мы более подробно подумаем о словаре. До сих пор мы предполагали, что между словами двух языков существует взаимно однозначное соответствие. Как мы знаем, на самом деле это далеко не так.

Прежде всего, в каждом языке имеются омонимы — так называются слова, имеющие несколько различных значений. Например, русское слово «коса» может иметь четыре различных значения: коса может быть острая, русая или песчаная или может быть кратким прилагательным (от «косая»). Ясно, что переводить каждое слово в отдельности здесь уже не удастся, да и словарь придется устраивать посложнее, чем было описано выше; простой нумерацией слов здесь не обойдешься.

Еще больше трудностей вызывает наличие синонимов, т. е. нескольких слов, имеющих одинаковое или, точнее сказать, приблизительно одинаковое значение, вроде «замечательно», «превосходно» и «великолепно».



Чаще всего они взаимозаменяемы, но бывают случаи, когда из множеств синонимов необходимо выбрать один-единственный. Все это чрезвычайно затрудняет составление словаря и пользование им, так как каждому слову одного языка приходится сопоставлять не одно, а несколько слов другого и собрание грамматических правил нужно пополнять правилами выбора нужного перевода из нескольких, имеющихся в словаре, согласовывая этот выбор с другими словами текста. Такие правила формулировать уже совсем трудно.

К этому можно добавить, что и анализ слов по частям речи может встречаться с неожиданными трудностями. Например, никто из читателей, видимо, не усомнился в том, что «стекло» есть имя существительное среднего рода, стоящее в именительном падеже до тех пор, пока не встретится с фразой, в которой оно предательски обратится в глагол. Такой фразой может быть, например, следующая: «Масло разлилось по столу и ручейком стекло на пол». Здесь снова при рассмотрении одного слова приходится привлекать другие.

Таким образом, проблем, требующих своего разрешения для создания полноценных программ перевода с одного языка на другой еще достаточно много. Как метко выразился один из специалистов, работающих в этой области, «прежде всего необходимо научиться хорошо переводить с русского на русский». Однако мы уже умеем довольно многое и еще большему учимся.

Одним из реальных путей упрощения задач перевода является сужение области рассматривающихся текстов. Если ограничиться текстами, относящимися к определенной области знаний, то для их перевода потребуется более простой словарь.

В нем может быть меньше слов и меньше разнообразия для перевода каждого слова. Кроме того, синтаксические конструкции предложений в таком случае менее разнообразны, что тоже облегчает работу. Несколько таких «узких» программ для перевода с французского или английского языка на русский у нас уже сделаны.

Несколько позже, чем работы над машинным переводом, начались исследования в области машинного доказательства теорем, т. е. использования вычислительных машин для доказательства теорем или, правильнее сказать, вывода одних утверждений из других. При этом речь шла не только об уже известных утверждениях.

На международном симпозиуме по эвристическому программированию в феврале 1967 года американский математик Г. Гелернтер рассказал о составленной им программе для доказательства теорем элементарной геометрии. Работая по этой программе, машина доказала теорему, справедливость которой программисту ранее была неизвестна.

Доказанная теорема формулируется следующим образом. Из вершины квадрата, не лежащей на его диагонали, проведены два отрезка, соединяющих вершину с серединами противоположных сторон. Утверждается, что эти отрезки делят диагональ на три равные части. Конечно, эта теорема не слишком трудна, и, надо думать, читатели сумеют самостоятельно доказать ее. Но это доказательство уже не будет первым — впервые эту теорему доказала электронная вычислительная машина.

В СССР тоже созданы некоторые программы такого рода, в частности, программа доказательства теорем арифметики, умеющая (что должно быть особенно интересно для учащихся девятых классов) пользоваться методом математической индукции.

Еще более интересны игровые программы, с помощью которых электронные вычислительные машины могут играть в карточные игры, домино, шашки и шахматы. Мы не станем здесь рассказывать об имеющихся в этой области достижениях, предполагая посвятить этим вопросам отдельную статью. Точно так же заслуживает более подробного, детального разбора применение современных вычислительных машин в задачах узнавания и диагностики. Это мы собираемся сделать несколько позже.