Форум сайта python.su
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
Задачи
Главной задачей данного скрипта является решение нерешенных математических задач
- Открытые математические проблемы (https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B)
- Задачи тысячелетия (https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D1%82%D1%8B%D1%81%D1%8F%D1%87%D0%B5%D0%BB%D0%B5%D1%82%D0%B8%D1%8F)
Но не все они могут быть представлены в виде наборов данных.
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
Офлайн
ММ… А вы с 2014 это писали и вот наконец получили результат?
ArtinolТаких скриптов нет.
Есть ли подобные скрипты? Возможно кто-то уже делал такое и мой скрипт бессмысленный потому что эта работа уже проделана кем-то другим.
ArtinolПеределать можно но глупо. Если нужна скорость пишите на C. Вы уже в сотню раз ускорение получите по сравнению с питоном. А так да, задачи перебора довольно хорошо паралелятся.
Вопрос к тем кто работал с CUDA
Отредактировано doza_and (Авг. 16, 2021 21:25:48)
Офлайн
ArtinolУ тебя слабые скрипты с точки зрения программирования. Так что ничего ты пока не в состоянии написать, надо учиться. Диалоги на форумах, которые перечислены в твоём репозитории, я почитал. Там тебе уже по существу ответили в плане математики. По программированию ты зашёл в правильное место. По крайней мере, я там в диалогах ничего не нашёл, кроме выливания ведра говна на твой проект в целом, а это неконструктивно. Вердикт вот такой. Если ты думаешь, что ты можешь закосить под нормального программиста, рассказывая всем, что ты инженер и даже диплом имеешь, вот он, смотрите, то ты глубоко заблуждаешься. В программировании за программиста говорит его код, его проекты и тому подобное, а не бумажки с записями, даже если они хорошие. Тем программирование и отличается от всего остального. Либо ты делаешь программы, либо нет, третьего не дано. И можешь сколько угодно рассказывать, где ты учился и где ты работал, это не поможет. Примитивнейшие новичковые ошибки в написании кода у тебя повсюду. Ты даже не знаешь, как функции правильно называть или как правильно комментарии писать к коду. А о том, как это всё вообще спроектировать правильно, ты даже ближайшего представления не имеешь. Твои представления примерно такие же, как представления школьника о строительстве пятиэтажки. Одного ведра и одной лопаты для этого будет маловато. Почему так происходит? Потому что ты не прочитал ни одной книги, где учат правильно составлять код, правильно составлять алгоритмы и тому подобное - основы. Если бы читал, глупых ошибок бы не делал.
Есть ли подобные скрипты?
Artinolна этом форуме среди множества других будет такой: есть подобные скрипты и их много, так как периодически появляется какой-то новичок, пытающийся взломать Пентагон или подчинить Вселенную; обычно это выражается в куче быдлокода, который ничего не делает особого. К счастью, у тебя не так много такого кода, потому что это всё величайшее творение можно написать заново за двадцать минут и это новое произведение искусства будет даже лучше первоначального. А бывает так, что и кода много, за неделю не перепишешь, и его весь можно выбрасывать спокойно, а выбрасывать жалко. Так что не расстраивайся особо, ты ещё не успел увязнуть в болоте.
Есть ли подобные скрипты?
Отредактировано py.user.next (Авг. 17, 2021 02:15:52)
Офлайн