|
@@ -77,7 +77,7 @@
|
|
|
Описание проекта
|
|
|
ТЗ
|
|
|
|
|
|
- МДК 02.03
|
|
|
+ МДК 02.03. Математическое моделирование
|
|
|
Задача двухпроцессорного обслуживания. Задача Джонсона.
|
|
|
Общий вид задачи Джонсона:
|
|
|
Имеется n деталей и два станка. Каждая деталь должна сначала пройти обработку на первом станке, затем - на втором. При этом i-ая деталь обрабатывается на первом станке за ai времени, а на втором - за bi времени. Каждый станок в каждый момент времени может работать только с одной деталью. Требуется составить такой порядок подачи деталей на станки, чтобы итоговое время обработки всех деталей было бы минимальным.
|
|
@@ -91,7 +91,7 @@
|
|
|
Пример решения задачи Джонсона в Excel:
|
|
|
|
|
|
Рисунок 1 - Пример решения задачи Джонсона в MS Excel
|
|
|
-Краткое изложение задачи в Excel:
|
|
|
+ Алгоритм решения задачи в Excel:
|
|
|
Дана исходная таблица порядка операций на двух станках (1.1.) последовательно выбираются минимальные элементы и записываются в новую таблицу: на первой итерации минимальный элемент - это 4.
|
|
|
Все строки, содержащие 4, будут помещены вниз, но сначала они сортируются так, чтобы первое число самого нижнего элемента было большим. Т.е. вниз помещается сначала (4, 18), а затем (4,14). (4,4) можно поместить куда угодно, но в данном случае он помещается вверх.
|
|
|
На последующих итерациях процедура повторяется, последовательно выделяются следующие минимальные элементы: 6, 7, 11.
|
|
@@ -139,7 +139,7 @@
|
|
|
В конструктор объекта <<Граф>> подается код Прюфера в формате строки. Затем строка разбивается по пробелу и парсится в целочисленное значение, после чего передается методу <<Декодирование Прюфера>>.
|
|
|
В методе <<Декодирование Прюфера>> создается список вершин с последовательными значения от 1 до n (в соответствии с тем, что в коде Прюфера n чисел). Среди вершин находится минимальная из тех, которые встречаются в коде Прюфера. Из этой вершины и первого значения кода составляется новое ребро графа. Соответствующие вершины вычеркиваются из обоих списков. Процедура продолжается до тех пор, пока в коде не останется значений. Последнее ребро составляется из двух оставшихся значений в списке вершин.
|
|
|
Полученные значения пользователь может получить посредством свойства <<Ребра>>, в которое информация записывается сразу непосредственно из метода <<Декодирование Прюфера>>.
|
|
|
- На вход программы было подано 2 txt файла, которые содержат стрроку с кодом Прюфера. Как результат, в другие файлы программа записываем восстановленные ребра дерева.
|
|
|
+ На вход программы было подано 2 txt файла, которые содержат строку с кодом Прюфера. Как результат, в другие файлы программа записываем восстановленные ребра дерева.
|
|
|
|
|
|
Рисунок 6 - Входные и выходные данные при восстановлении ребер по коду Прюфера
|
|
|
Моделирование системы <<хищник-жертва>>
|
|
@@ -192,7 +192,7 @@
|
|
|
Если раньше численность популяции жертв была в разбросе от 100 до 4000 особей, т.е. значительно колебалась, то теперь колебания проходят в рамках 600-700 особей, т.е. колебание снизилось в 39 раз. Популяция хищников колебалась от 10 до 480 особей, а теперь в рамках 45-60 особей, колебания этой популяции снизилось в 31,3 раза.
|
|
|
Задача Монте-Карло
|
|
|
Общее описание:
|
|
|
- Метод Монте-Карло -- это численный метод решения математических задач, который основан на использовании генератора случайных чисел. Генератор случайных чисел в методе Монте-Карло используется для моделирования случайных опытов (бросание монеты, игрального кубика, точки на плоскую фигуру) и случайных потоков (потоки писем, посылок, посетителей). Метод Монте-Карло состоит в воспроизведении на компьютере опыта случайного разбрасывания n песчинок с использованием генератора случайных чисел и с подсчетом числа k песчинок, которые попали на фигуру.
|
|
|
+ Метод Монте-Карло -- это численный метод решения математических задач, который основан на использовании генератора случайных чисел. Генератор случайных чисел в методе Монте-Карло используется для моделирования случайных опытов (бросание монеты, игрального кубика, точки на плоскую фигуру) и случайных потоков (потоки писем, посылок, посетителей). Метод Монте-Карло состоит в воспроизведении на компьютере опыта случайного разбрасывания n песчинок с использованием генератора случайных чисел и с подсчетом числа k песчинок, которые попали на фигуру. S=k/n*S0, где n - общее число песчинок, k - число песчинок, попавших в фигуру, S - искомая площадь, S0 - площадь прямоугольника, в который вписана искомая фигура.
|
|
|
Программирование на языке C#:
|
|
|
В Приложении А в листинге 13 изложены методы класса <<Задача Монте-Карло>>, которые вычисляют приближенные значения:
|
|
|
Числа PI;
|
|
@@ -200,10 +200,39 @@
|
|
|
Также в Приложение представлен главный метод программы, подающий основные данные на вычисление методам (листинг 14).
|
|
|
Краткое изложение метода нахождения числа PI:
|
|
|
На вход методу подается информация о радиусе круга (посредством которого вычисляется искомая величина), значение n (количество разбрасываемых песчинок) и шаг - до какой точности дробятся величины координатных осей при генерации нового случайного значения. Например, если имеем интервал [0;2], то при h=1, возможные значения {0,1,2}, а при h=0.1, возможные значения равны {0, 0.1, 0.2, ..., 1.9, 2.0}.
|
|
|
-
|
|
|
+ Задается переменная k, определяющая случайное число песчинок, попавших в круг радиусом r. Цикл в n итераций определяет новые случайные значения координат песчинки, и если ее координаты относятся к кругу, инкрементирует значение k.
|
|
|
+ Из программы возвращает значение, соответствующее формуле Монте-Карло: S=k/n*S0, S0=2*r*2*r (площадь описанного прямоугольника) => PI=k/n*4*r[2][.]
|
|
|
Краткое изложение метода нахождения площади фигуры:
|
|
|
-
|
|
|
+ На вход методу подается информация о сторонах прямоугольника, в которые вписана искомая фигура, набор функций, которые задают фигуру, координата оси x, с которой начинается фигура (предполагается, что ограничения по оси y описываются функциями), а также число разбрасываемых песчинок n и шаг в координатах h.
|
|
|
+ Задается переменная k, определяющая случайное число песчинок, попавших в круг радиусом r. Цикл в n итераций определяет новые случайные значения координат песчинки. Затем к песчинке применяется делегат из функций, описывающих фигуру, и если булево значение, определяющее попадание точки в фигуру, остается истинным, считается, что песчинка попала в фигуру, и инкрементируется значение k.
|
|
|
+ Из программы возвращает значение, соответствующее формуле Монте-Карло: S = k/n*S0, S0=a*b.
|
|
|
+ Входные данные программы описываются в главном методе main, а результаты вычислений подаются на консоль.
|
|
|
+
|
|
|
+Рисунок 13 - Выходные данные с результатами вычисления числа PI и площади фигур методом Монте-Карло
|
|
|
Распределение инвестиций
|
|
|
+ Постановка задачи:
|
|
|
+ Инвестор выделяет средства в размере D условных единиц, которые должны быть распределены между m предприятиями. Каждое i-е предприятие при инвестировании в него средств x приносит прибыль φi(x)усл. ед., i=1,m. Нужно выбрать оптимальное распределение инвестиций между предприятиями, обеспечивающее максимальную прибыль.
|
|
|
+ Определить выигрыш W, который является прибылью, приносимой m предприятиями.
|
|
|
+ Пример решения задачи распределения инвестиций в Excel:
|
|
|
+
|
|
|
+Рисунок 14 - Табличное распределение инвестиций по четырем банкам с шагом инвестиции 50
|
|
|
+ Алгоритм решения задачи в Excel:
|
|
|
+ Сначала описывается матрица исходных ставок: первая строка - банки, первый столбец - количества вкладываемых условных денежных единиц, пересечение строки и столбца - ставка в определенном банке на определенную сумму.
|
|
|
+ Определяются все возможные варианты распределения инвестиций, сначала для 0 усл. ед., потом для 50 усл. ед., для 100, 150 и 200 усл. ед. Рассматриваются распределения этих долей между двумя банками, при этом начинают с конца, т.е. между 3 и 4 банками.
|
|
|
+ Для каждых соотношений определяют сумму ставок, например 0 усл. ед. в 3 банк и 50 усл. ед. в 4 банк. И так до конца таблицы.
|
|
|
+ Для каждой доли (50, 100, 150, 200) находят максимальную.
|
|
|
+ Определяют какое соотношение сработало для последнего банка при максимальной ставке.
|
|
|
+ Последний столбец исходной таблицы удаляют, а предпоследний заменяют максимальными соотношениями.
|
|
|
+ Пункты 3-6 повторяют с отстающими столбцами до тех пор, пока не останется 2 столбца.
|
|
|
+ Для последних 2х столбцов рассматривают лишь максимальную долю инвестиции, т.е. 20, повторяют пункты 4-5.
|
|
|
+ Получившееся значение для 200 и есть искомая максимальная прибыль от инвестиций. По полученным таблицам из пункта 5 определяют сколько усл. ед. нужно положить в каждый из банков.
|
|
|
+ Программирование на языке C#:
|
|
|
+ В Приложении А в листингах 15-17 изложены конструктор, свойства и методы класса <<Инвестиция>>, которые позволяют получить оптимальное распределение инвестиций, а также методы для чтения и записи данных с помощью txt файлов (листинг 18), и главный метод программы, вызывающий все остальные (листинг 19).
|
|
|
+ Краткое изложение написанного программного кода:
|
|
|
+ В конструктор объекта <<Инвестиция>> подается
|
|
|
+ На вход программы был подан txt файла, который содержит строку с информацией о количестве инвестиций и шаге инвестиции, а также матрицу ставок в нескольких банках. Как результат, в другой файл программа записывает итоговую сумма и оптимальное распределение по банкам.
|
|
|
+
|
|
|
+Рисунок 15 - Входные и выходные данные при решение задачи распределения инвестиций
|
|
|
|
|
|
ЗАКЛЮЧЕНИЕ
|
|
|
|
|
@@ -237,4 +266,13 @@
|
|
|
|
|
|
Листинг 14 - Входные данные для задачи Монте-Карло
|
|
|
|
|
|
-
|
|
|
+Листинг 15 - Класс <<Инвестиция>> со свойствами, полями и конструктором
|
|
|
+
|
|
|
+Листинг 16 - Метод <<Распределить>> класса <<Инвестиция>>, который рекурсивно определяет новую матрицу доходов и матрицу максимумов для каждого вклада
|
|
|
+
|
|
|
+Листинг 17 - Методы <<Получить оптимальное распределение>> и <<Рассчитать доход>> определяют выходные данные распределения инвестиций
|
|
|
+
|
|
|
+Листинг 18 - Методы считывания и печати данных в файлы для задачи распределения инвестиций
|
|
|
+
|
|
|
+Листинг 19 - Главный метод программы, который считывает матрицу ставок разных банков по разны сумма из файла, и записывает оптимальное распределение инвестиций в другой файл
|
|
|
+
|