LINUX.ORG.RU

Ludmila - решение нерешенных математических задач методом подбора

 , ,


1

1

Ludmila - решение нерешенных математических задач методом подбора

Описание

Скрипт Ludmila предназначен для решения нерешенных математических задач методом подбора. Есть список элементов уравнений:

  • числа (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  • операции (+, *, /, -)
  • скобки (левая, правая)
  • степень (квадратная, кубическая, корень квадратный, корень кубический)
  • x (может быть несколько в наборе - x0, x1, x2, …)

Есть входящие наборы данных:

  • data1.txt (линейное уравнение)
  • data2.txt (теорема пифагора)
  • data3.txt (ряд простых чисел)

Например набор data1.txt (линейное уравнение) выглядит вот так:

3235	51	62	73
3350	52	63	74
3467	53	64	75

… и т.д. (всего 100 элеметов в наборе)

Первая цифра значение y, последующие цифры значения x (в данном случае x0, x1, x2)

Для нахождения верного уравнения перебираются комбинации уравнений. Выглядит это примерно так:

y = 1
y = 2
... 

перебираются все уравнения длинной 1, затем длинной 2. Уравнения длинной 3 могут выглядеть например так:

y = 1 + x0
y = 1 + x1

… и так далее, пока не дойдет до:

y = x0 * x1 + x2

В итоге набор данных (3235 51 62 73) выдаст совпадение, далее эта форумла перебирает все наборы данных data1.txt их всего 100 штук. И если все 100 наборы данных прошли проверку, то уравнение считается решенным.

Оптимизация

Так как нет смысла уравнения в котором рядом стоят например два оператора +, поэтому есть правила конкатенации - что может стоять рядом друг с другом, а что нет. В результате чего скорость работы скрипта была увеличина в 15 раз. Правила конкатенации находятся в config.py, переменная types.

Производительность

Производительность на CPU:

  • Линейное уравнение решается за 7 секунд (5 символов) v|x0;o|*;v|x1;o|+;v|x2
  • Теорема пифагора решается за 8100 секунд (8 символов) bl|(;v|x0;e|**2;o|+;v|x1;e|**2;br|);e|**0.5

Задачи

Главной задачей данного скрипта является решение нерешенных математических задач

Но не все они могут быть представлены в виде наборов данных.

To Do

  • Переделать, чтобы вычисления производились не на CPU, а на GPU (CUDA).
  • Добавить больше математических операций - sin, cos, tg, ctg, π, e, log (упадет производительность, но увеличится вероятность нахождения формулы).
  • Добавить наборы данных для других нерешенных математических задач.

Запуск

  • в файле config.py в переменной data_id указать id набора данных (1 - линейное, 2 - теорема пифагора, 3 - ряд простых чисел)
  • запустить файл ludmila.py командой: c:\Python37\python e:\python\maths\ludmila.py
  • результат будет в консоле, а так же в лог файле log.txt

Вопросы

У меня есть два вопроса к сообществу:

  • Есть ли подобные скрипты? Возможно кто-то уже делал такое и мой скрипт бессмысленный потому что эта работа уже проделана кем-то другим.

  • Вопрос к тем кто работал с CUDA. Сейчас вычисления производятся на CPU. Возможно ли переделать на GPU тем самым повысив производительность в десятки раз?

Ссылка на исходники

https://github.com/nevstas/ludmila

Перемещено alpha из general



Последнее исправление: alpha (всего исправлений: 5)

Многомерная интерполяция (апроксимация) методом перебора?

anonymous
()

перебираются все уравнения длинной 1, затем длинной 2. Уравнения длинной 3 могут выглядеть например так:

Про symbolic regression уже читали? (А также про метод наименьших квадратов и вырастающие из него методы линейной и не очень, параметрической и не только регрессии, которыми на практике решают такого рода задачи.)

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

Попробуйте сходить за вдохновением на dxdy.ru, но будьте готовы к тому, что Вас там съедят.

anonymous
()
Ответ на: комментарий от anonymous

Ещё несколько идей:

  • Возможно, Вас заинтересует язык программирования для теории чисел PARI/GP. Посмотрите, есть ли там некоторые из интересующих Вас функций.

  • Использовать eval языка Python для реализации своего языка - хитрый приём, но рано или поздно Вашему языку понадобится грамматика и её парсер и вычислитель. Фундаментальным учебником об этом всём является книга с драконом, но она сложная. ВУЗ подготовит к таким вещам более обстоятельно.

  • \ в качестве разделителя путей работает только на Windows. Используйте os.path, чтобы писать по-настоящему портативные программы, которые будут корректно работать и на POSIX.

anonymous
()

Вопрос к тем кто работал с CUDA. Сейчас вычисления производятся на CPU. Возможно ли переделать на GPU тем самым повысив производительность в десятки раз?

С OpenCL работал.

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

… и т.д. (всего 100 элеметов в наборе)

Очень мало, если на gpu только проверять корректность сгенерированной функции решения уравнения. Буста не будет, так как gpu будет простаивать.

anonymous
()

Главной задачей данного скрипта является решение нерешенных математических задач

Открытые математические проблемы

Задачи тысячелетия

Но не все они могут быть представлены в виде наборов данных.

сразу видно человека который ничерта не понимает в математике.

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

anonymous
()
Ответ на: комментарий от anonymous

Математический класс в школе + университет по специальности инженер (если это так важно).

Nevep
() автор топика
Ответ на: комментарий от anonymous

100 элементов в наборе проверяются крайне редко. Берется первый элемент в наборе и он делает основную работу 99,9%. Крайне редко первый элемент набора выдаст совпадение, и только тогда запускается проверка по всем 100 элементам набора

Nevep
() автор топика
Ответ на: комментарий от Nevep

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

anonymous
()
Ответ на: комментарий от anonymous

Есть элементы уравнения, сейчас их 21 элемент: числа 11 шт, операции 4 шт, скобки 2шт, степень 4шт, иксы.

Представим что элементов 21.

Все операции помещаются в массив (21 элемент).

Изначально есть формула длинной 1 которая выглядит вот так [0] - по сути это 21-теричное чсило.

Проверяется форумла y = [0]

Расшифровав получается y = 1

В данном случае 0 - это индекс массива с элементами, а 1 это значение элемента массива с индексом 0. Например формула y = [2, 12, 3] расшифровывается как y = 2 * 3

Затем инкрементим 21-теричное число, выходит [1] или y = 2. и Так делее 21 раз пока не получится y = [20]. Следующий инкремент будет уже двухзначное 21-тиричное число

y = [0, 0]

Далее инкементим:

y = [0, 1]

y = [0, 2]

y = [0, 20]

y = [1, 0]

y = [1, 1]

y = [1, 2]

т.е. любая формула это число в 21-теричной системе

Nevep
() автор топика
Ответ на: комментарий от Nevep

т.е. любая формула это число в 21-теричной системе

Звучит не очень, с точки зрения генерации бессмысленных выражеий, вроде

y = ((

или

y = 1+

anonymous
()
Ответ на: комментарий от anonymous

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

Nevep
() автор топика
  • почему наборов 100 и откуда они возникают?
  • почему только элементарные математические операции
  • «21-тичное число» это твой аналог metaprog-а или?
anonymous
()
Ответ на: комментарий от anonymous

Почему наборов 100? Число 100 я сам ввел. Если 100 раз формула совпала с входящими данным значит уравнение найдено. Откуда возник набор? На примере линейных уравнений - я поискал примеры линейных уравнений с целыми числами. Вот например как выглядят наборы данных:

data1.txt (линейное уравнение) https://raw.githubusercontent.com/nevstas/ludmila/master/datasets/data1.txt

data2.txt (теорема пифагора) https://raw.githubusercontent.com/nevstas/ludmila/master/datasets/data2.txt

data3.txt (ряд простых чисел) https://raw.githubusercontent.com/nevstas/ludmila/master/datasets/data3.txt

Планирую больше математических операций, но для начала хотел бы переделать на GPU чтобы ускорить скрипт. Так как добавление дополнительных операций сильно замедлит скрипт. Другое дело CUDA + пара видеокарт. Если это (CUDA) вообще возможно, я не уверен, так как python не основной мой язык программирования, я пишу на другом, python как хобби

Почему 21-теричное число? Потому что сейчас в массиве всех операций 21 элемент. Если добавить больше операций, то будет уже например 30-теричное число

Nevep
() автор топика
Ответ на: комментарий от Nevep

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

alpha ★★★★★
()
Ответ на: комментарий от Nevep

Если 100 раз формула совпала с входящими данным значит уравнение найдено

для этого всего есть функции правдоподобия и язык R. Вашу разработку ни в одной академической среде всерьез не воспримут. Если вы правда получили высшее образование, у меня для вас плохие новости - вы потратили 4-6 лет напрасно.

biglpfan
()

-- coding: windows-1251 --

бро, ну вторая половина 2021, скоро календарь переворачивать, пора, пора уже на utf-8 перейти.

мат. методы писать на питоне моветон с точки зрения производительности. Тем более через eval в лоб. Можно хотя бы это заюзать https://stackoverflow.com/questions/12467570/python-way-to-speed-up-a-repeatedly-executed-eval-statement а лучше все же более подходящие языки использовать

cobold ★★★★★
()

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

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

Ну справедливости ради на компе можно делать очень крутые штуки, но мозг надо использовать. Вон как я помню теорема о 4 красках на компе доказана. Можно и круче штуки делать в теории, но думать придётся очень много.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Плюсую этого регистранта. Осильте численные методы и не позорьтесь.

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

Siborgium ★★★★★
()
Ответ на: комментарий от Nevep

после инкремента делается проверка по правилам конкатенации

Как насчёт изначально не генерировать невалидные функции?

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

anonymous
()
Ответ на: комментарий от peregrine

Alpha там есть. Думаю, у нее хватает знаний, чтобы определить уровень школьника, решающего «открытые математические проблемы» методом перебора (лучше бы пароли wifi ломал перебором на cpu скриптом на php). Но почему-то у нее не хватает честности, или стесняется.

anonymous
()
Ответ на: комментарий от Siborgium

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

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

ТС, все таки лучше почитать про алгоритмы CAS, там много всего сделано…

AntonI ★★★★★
()
Ответ на: комментарий от Siborgium

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

AntonI ★★★★★
()
Ответ на: комментарий от Nevep

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

  • 21-теричное число, 30-теричное число

если кто-то серьёзно заинтересуется твоей разработкой или её частью – сложно будет ему объяснить эти твои *-теричные числа.

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

Если 100 раз формула совпала с входящими данным значит уравнение найдено.

ты же это ради шутки сказал?

Другое дело CUDA + пара видеокарт. Если это (CUDA) вообще возможно

изучай, осваивай, развивай.

anonymous
()
Ответ на: комментарий от anonymous

Попробуйте сходить за вдохновением на dxdy.ru, но будьте готовы к тому, что Вас там съедят.

В квотезы!

hobbit ★★★★★
()

ТС, не обижайся на форумчан.
Многие из них ЛЮБЯТ ЩЕКИ ПОНАДУВАТЬ.
Вот тебя осуждали за то, что ты якобы пытаешься решить систему линейных уравнений …
Они даже не поняли о чем тред, но осудить

ЛЮБЯТ
anonymous
()
Ответ на: комментарий от anonymous

Не хотелось писать на ЛОР, но вот ТС тебя шельмовать начали и …

Вот тебе задачка поинтересней твоей …

Имеется набор данных о координатах, времени, … движений небесных тел.

Выведи на основании этих данных закон Кеплера

А так молодец!

Дерзай!  
anonymous
()
Ответ на: комментарий от anonymous
Выведи на основании этих данных закон Кеплера

Остальные задачи - ВАРИАЦИЯ НА ТЕМУ …

anonymous
()
Ответ на: комментарий от anonymous

Попробуйте сходить за вдохновением на dxdy.ru

Судя по гитхабу, он там есть

https://dxdy.ru/topic146962.html

Вас там съедят.

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

anonymous
()
Ответ на: комментарий от anonymous
Выведи на основании этих данных закон Кеплера

Экспромтом

ТС, подскажу приблизительный план разработки такого проекта

  1. Находишь хорошие математические библиотеки на Си

  2. Разрабатываешь грамматику или некие семантические таблицы, которые содержат данные о функциях, их аргументах, …

  3. Используешь хорошую библиотеку для работы с dll, so …

  4. Конечно перебор функций и выражений должен быть не в символьном виде, а что-то типа jit …

  5. Пытаешься разработать алгоритм получения уравнений для простых функций …

Это кости

Мясо нарастет
anonymous
()

А задачу коммивояжёра за полиномиальное время слабо?

cocucka ★★★★☆
()

Советую начать с определения разницы между числом и цифрой.

мой скрипт бессмысленный

абсолютнейше.

Если ты хоть что-то хочешь вынести для себя из этого бреда, то просто сделай перебор по деревьям которые тебе дают формулы и оптимизируй потом по свободным параметрам формулы на данные. Так ты хоть изучишь DFS/BFS и какой-нибудь метод для оптимизации. Только когда у тебя свободных параметров в формуле будет больше чем точек данных, ты сможешь найти больше одного решения. По сути, то что ты хочешь сделать это model selection и фитишь шизоидные формулы.

А так, занятие это бессмысленное для любой области математики, но для дата саинса, или машин лернинга такая шизофазия может даже оказаться полезной.

maggotroot
()
Ответ на: комментарий от maggotroot

А так, занятие это бессмысленное для любой области математики, но для дата саинса, или машин лернинга такая шизофазия может даже оказаться полезной.

Не к спору.
То что ТС пытается разработать применимо не только к области математики.
На https://dxdy.ru/ ТС подсказали хорошую ссылку https://en.wikipedia.org/wiki/Symbolic_regression

anonymous
()

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

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

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

Шутка

Предлагаю с помощью этих методов переоткрыть заново

1) Все законы физики  
2) Доказательство Великой теоремы Ферма
...

Это ДЛЯ НАЧАЛА …

Конечно это шутка.
В целом эта область задач конечно интересна и может принести как пользу/вред …

anonymous
()

Результат

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

anonymous
()
Ответ на: Результат от anonymous

Тебе достаточно решить одну из открытых математических проблем или одну задачу тысячелетия

Если разработает эффективный API, то это будет просто замечательно.
Но потрудиться придется крепенько …

Задача СУПЕР интересна!
anonymous
()

выглядит как домашка или реферат

anonymous
()
Ответ на: комментарий от anonymous

система великолепная, спору нет, но стоимость почти в 4 штуки это что очень много

Там сверху Sage насоветовали.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.