Математическая поисковая система Uniquation

Mы только что открыли α-тестирование проекта Uniquation. Это математическая поисковая система, которая ищет решения среди уравнений, равенств и прочих математических объектов, размещенных в интернете. На текущем этапе развития её можно мыслить как развивающуюся CAS (wiki). Помимо этого поста про неё можно прочитать в нашей презентации.

Мы (shai_xylyd, greenman, konfuze) – небольшая команда авантюристов, которым интересно создавать и исследовать что-то новое. В результате нашего сотрудничества родился и продолжает совершенствоваться этот проект. Прежде всего нами движет интерес. Интерес от исследования своих способностей, новых инструментов, и того, что мы создаем.

Возможности

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

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

История проекта

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

Разработка движка началась в свободное от работы и учебы время осенью 2008-ого года. Изначально код был написан в императивном стиле, но затем, после более полного анализа предметной области, было принято решение о переходе на функциональную парадигму, в итоге где-то 10 февраля весь код был переписан, что позволило сократить объем исходного кода почти вдвое и ускорить процесс разработки. Примерно в это время мой друг предложил участвовать в конкурсе Imagine Cup, и, как следствие, работа стала более интенсивной. Так как помимо движка нужно было работать над дизайном сайтом, я устроил спам-рассылку по питерским студентам, работающим web-дизайнерами и зарегистрированными на хабре. Такой метод оказался очень плодотворен, почти все, кому я посылал сообщения, ответили; так в команду попал konfuze. 12 января 2009 движок впервые успешно произвел поиск.

17 марта 2009 состоялось выступление на северо-западном этапе конкурса Imagine Cup, где наша команда заняла второе место. О выступлении можно почитать в Деловом Петербугре. После конкурса мы сконцентрировали силы на исправлении тех ошибок, которые были обнаружены во время подготовки к Imagine Cup. Так же участие в конкурсе дало нам уверенность в том, что идея жизнеспособна.

11 апреля 2009 Uniquation был представлен в качестве примера проекта написанного с применением аспектно-ориентированного программирования на Coffee & Code в питере.

С 24 апреля движок стал мультиплатформенным, и далее все версии тестируются как в windows, так и в linux.

Летом к разработке присоединился мой друг greenman для создания нового проекта и интеграции в него технологий Uniquation.

5-6 сентября 2009 проект участвовал в hackday. Мы надеялись найти специалиста по JS, который помог бы нам с созданием графического редактора для ввода формул. К сожалению, он не был найден, и green переключился на адаптацию Java-апплета DrugMath к нашим целям.

2 октября 2009 произошло одно из самых значительных изменений в проекте: был доработан алгоритм нормализации формул; именно он позволяет искать формулы вне зависимости от переменных, которые в них использованы, и вне зависимости от порядка аргументов в коммутативных операциях. Эта задача относится к классу NP-полных, поэтому быстрого алгоритма для всех возможных формул теоретически быть не может, но наш алгоритм работает достаточно быстро на тех формулах, которые имеет смысл искать.

В конце октября произошла заморозка разработки новых возможностей и все силы были отданы на подготовку этой α-версии.

Архитектура

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

Open source

Мы любим open source, но, хотя сам по себе проект uniquation является некоммерческим, мы не можем открыть его исходники, так как планируем запустить стартап на основе технологий, которые в нем используем. Но мы наедимся, что мы приносим пользу сообществу, так как совершенствуем открытый редактор формул.

Зачем мы пиаримся?

Очень хотелось бы получить обратную связь. Например, если вы думаете, что сервис может быть вам полезен, то напишите, что вам в нем не хватает сейчас. У нас множество идей как можно улучшить поиск, но всегда приятней работать, зная что есть кто-то, кому это нужно. Это могут быть совершенно разные пожелания, например, «стоит объединять одинаковые по смыслу формулы в выдаче», или «улучшить поддержку пределов | многомерных интегралов | ODE | ...», или «создать сайт, где пользователи могут делиться решениями и их обсуждать», или «индексировать dxdy.ru».

+70

16 ноября 2009, 08:26

35

комментарии (55)

  • 16 ноября 2009, 08:45

    • +8

Молодцы. Лично я уверен, что за подобными узконаправленными поисковыми системами, учитывающими специфику тематики, будущее. Только смотрите, чтобы Вы случайно не изобрели Wolfram Alpha.

  • 16 ноября 2009, 09:15

    • +5

Ребята, вы — молодцы!

Смешная опечатка «Но мы наедимся» в разделе Open Source.

Получилось написать (sin(x))^2+(cos(x))^2 только с третьего раза, вот так: sin^2(x) + cos^2(x). Хотя по идее, вернее первый вариант.

  • 16 ноября 2009, 09:25

    • +1

но на бумаге именно так и пишется же. sin^x(blabla), (sin(blabla))^2 это чисто компьютерная фича

  • 16 ноября 2009, 09:34

    • +4

На бумаге — да. Но писать в компьютер не компьютерные, а бумажные фичи — это надо ещё привыкнуть: )

  • 16 ноября 2009, 09:40

    • +2

Лучше сделать, чтоб можно было писать и так, и так. Тогда точно не будете ошибаться. ;)

  • 16 ноября 2009, 10:08

    • 0

Точно. ВольфрамАльфа, к слову, понимает и так и сяк:

www.wolframalpha.com/input/?i=sin^2%28x%29%2Bcos^2%28x%29

(ссылка парсером битая, ну вы поняли)

  • 16 ноября 2009, 11:31

    • +1

Зачем полагаться на парсер, если заранее видите, что получается битая?

www.wolframalpha.com/input/?i=sin^2%28x%29%2Bcos^2%28x%29

  • 16 ноября 2009, 11:42

    • 0

Виноват, исправлюсь.

Похоже, у меня заработали html-тэги ))

  • 17 ноября 2009, 01:52

    • 0

Всё-таки на бумаге оно вообще пишется не так, а как в маткаде)

Одно дело понимать такую странную форму записи — другое чтобы она была единтсвенно верной.

  • 17 ноября 2009, 01:56

    • 0

как это не так? именно так, ну не считая ^2… надо оба формата понимать, или только компьютерный вариант.

  • 17 ноября 2009, 02:11

    • 0

Я имевю ввиду что ручкой оно пишется в пространстве а не в строчку)

Из за таких вещей как sin^x(blabla) усложняется воспириятие, например как понять

sin^x(y+2)(blabla)

Тут (y+2) это степень или это уже блабла)

Вообще я когда есть возможность в тетради пишу (sin(blabla))^x :))) Программистская привычка)

  • 16 ноября 2009, 09:33

    • +1

Спасибо, к следующему релизу пофиксим.

Когда начали работать ужаснулись, какой неоднозначный язык математики, и сколькими способами можно выразить один и тот же объект — прям как perl:)

  • 16 ноября 2009, 09:36

    • –1

Не надо фиксить, у вас же правильно сделано)

Возможно, стоит показывать подсказку, если пользователь вводит формулу неправильно.

  • 16 ноября 2009, 10:56

    • +3

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

  • 17 ноября 2009, 01:54

    • 0

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

НЛО прилетело и опубликовало эту надпись здесь.

  • 16 ноября 2009, 09:38

    • 0

А с помощью Smath на кпк не посчитать?)

  • 16 ноября 2009, 10:15

    • 0

Можно, и на кпк с Smath, и в Maple, и в Maxima, и MatLab, но это все разные подходы.

MatLab система численных вычислений и платформа для Simulink. Это промышленный инструмент, который в основном используется инженерами для расчетов.

Uniquation является системой символьных «вычислений», как Maxima и отчасти Maple, но использует другой подход: вместо того что бы совершенствовать алгоритмы вывода решений (сложная задача), мы улучшаем алгоритмы поиска (более простая задача) и используем internet (crowdsourcing) в качестве символьных вычислений. Потенциально такой подход позволит создать более лучшую систему при меньшем количестве усилий.

  • 16 ноября 2009, 09:47

    • 0

лучше бы она их решала =)

  • 16 ноября 2009, 10:06

    • +1

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

С другой стороны, поиск решений вместо решения, помимо самого ответа предоставляет ссылку на материал, с помощью которого этот ответ может быть верифицирован. Это же правило используется и в википедии: «Wikipedia does not publish original research or original thought.»

  • 16 ноября 2009, 09:56

    • 0

отличный задум, посмотрим что будет дальше ))

  • 16 ноября 2009, 10:04

    • +1

Действительно круто! Немного коробит, что сайт в зоне .ru не содержит ни слова по-русски на главной(

  • 16 ноября 2009, 10:08

    • 0

расскажите пожалуйста про стохастические уравнения, никогда их не понимал…

  • 16 ноября 2009, 10:40

    • 0

:) На простом уровне все просто — в обычном случае случае можно определить функцию через её приращение (например, df = f(1)dx), в стохастическом случае в правой части будет еще случайная величина, следовательно и сама функция будет случайной.

  • 17 ноября 2009, 03:15

    • 0

а когда мы решили уже стохастический дифур, что является решением, сама функция, очищенная от шума?

  • 16 ноября 2009, 10:26

    • –3

Ну очень понравилась ваша картинка «найдите х», нестандартное мышление всегда восхищает…

  • 16 ноября 2009, 10:54

    • +3

  • 16 ноября 2009, 17:25

    • +1

Картинка и впрямь хороша, но идея принадлежит aaa advertising school.

У них в кампании 2007-го года была целая серия забавных принтов: http://www.adme.ru/prints/2007/12/04/21251/.

  • 16 ноября 2009, 11:00

    • 0

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

  • 16 ноября 2009, 11:53

    • 0

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

  • 16 ноября 2009, 12:05

    • +3

анти-демидович?

  • 16 ноября 2009, 13:00

    • +1

Да, мы об этом думаем:)

  • 16 ноября 2009, 11:40

    • +1

Жалко что не было такого сервиса когда я в школе и в институте учился :(

  • 16 ноября 2009, 11:52

    • +1

эх где же вы были в мои студенческие годы :) а вообще — молодцы.

  • 16 ноября 2009, 12:44

    • 0

а в чем отличие от Wolfram Alpha?

  • 16 ноября 2009, 12:53

    • 0

Есть два фундаментальных отличия, первое в том, что Wolfam|Alpha вычисляет, а (uni)quation ищет. Другое различие в том, что база знаний, на основе которой считает W|A закрыта, а у (uni) открыта, это Internet.

Остальное, включая различия в потенциальной аудитории, следует из этих двух различий.

  • 16 ноября 2009, 13:10

    • 0

Главное, чтобы в будущем вы банально не стали парсить WolframAlpha. Или станете?

  • 17 ноября 2009, 01:58

    • 0

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

  • 16 ноября 2009, 13:30

    • 0

Все круто. Очень.

Вижу в .com тоже работает, и это правильно, только вот больше бы порядка с языками.

  • 20 ноября 2009, 15:31

    • 0

Спасибо за отзыв. Немного подправил языки.

НЛО прилетело и опубликовало эту надпись здесь.

  • 16 ноября 2009, 14:36

    • 0

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

p.s. на чем она написана?

  • 16 ноября 2009, 14:40

    • 0

В тегах ответ.

  • 16 ноября 2009, 14:42

    • 0

nemerle — ?, вау, первый раз такой слышу.

  • 16 ноября 2009, 16:47

    • 0

в закладки!

  • 16 ноября 2009, 19:47

    • 0

Задача прикольная, но не факт, что нужная. На кафедре МаТИС мехмата МГУ пишут гораздо более веселую штуку — «решателя» математических задач. Вам бы с ними пообщаться — intsys.msu.ru/staff/

  • 16 ноября 2009, 22:32

    • 0

Я правильно понимаю, что пока задачу кто-то не решил и не выложил в свободный доступ на ресурсы, с которыми вы работаете, никто не сможет получить ответ на свой вопрос, даже если он прост как дважды два? Думаю, простые задачки можно и средствами сервера/клиента решать, чтобы быть более уверенными в том, что конечный заинтересованный в ответе пользователь его все-таки получит.

  • 16 ноября 2009, 22:42

    • 0

Это верно. И мы думаем об этом, одной из идеей является создание микроформата, который позволит описывать правила «если есть совпадение запроса с „x2=a“, где a — положительное чисто, то ответ x = ± sqrt(a)».

  • 17 ноября 2009, 02:14

    • 0

Хорошо-бы встроить символьную систему, которая будет скажем для выражения (a+b)^2 искать и так как задали, и раскрыв скобки сама искать с расскрытыми скобками. Это простой пример, но для более сложных выражений форма записи может затруднить поиск.

  • 16 ноября 2009, 23:33

    • 0

Сервис однозначно в закладки. Иногда бывает полезным найти решение какого-нибудь типичного уравнения, или там, способ сокращения многочлена. В гугле искать информацию такого рода не очень то и удобно — спасал только Вольфрам Альфа. Теперь вот будет дополнение к нему.

Очень понравилась идея графического редактора формул — правда попробовать сам редактор я не смог. Сначала браузер сказал мне, что достоверность цифровой подписи данного апплета проверить невозможно, а потом и вовсе завис (firefox 3.5.5; java plug-in 1.6.0_07). Сейчас вот даже грузиться отказывается.

  • 17 ноября 2009, 08:51

    • 0

Сертификат поборем. Надо, чтобы это предупреждение вообще не появлялось, ибо апплет ничего криминального не делает.

Странно, что текущая версия вообще не загрузилась. У меня в опере, фф 3.5 и хроме работает.

  • 17 ноября 2009, 02:07

    • 0

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

Но с вводом формул нужо одназначно что-то делать. Формат TeX и для математиков-то не самый понятный и обыденный, не то что для простых смертных. Без унифицированной системы ввода толку от такого поисковика будет крайне мало + нужно действительно как-то дать возможность указывать что именно ищет пользователь.

Ну и ещё из области пожеланий — конечно хотелось-бы возможности поиска каких-то теорикогрупповых вещей в вашем поиске)

И да, думаю индексация форума мехамата и www.diary.ru/~eek/ была бы хорошей идеей, хотя так как информация там никак не структурирована наверное это будет пости невозможно. Но кто знает :)

  • 20 ноября 2009, 15:27

    • 0

Спасибо за отзыв. Алгебра мне самому интересна:) Как вы думаете, обработку каких запросов, связанных с теорией групп, следует добавлять в первую очередь? Я сходу могу придумать только запросы вида «P[x]/(x2+1)», который может задать кто-нибудь, кто хочет найти информацию об этом конкретном поле.

  • 20 ноября 2009, 16:09

    • 0

Думаю запросы о фактор группах например Z/Zn были бы полезны, или например о каких то конкретных группах типа Sn или линейных пространствах типа М[2]n или ещё можно было-бы искат mrfrbt-то линейные операторы по их матрице (кстати оригинальная идея) или просто по виду оператора найти чтонибудь о его матрице или как он задаётся.

Хотя опять же тут самая большая пробелма — проблема терминологии, потому что даже в учебниках даётся зачастую раная терминология, не говоря уже о серьёзных публиациях где всякий считает что может обозначать что как надо, и форумах на которых многие и не знают как надо и объясняются чуть ли не на пальцах :)

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

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

Вообще математичесский поиск — непаханное поле, которое так и ждёт что-б его вспахали, потому-что объёмы информации существуют колосальные, а найти что-то на грани невозможного.

  • 14 октября 2010, 17:43

    • 0

Добавил начальную поддержку абстрактной алгебры, несколько примеров есть на главной.