Курсовая работа: Оптимальный раскрой материала с максимальной прибылью
currCut.l:=currCut.l-details[currCut.i].l;
currCut.c:=currCut.c+details[currCut.i].c;
currCut.max_i:=-1;
end;
end;
cutRecords[l]:=maxCut;
cutRecords[l].l:=l;
end;
for i:=0 to detailAmount-1 do
begin
x[i]:=0;
end;
l:=materialLength;
while l>=details[0].l do
begin
x[cutRecords[l].i]:=x[cutRecords[l].i]+1;
l:=l-details[cutRecords[l].i].l;
end;
end;
4. Описание программы
Вид главного окна программы приведено на рисунке:
После запуска программы пользователю предлагается ввести длину материала и количество типов деталей, затем нужно заполнить поля таблицы с длиной и стоимостью каждой детали.
После ввода данных для решения нужно нажать кнопку "Вычислить", программа выдаст результат в виде таблицы с оптимальными значениями количества типов деталей. Также выводится общая оценка раскроя, остаток материала и наглядная карта раскроя проката в графической форме. Белые части раскроя обозначают типы деталей, красные линии – линии отреза материала. В случае остатка, соответствующая часть раскроя отображается серым цветом:
5. Контрольный пример
Пусть в задаче генерирования линейного раскроя заданы следующие параметры: длина проката L = 40, количество типов деталей m = 4, а значения длин li и стоимости ci каждой детали приведены в таблице:
i | 1 | 2 | 3 | 4 |
li | 7 | 11 | 13 | 17 |
ci | 9 | 14 | 16 | 22 |
Решаем задачу сеточным методом: сначала выполняем прямой ход. Выбираем начальное значение длины раскроя, равное минимальной длине детали: l0 = minli = 7 и последовательно "шагаем" до конца проката, т.е. 40.
Чтобы найти максимальную стоимость на каждом шаге, мы перебираем все детали, которые могут поместиться в текущий раскрой, начиная с минимальной по длине.Для подсчета стоимости раскроя на текущем шаге мы вычитаем длину очередной выбранной детали из текущего раскроя и по таблице находим раскрой с длиной, равной полученному остатку и суммируем его оценку с оценкой выбранной детали. Из вычисленных оценок выбираем максимальную и заносим её в таблицу, вместе с номером детали, при которой эта оценка была получена.