Возможна ли разработка приложения на Octave с GUI? |
Решение оптимизационных задач
Пример 10.10. Для изготовления четырёх видов изделий используется токарное, фрезерное, сверлильное, расточное шлифовального оборудование, а также комплектующие изделия. Сборка изделий требует сборочно-наладочных работ. В таблице 10.4 представлены: нормы затрат ресурсов на изготовление различных изделий, наличие каждого из ресурсов, прибыль от реализации одного изделия, ограничения на выпуск изделий второго и третьего типа [1]. Сформировать план выпуска продукции для достижения максимальной прибыли.
Ресурсы | Нормы затрат на одно изделие | Общий объём ресурсов | ||||
Производительность оборудования (человеко-ч) | ||||||
токарного | 550 | 620 | 64270 | |||
фрезерного | 40 | 30 | 20 | 20 | 4800 | |
сверлильного | 86 | 110 | 150 | 52 | 22360 | |
расточного | 160 | 92 | 158 | 128 | 26240 | |
шлифовального | 158 | 30 | 50 | 7900 | ||
Комплектующие изделия (шт.) | 3 | 4 | 3 | 3 | 520 | |
Сборочно-наладочные работы (человеко-ч) | 4.5 | 4.5 | 4.5 | 4.5 | 720 | |
Прибыль от реализации одного изделия (тыс. руб.) | 315 | 278 | 573 | 370 | ||
Выпуск | ||||||
минимальный | 40 | |||||
максимальный | 120 |
Пусть — количество изделий первого вида, — количество изделий второго вида, и — количество изделий третьего и четвёртого вида соответственно. Тогда прибыль от реализации всех изделий вычисляется по формуле
( 10.12) |
Ограничения на фонд рабочего времени формируют следующие ограничения
( 10.13) |
Ограничение на возможное использование комплектующих изделий
( 10.14) |
Ограничение на выполнение сборочно-наладочных работ
( 10.15) |
Ограничения на возможный выпуск изделий каждого вида
( 10.16) |
Сформулируем задачу линейного программирования.
Найти значения и
при которых функция цели (10.12) достигает своего максимального значения и выполняются ограничения (10.13)–(10.16).Рассматриваемая задача из широко известной книги [1] была интересна авторам в связи с тем, что ещё 25 лет назад для решения задач подобной сложности использовали большие ЭВМ и специализированные пакеты решения оптимизационных задач. На подготовку данные и решение её затрачивался не один час. Мы же попробуем решить её в Octave и посмотрим сколько времени у нас на это уйдёт.
Сформируем параметры функции :
— коэффициенты при неизвестных функции цели,
— матрица системы ограничений (четыре переменных и двенадцать ограничений),
— свободные члены системы ограничений,
— массив символов, определяющий тип ограничения9Первые три ограничения типа "меньше", четвёртое и пятое — типа "равно".,
— массив, определяющий тип переменной, в данном случае все переменные целые (задача целочисленного программирования),
— задача на максимум.
Программа решения задачи в Octave представлена в листинге 10.13.
c = [315; 278; 573; 370]; a =[550 0 620 0; 40 30 20 20; 86 110 150 52; 160 92 158 128; 0 158 30 50; 3 4 3 3; 4.5 4.5 4.5 4.5; 0 1 0 0; 0 0 1 0; 1 0 0 0; 0 0 1 0; 0 0 0 1]; b = [64270; 4800; 22360; 26240; 7900; 520; 720; 40; 120; 0; 0; 0]; ctype="UUUUUUULULLL"; vartype= "IIII"; sense =-1; [xmax, fmax, status]= glpk(c, a, b, [ ], [ ], ctype, vartype, sense) % Результаты решения [xmax, fmax, status]= glpk(c, a, b, [ ], [ ], ctype, vartype, sense) xmax = 65 40 46 4 fmax = 59433 status = 171Листинг 10.13. Решение задачи из примера 10.10
Для получения максимальной прибыли () необходимо произвести 65 единиц изделий первого типа, 40 — второго, 46 — третьего - и 4 — четвёртого. Значение параметра говорит о корректности решения задачи линейного программирования.
Для написания программы и решения довольно сложной задачи в Octave понадобилось буквально пару минут.
Подобным образом можно решать всевозможные задачи линейного программирования. Кроме Octave, для решения задач линейного программирования авторы использовали электронные таблицы OpenOffice.org Calc, MS Office Excel, математические программы MathCad, Matlab, Maple, Mathematica, Scilab. На наш взгляд, именно Octave, обладает самой гибкой и мощной функцией для решения задач линейного программирования из всех свободных и проприетарных программ.
Рассмотренных двух функций ( и ) достаточно для решения очень многих оптимизационных задач. Если читателю встретятся оптимизационные задачи, которые невозможно решить с помощью и , то авторы рекомендуют ему обратиться к пакету расширений Minimization для GNU Octave. Краткое описание функций этого пакета на английском языке с некоторыми примерами приведено на странице http://octave.sourceforge.net/optim/overview.html.