- •Курсовой проект
- •Оглавление
- •Введение
- •Концептуальное модельное представление задачи как системы
- •Программная реализация представления концептуальной модели задачи Решение задач посредством прямого расчёта
- •Решение судоку Разрешение концептуальных моделей
- •Метод полного перебора
- •Логические методы решения
- •Составление судоку
- •Составление открытием
- •Решение вычёркиванием
- •Переносимость и интегрируемость
- •Литература
- •Приложение. Программный код Решатель математических моделей
- •Решатель судоку методом полного перебора
- •Решатель судоку аналитическими методами
- •Генератор судоку методом открытий
Программная реализация представления концептуальной модели задачи Решение задач посредством прямого расчёта
Первая технология, которая реализуется в представленном программной средстве – прямой расчёт. Сначала пользователь выбирает предметную область. Для примера рассмотрим задачу на простое прямолинейное движение.
Программа загружает исходные данные предметной области, которые представляют собой формулы для вычисления всех возможных параметров. В нашем случае эти формулы таковы:
Набор переменных:
x - текущая координата
xs – начальная координата
v – текущая скорость
vs – начальная скорость
astart – начальное ускорение
t - время
to – время (1й корень решения уравнения движения относительно t)
tt – время (2й корень решения уравнения движения относительно t)
Формулы для вычисления:
Затем пользователь загружает непосредственно задачу.
После нажатия кнопки решить мы получаем вывод вида:
Ввод (exec) начальной информации: xs = 30.0
Ввод (exec) начальной информации: vs = 10.0
Ввод (exec) начальной информации: astart = -10.0
Ввод (exec) начальной информации: x = 10.0
Step 0:
Применение шаблона to = ((-1)*(vs) + math.sqrt(((vs)**2) - 2*((xs)-(x))*(astart)))/(astart) для переменной to (to = ((-1)*(vs) + math.sqrt(((vs)**2) - 2*((xs)-(x))*(astart)))/(astart))
to
to = -1.23606798
Переменная to не удовлетворяет параметрам внешней среды (to > 0)
Step 1:
Применение шаблона tt = ((-1)*(vs) - math.sqrt(((vs)**2) - 2*((xs)-(x))*(astart)))/(astart) для переменной tt (tt = ((-1)*(vs) - math.sqrt(((vs)**2) - 2*((xs)-(x))*(astart)))/(astart))
tt
tt = 3.23606798
Таким образом, мы получаем решение задачи (подсчёт переменных посредством прямого математического расчёта, то есть подстановки) и проверку на удовлетворение полученного параметрам внешней среды.
Непосредственно рекурсия здесь не применяется, но если мы изменим условия задачи следующим образом:
То есть приведём задачу к виду «на какую максимальную высоту поднялось тело», то получим следующий вывод:
Ввод (exec) начальной информации: xs = 30.0
Ввод (exec) начальной информации: vs = 10.0
Ввод (exec) начальной информации: astart = -9.8
Step 0:
Применяем правило v=0
Применение шаблона x = (xs) + (vs)*t + (astart)*(t**2)/2 для переменной x (x = (xs) + (vs)*t + (astart)*(t**2)/2)
Какая-то из переменных правой части правил не может быть найдена в условиях и/или других правилах, ожидается name 't' is not defined
Поиск 't'
Применение шаблона t = (v-vs)/astart для переменной t (t = (v-vs)/astart)
t
t = 1.02040816
Step 1:
Применение шаблона x = (xs) + (vs)*t + (astart)*(t**2)/2 для переменной x (x = (xs) + (vs)*t + (astart)*(t**2)/2)
x
x = 35.10204082
Таким образом видно, что программа попыталась применить искомый шаблон для нахождения переменной x, но, так как не смогла его найти, то начала рекурсивный поиск шаблонов для решения концептуальной подзадачи – нахождения t как переменной, которая требуется для нахождения x. После того, как данная шаблон (формула) для нахождения t была найдена, идёт её применения. В случае ошибки программа бы рекурсивно перешла дальше и так до тех пор, пока не кончились бы все формулы. После того, как шаблон для t был найден, идёт вторая попытка применения шаблона для x. В случае успеха происходит вывод.
Следует отметить, что процесс поиска вспомогательных концептуальных задач последовательный, так как интерпретатор языка выводит ошибку при нахождения первого несоответствия и не просматривает строку дальше.
Таким образом, можно решать задачи практически любой сложности. Глубину рекурсии также можно регулировать во избежание попадания в бесконечный цикл. Можно выделить две базовые задачи эксперта по моделированию. Первая – это наполнение базы данных и знаний (по сути – математических формул) для предметной области. Вторая – правильное описание данных для нахождения решения данной конкретной задачи.
Принципиальная схема решения:
Судоку
Судоку (яп. 数独 су:доку) — популярная головоломка-пазл с числами. В переводе с японского «су» — «цифра», «доку» — «стоящая отдельно». Иногда судоку называют «магическим квадратом», что в общем-то не верно, так как судоку является латинским квадратом 9-го порядка. Судоку активно публикуют газеты и журналы разных стран мира, сборники судоку издаются большими тиражами. Решение судоку — популярный вид досуга.
Игровое поле представляет собой квадрат размером 9x9, разделённый на меньшие квадраты со стороной в 3 клетки. Таким образом, всё игровое поле состоит из 81 клетки. В них уже в начале игры стоят некоторые числа (от 1 до 9), так как незаполненное игровое поле не имеет смысла. В зависимости от того, сколько клеток уже заполнены, конкретную судоку можно отнести к лёгким или сложным.
Существует несколько методов решения судоку. Условно их можно разделить на две категории – логические и вычислительные. К вычислительным методам относится метод полного перебора (BruteForce). Логические – метод одиночного квадрата, закрытого кандидата, голой и скрытой пары, крыло, slicing and dicing и методы предположений различного уровня.
Методы составления судоку начинаются с составления правильного латинского квадрата. Дальнейшее составление идёт либо постепенным вычёркиванием чисел и проверкой на возможность решения, с оценкой сложности по количеству итераций и применяемому методы, либо открытием определённого числа закрытых клеток. Причём как в первом, так и во втором случае вообще говоря судоку может получиться недетерменированным (то есть допускающим несколько вариантов решения для одних и тех же исходных данных).
Исходный вид разработанной программы при решении судоку такой: