LINUX.ORG.RU

Сообщения Nevep

 

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

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

 , ,

Nevep
()

RSS подписка на новые темы