Автор: Пользователь скрыл имя, 02 Декабря 2012 в 12:52, курсовая работа
Цель данной курсовой работы: изучение методов оптимизации раскроя, создание компьютерной программы на основе одного из методов и рассмотрение задач о раскрое на конкретных примерах.
Для достижения поставленной цели были решены следующие задачи:
1. Анализ литературы по теме работы
2. Изучение основных понятий
3. Изучение методов оптимизации раскроя стандартных форм
4. Создание программы по оптимизации раскроя
5. Практическое приложение теории к решению текстовых задач
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..3
1. Определение рациональных способов раскроя материала . . . . . . . . . . . . . . 4
2. Определение интенсивности использования рациональных спо¬собов раскроя и модели линейного программирования . . . . . . . . . . . . . . . . . . . . . . 5
3. Практическое приложение теории раскроя к решению задач . . . . . . . . .8
4. Описание алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
5. Программа вычисления оптимального раскроя. . . . . . . . . . . . . . . . . . . .13
6. Описание работы программы на контрольном примере . . . . . . . . . . . . 15
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Табл. 4
Решая задачу, получаем следующий результат:
X1 |
X2 |
X3 |
Х4 |
X5 |
||||
Minimize |
1 |
1 |
1 |
1 |
1 |
|||
Заготовка 120 см |
1 |
1 |
0 |
0 |
0 |
>= |
80 |
-0,5 |
Заготовка 100 см |
1 |
0 |
2 |
1 |
0 |
>= |
120 |
-0,5 |
Заготовка 70 см |
0 |
1 |
0 |
1 |
3 |
>= |
102 |
-0,33 |
Solution |
80 |
0 |
20 |
0 |
34 |
134 |
Табл. 5
Ответы: 1. Пять способов. 2.134 единицы материала.
3. Три из пяти рациональных способов раскроя.
1. Определяется текущее значение длины раскроя L от минимальной длины детали до длины материала.
2. Вычисляется максимальный индекс (номер) детали, добавление которой возможно.
3. Если нет деталей,
которые можно добавить в
Если максимум достигнут, то он запоминается. Последняя добавленная деталь удаляется из раскроя и добавляется следующая (п. 4). Если нет деталей которые можно добавить в раскрой, происходит выход из цикла.
4. Запоминается текущий
раскрой. Длина раскроя
5. Берется начальная длина
раскроя, равная длине
6. Зная количество деталей
для каждого их вида, составляющих
рациональный раскрой,
Вид главного окна программы приведено на рисунке:
Рис. 1
После запуска программы пользователю предлагается ввести длину материала и количество типов деталей, затем нужно заполнить поля таблицы с длиной и стоимостью каждой детали.
После ввода данных для решения нужно нажать кнопку "OK", программа выдаст результат в виде таблицы с оптимальными значениями количества типов деталей. Также выводится общая оценка раскроя и остаток материала.
Рис. 2
Для просмотра всех рациональных способов раскроя необходимо нажать на кнопку "Раскрои".
Рис. 3
Для введения новых данных, необходимо удалить старые с помощью нажатия кнопки "Обновить".
Работу программы опишем на конкретном примере.
Пусть в задаче генерирования линейного раскроя заданы следующие параметры: длина проката L = 40, количество типов деталей m = 4, а значения длин li и стоимости ci каждой детали приведены в таблице:
i |
1 |
2 |
3 |
4 |
li |
7 |
11 |
13 |
17 |
ci |
9 |
14 |
16 |
22 |
Табл. 6
Выбираем начальное
значение длины раскроя,
Чтобы найти максимальную стоимость на каждом шаге, мы перебираем все детали, которые могут поместиться в текущий раскрой, начиная с минимальной по длине. Для подсчета стоимости раскроя на текущем шаге мы вычитаем длину очередной выбранной детали из текущего раскроя и по таблице находим раскрой с длиной, равной полученному остатку и суммируем его оценку с оценкой выбранной детали. Из вычисленных оценок выбираем максимальную и заносим её в таблицу, вместе с номером детали, при которой эта оценка была получена.
Далее в таблице приведены результаты первого этапа (прямого хода) процесса:
l |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
f(l) |
9 |
9 |
9 |
9 |
14 |
14 |
16 |
18 |
18 |
18 |
22 |
23 |
23 |
25 |
27 |
28 |
28 |
i(l) |
1 |
1 |
1 |
1 |
2 |
2 |
3 |
1 |
1 |
1 |
4 |
1 |
1 |
1 |
1 |
2 |
2 |
l |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
f(l) |
31 |
32 |
32 |
34 |
36 |
37 |
38 |
40 |
41 |
42 |
44 |
45 |
46 |
47 |
49 |
50 |
51 |
i(l) |
1 |
1 |
1 |
1 |
1 |
1 |
3 |
1 |
1 |
2 |
4 |
1 |
1 |
1 |
1 |
1 |
1 |
Табл. 7
Здесь и далее i(l) – номер детали, которой соответствует максимальная оценка раскроя (сумма стоимости всех деталей, входящих в раскрой) f(l) на шаге l.
Рассмотрим более подробно последовательное заполнение таблицы на примере шагов
l = 7…14, 22.
Выбираем первую деталь: i = 1. Длина детали 7, оценка 9.
Вычисляем остаток от раскроя: 7 – 7 = 0. Поскольку остаток нулевой, то деталей, которые можно добавить в раскрой, нет. Следовательно, максимальная оценка текущего раскроя равна f = 9. Заносим в таблицу значения i(7) = 1, f(7) = 9 и переходим к следующему шагу раскроя.
2) l = 8
Снова берём первую деталь: i = 1. Длина детали 7, оценка 9.
Остаток: 8 – 7 = 1. Так как деталей с такой длиной нет, максимальная оценка раскроя f = 9. Заносим в таблицу i(8) = 1, f(8) = 9.
3) l = 9
i = 1, остаток 9 – 7 = 2, f = 9.
Заносим в таблицу i(9) = 1, f(9) = 9.
4) l = 10
i = 1, остаток 10 – 7 = 3, f = 9.
Заносим в таблицу i(10) = 1, f(10) = 9.
5) l = 11
i = 1, остаток 11 – 7 = 4, f = 9.
Учитывая, что в текущий раскрой также уместится деталь i = 2 c длиной 11, получим: i = 2, остаток 11 – 11 = 0, f = 14.
Сравним оценки раскроев. Выберем максимальную оценку (f = 14) и соответствующую ей деталь (i = 2).
Заносим в таблицу i(11) = 2, f(11) = 14.
6) l = 12
i = 1, остаток 12 – 7 = 5, f = 9.
I = 2, остаток 12 – 11 = 1, f = 14 (максимум)
Заносим в таблицу i(12) = 2, f(12) = 14.
7) l = 13
i = 1, остаток 13 – 7 = 6, f = 9.
I = 2, остаток 13 – 11 = 2, f = 14.
I = 3, остаток 13 – 13 = 0, f = 16 (максимум)
Заносим в таблицу i(13) = 3, f(13) = 16.
8) l = 14
i = 1, остаток 14 – 7 = 7.
Если мы видим, что длина остатка раскроя больше или равна начальному значению длины раскроя (l0 = 7), т.е. в остаток может поместиться какая-либо деталь (в данном случае с индексом i = 1), из таблицы считываем значение оценки раскроя f(i) при i, равном значению остатка: f (7) = 9, тогда суммарная оценка раскроя f = f(7) + 9 = 9 + 9 = 18 (максимум)
i = 2, остаток 14 – 11 = 3, f = 14.
I = 3, остаток 14 – 13 = 1, f = 16.
Заносим в таблицу i(14) = 1, f(14) = 18.
…16) l = 22
i = 1, остаток 22 – 7 = 15, f (15) = 18, f = 18 + 9 = 27.
I = 2, остаток 22 – 11 = 11, f(11) = 14, f = 14 + 14 = 28 (максимум)
i = 3, остаток 22 – 13 = 9, f(9) = 9, f = 9 + 16 = 25.
I = 4, остаток 22 – 17 = 5, f = 22.
Заносим в таблицу i(22) = 2, f(22) = 28. И т.д., пока не достигнут конец проката.
Выполняем обратный ход (начинаем двигаться с конца таблицы):
Из таблицы получаем индекс детали, добавленной в текущий раскрой: i(40) = 1.
Находим длину детали с полученным индексом: l1 = 7.
Вычисляем остаток раскроя: 40 – 7 = 33. Этот остаток используем для следующего шага обратного хода.
2) l = 33
Индекс детали: i(33) = 2.
Длина детали: l2 = 11.
Остаток раскроя: 33 – 11 = 22.
3) l = 22
Индекс детали: i(22) = 2.
Длина детали: l2 = 11.
Остаток раскроя: 22 – 11 = 11.
4) l = 11
Индекс детали: i(11) = 2.
Длина детали: l2 = 11.
Остаток раскроя: 11 – 11 = 0. Обратный ход закончен.
Теперь подсчитываем количество деталей каждого типа, которые мы получили при обратном ходе. Деталь с индексом i = 1 встретилась 1 раз, деталь с индексом i = 2 встретилась 3 раза.
Таким образом, искомый оптимальный
раскрой характеризуется
В вышеприведённой таблице с результатами прямого хода выделены номера заготовок, которые при обратном ходе последовательно включались в оптимальный раскрой.
Результат работы программы (проверка алгоритма):
Исходные данные
Длина проката: 40
Количество типов деталей: 4
Длина детали №1….: 7 Цена детали №1….: 9
Длина детали №2….: 11 Цена детали №2….: 14
Длина детали №3….: 13 Цена детали №3….: 16
Длина детали №4….: 17 Цена детали №4….: 22
Результат
Рис. 4
Рис.5
Оптимальное количество деталей каждого типа:
Деталь №1….: 1 шт.
Деталь №2….: 3 шт.
Деталь №3….: 0 шт.
Деталь №4….: 0 шт.
Оценка раскроя: 51 денежных единиц
Остаток материала: 0
Результаты ручного и машинного вычислений совпадают, что говорит о работоспособности разработанного алгоритма.
Заключение
Задача оптимального раскроя материалов является одной из самых важных в ресурсосберегающих технологиях для заготовительного производства, поскольку напрямую ведет к экономии материалов и снижению отходов.
Одним из вариантов такой задачи является задача оптимального линейного раскроя материалов, в рассматриваемом случае − раскрой стержня. Специфика исследуемой задачи требует рассмотрения большого числа возможных компоновок заготовок.
В работе были рассмотрены основные понятия раскроя стандартных форм, показано практическое приложение к решению возникающих задач. Для оптимизации расчетов по таким задачам была разработана программа на языке Delphi, позволяющая реализовать целенаправленный перебор всех способов рационального раскроя за конечное число шагов, в результате чего находится рациональный раскрой с максимумом прибыли.
В данной работе поставленная
задача была решена с помощью сеточного
метода. Как показала проделанная
работа, этот метод эффективен и
прост для программной
В курсовой работе были произведены ручные вычисления и по ним проверена работа запрограммированного алгоритма на ЭВМ. Программа может применяться в различных отраслях промышленности при массовом производстве, при этом в алгоритм следует вносить коррективы, связанные с учетом технологии производства и применяемого оборудования.