Пензенский государственный университет Факультет вычислительной техники Кафедра "Информационно-вычислительные системы"
...
14 downloads
509 Views
369KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Пензенский государственный университет Факультет вычислительной техники Кафедра "Информационно-вычислительные системы"
А.В.Еременко, З.И.Баусова ИСПОЛЬЗОВАНИЕ OpenOffice.org Calc ДЛЯ РЕШЕНИЯ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ.
Методические указания
Пенза 2010
УДК 336
Использование OpenOffice.org Calc для решения задач линейного программирования. Рассмотрены приемы работы с электронными таблицами OpenOffice.org Calc при решении задач линейного программирования. Рассмотрены одноиндексные и двухиндексные задачи линейного программирования, а также особенности целочисленности оптимального плана. Пособие предназначено для студентов специальности 080801 "Прикладная информатика в экономике".
3
Оглавление 1.Решение задач линейного программирования с использованием Calc...............4 2.Инструкция по использованию Calc для решения задач ЛП. ..............................4 3.Одноиндексные задачи ЛП......................................................................................5 3.1.Создание листа и ввод на него условия задачи...............................................5 3.2.Ввод зависимостей из математической модели на лист................................6 3.3.Проверка правильности введения формул......................................................8 3.4.Задание ЦФ........................................................................................................9 3.5.Ввод ограничений и граничных условий......................................................10 3.5.1.Задание ячеек переменных......................................................................10 3.5.2.Задание граничных условий для допустимых значений переменных.10 3.5.3.Задание знаков ограничений ≥, ≤, =........................................................10 3.6.Решение задачи................................................................................................12 3.6.1.Установка параметров решения задачи..................................................12 3.7.Запуск задачи на решение...............................................................................12 4.Целочисленное программирование......................................................................13 5.Двухиндексные задачи ЛП.....................................................................................14
4
1.
Решение задач линейного программирования с использованием Calc
Цель работы — приобретение навыков решения задач линейного программирования (ЛП) в табличном редакторе CALC.
2.
Инструкция по использованию Calc для решения задач ЛП.
Для того чтобы решить задачу ЛП в табличном редакторе Calc, необходимо выполнить следующие действия. 1. Ввести условие задачи: 2. создать лист электронной таблицы для ввода условия задачи: • переменных, • целевой функции (ЦФ), • ограничений, • граничных условий; 3. ввести исходные данные в ячейки листа электронной таблицы: • коэффициенты ЦФ, • коэффициенты при переменных в ограничениях, • правые части ограничений; 4. ввести на лист зависимости из математической модели: • формулу для расчета ЦФ, • формулы для расчета значений левых частей ограничений; 5. задать целевую функцию (ЦФ) (в окне "Поиск решения"): • целевую ячейку, • направление оптимизации ЦФ; 6. ввести ограничения и граничные условия (в окне "Поиск решения"): • ячейки со значениями переменных, • граничные условия для допустимых значений переменных, • соотношения между правыми и левыми частями ограничений. 2. Решить задачу: 2. установить параметры решения задачи (в окне "Поиск решения"); 3. запустить задачу на решение (в окне "Поиск решения").
5
3.
Одноиндексные задачи ЛП
Рассмотрим пример нахождения решения для следующей одноиндексной задачи ЛП:
(3.1)
3.1.
Создание листа и ввод на него условия задачи
Лист электронной таблицы для ввода условий задачи (3.1) вместе с введенными на него исходными данными представлен на рис.1.
Рис. 1: Лист электронной таблицы с условиями задачи Из рис.1 видно, что каждой переменной и каждому коэффициенту задачи поставлена в соответствие конкретная ячейка в Calc. Имя ячейки состоит из буквы, обозначающей столбец, и цифры, обозначающей строку, на пересечении которых находится объект задачи ЛП. Так, например, переменным задачи (3.1) соответствуют ячейки B3, C3, D3, E3, коэффициентам ЦФ соответствуют ячейки B6 (130,5), C6 (20), D6 (56), E6 (87,8), правым частям ограничений соответствуют ячейки H10 (756), H11 (450), H12 (89) и т.д.
6 3.2.
Ввод зависимостей из математической модели на лист
Зависимость для ЦФ В ячейку F6, в которой будет отображаться значение ЦФ, необходимо ввести формулу, по которой это значение будет рассчитано. Согласно (3.1) значение ЦФ определяется выражением 130,5 x1 20x 256x 387,8 x 4
(3.2)
Используя обозначения соответствующих ячеек в Calc (см. рис. 1), формулу для расчета ЦФ (3.2) можно записать как сумму произведений каждой из ячеек, отведенных для значений переменных задачи (B3, C3, D3, E3), на соответствующую ячейку, отведенную для коэффициентов ЦФ (B6, C6, D6, E6), то есть B6⋅B3C6⋅C3 D6⋅D3E6⋅E3
(3.3)
Чтобы задать формулу (3.3) необходимо в ячейку F6 ввести следующее выражение и нажать клавиши Ctrl+Shift+Enter = SUMPRODUCT B $ 3 : E $ 3 ; B6 : E6
(3.4)
где символ $ перед номером строки 3 означает, что при копировании этой формулы в другие ячейки листа Calc номер строки 3 не изменится; символ : означает, что в формуле будут использованы все ячейки, расположенные между ячейками, указанными слева и справа от двоеточия (например, запись B6:E6 указывает на ячейки B6, C6, D6 и E6). После этого в целевой ячейке появится 0 (нулевое значение)
Рис. 2: Лист задачи (3.1) после ввода всех необходимых формул (курсор в ячейке F6) Примечание. Существует другой способ задания функций в Calc с помощью режима "Вставка функций", который можно вызвать командой меню Вставка → Функция или при нажатии кнопки f(x) на стандартной панели инструментов. Так, например, формулу (3.4) можно задать следующим образом:
7 • поместить курсор в поле F6; • нажать кнопку f(x) и вызвать окно "Мастер функций"; • выбрать в окне "Категория" категорию "Массив"; • в окне "Функция" выбрать функцию SUMPRODUCT и нажать кнопку Далее; • в появившемся окне SUMPRODUCT в строку "Массив 1" ввести выражение B$3:E$3, а в строку "Массив 2" – выражение B6:E6 (рис.3); • после ввода ячеек в строки "Массив 1" и "Массив 2" в окне SUMPRODUCT в поле Результат появится текущее значение, вычисленное по введенной формуле, то есть 0 (так как в момент ввода формулы значения переменных задачи нулевые).
Рис. 3: Ввод формулы для расчета ЦФ в окне "Мастер функций" Левые части ограничений Левые части ограничений задачи (3.1) представляют собой сумму произведений каждой из ячеек, отведенных для значений переменных задачи (B3, C3, D3, E3), на соответствующую ячейку, отведенную для коэффициентов конкретного ограничения (B10, C10, D10, E10 – первое ограничение; B11, C11, D11, E11 – второе ограничение и B12, C12, D12, E12 – третье ограничение). Формулы, соответствующие левым частям ограничений, представлены в табл.3.1.
8 Таблица 3.1: Левая часть ограничения
Формула Calc
−1,8 x 12x2 x 3−4x4 или B10⋅B3C10⋅C3 D10⋅D3E10⋅E3
=SUMPRODUCT(B$3:E$3;B10:E10)
−6x 12x2 4x 3−x 4 или B11⋅B3C11⋅C3D11⋅D3E11⋅E3
=SUMPRODUCT(B$3:E$3;B11:E11)
4x 1−1,5 x 210,4 x 313x 4 или B12⋅B3C12⋅C3 D12⋅D3E12⋅E3
=SUMPRODUCT(B$3:E$3;B12:E12)
Как видно из табл.3.1, формулы, задающие левые части ограничений задачи (3.1), отличаются друг от друга и от формулы (3.4) в целевой ячейке F6 только номером строки во втором массиве. Этот номер определяется той строкой, в которой ограничение записано на листе. Поэтому для задания зависимостей для левых частей ограничений достаточно скопировать формулу из целевой ячейки в ячейки левых частей ограничений. Для этого необходимо: • поместить курсор в поле целевой ячейки F6 и скопировать в буфер содержимое ячейки F6 (клавишами Ctrl-С); • помещать курсор поочередно в поля левой части каждого из ограничений, то есть в F10, F11 и F12, и вставлять в эти поля содержимое буфера (клавишами Ctrl-V) (при этом номер ячеек во втором массиве формулы будет меняться на номер той строки, в которую была произведена вставка из буфера); • на экране в полях F10, F11 и F12 появится 0 (нулевое значение) (см. рис.2). 3.3.
Проверка правильности введения формул
Для проверки правильности введенных формул производите поочередно нажатие левой клавиши мыши на ячейках с формулами. При этом на экране рамкой будут выделяться ячейки, используемые в формуле, а в строке ввода будут появляться сами формулы (рис.4 и 5).
9
Рис. 4: Проверка правильности введения формулы в целевую ячейку F6 Рис. 5: Проверка правильности введения формулы в ячейку F12 для левой части ограничения 3 3.4.
Задание ЦФ
Дальнейшие действия производятся в окне "Решатель", которое вызывается командой меню Сервис → Поиск решения (рис.6): • щелкните левой кнопкой мыши по целевой ячейке (F6);
Рис. 6: Окно "Решатель" задачи (3.1) • выполните команду меню Сервис → Поиск решения; • Проверьте, находится ли в поле "Целевая ячейка" адрес целевой ячейки ($F$6);
10 • если нет, то введите адрес целевой ячейки $F$6 или щелкните левой кнопкой мыши по целевой ячейке — это будет равносильно вводу адреса с клавиатуры; • установите переключатель Оптимизация результата → Максимум (введите направление оптимизации ЦФ). 3.5.
Ввод ограничений и граничных условий 3.5.1. Задание ячеек переменных
В окне "Решатель" в поле "Путем изменения ячеек" впишите адреса $B$3:$E$3. Необходимые адреса можно вносить в поле "Путем изменения ячеек" и автоматически, путем выделения мышью соответствующих ячеек. 3.5.2. Задание граничных условий для допустимых значений переменных В нашем случае на значения переменных накладывается только граничное условие неотрицательности, то есть их нижняя граница должна быть равна нулю (см. рис.1). • В разделе "Ограничительные условия" окна "Решатель" в первое поле "Ссылка на ячейку" введите адреса ячеек переменных $B$3:$E$3. Это можно сделать как с клавиатуры, так и путем выделения мышью всех указанных ячеек непосредственно на листе. • В поле "Операция" откройте список предлагаемых знаков и выберите ≥ . • В поле "Значение" введите адреса ячеек нижней границы значений переменных, то есть $B$4:$E$4. Их также можно ввести путем выделения мышью непосредственно на листе (см. Рис. 7). 3.5.3. Задание знаков ограничений ≥, ≤, = • В следующее поле "Ссылка на ячейку" введите адрес ячейки левой части конкретного ограничения, например $F$10. Это можно сделать как с клавиатуры, так и путем выделения мышью нужной ячейки непосредственно на листе. • В соответствии с условием задачи (3.1) выбрать в поле "Операция" необходимый знак, например =. • В поле "Значение" введите адрес ячейки правой части рассматриваемого ограничения, например $H$10. • Аналогично введите ограничения: $F$11≥$H$11, $F$12≤,$H$12.
11
Рис. 7: Окно "Решатель" после ввода первого ограничения Окно "Решатель" после ввода всех необходимых данных задачи (3.1) представлено на рис.8.
Рис. 8: Окончательный вид окна "Решатель"
12 3.6.
Решение задачи
3.6.1. Установка параметров решения задачи Задача запускается на решение в окне "Решатель". Но предварительно для установления конкретных параметров решения задач оптимизации определенного класса необходимо нажать кнопку "Параметры" и заполнить некоторые поля окна "Параметры" (рис.9).
Рис. 9: Параметры поиска решения Параметр "Ограничение поиска решения по времени" служит для назначения времени (в секундах), выделяемого на решение задачи. Можно установить время, не превышающее 32 767 секунд (более 9 часов). Параметр "Ограничить глубину ветвей и границ" служит для управления временем решения задачи путем ограничения числа промежуточных вычислений. Параметр "Принять переменные как не отрицательные" служит для задания неотрицательности переменных. Параметр "Принять переменные как целочисленные" служит для задания целочисленности переменных. Подтвердите установленные параметры нажатием кнопки OK. 3.7.
Запуск задачи на решение
Запуск задачи на решение производится из окна "Решатель" путем нажатия кнопки "Решить". После запуска на решение задачи ЛП на экране появляется окно "Результат", представленное на рис.10.
13
Рис. 10: Сообщение об успешном решении задачи Иногда сообщения в окне "Результат" свидетельствуют не о характере оптимального решения задачи, а о том, что при вводе условий задачи в Calc были допущены ошибки, не позволяющие Calc найти оптимальное решение, которое в действительности существует. Если при заполнении полей окна "Решатель" были допущены ошибки, не позволяющие Calc применить симплекс-метод для решения задачи или довести ее решение до конца, то после запуска задачи на решение на экран будет выдано соответствующее сообщение с указанием причины, по которой решение не найдено. Для получения ответа (значений переменных, ЦФ и левых частей ограничений) на листе просто нажмите кнопку Сохранить результат. После этого на листе появляется оптимальное решение задачи (рис.11).
Рис. 11: Экранная форма задачи (3.1) после получения решения
4.
Целочисленное программирование
Допустим, что к условию задачи (3.1) добавилось требование целочисленности значений всех переменных. В этом случае описанный выше процесс ввода условия задачи необходимо дополнить следующими шагами. • На листе электронной таблицы укажите, на какие переменные накладывается требование целочисленности (этот шаг делается для наглядности восприятия условия задачи) (рис.12).
14 • в дополнительном поле "Ссылка на ячейку" введите адреса ячеек переменных задачи, то есть $B$3:$E$3; • в поле ввода "Операция" установите "целое". На рис.12 представлено решение задачи (3.1), к ограничениям которой добавлено условие целочисленности значений ее переменных. Следует заметить, что время решения целочисленных задач заметно больше времени решения задач при отсутствии требования целочисленности.
Рис. 12: Целочисленное решение задачи (3.1).
5.
Двухиндексные задачи ЛП
Двухиндексные задачи ЛП вводятся и решаются в Calc аналогично одноиндексным задачам. Специфика ввода условия двухиндексной задачи ЛП состоит лишь в удобстве матричного задания переменных задачи и коэффициентов ЦФ. Рассмотрим решение двухиндексной задачи, суть которой заключается в оптимальной организации транспортных перевозок штучного товара со складов в магазины (табл.5.1). Таблица 5.1: Исходные данные транспортной задачи
1-й склад 2-й склад 3-й склад 4-й склад Потребности, шт.
Тарифы, руб./шт. 1-й магазин 2-й магазин 3-й магазин 2 9 7 1 0 5 5 4 100 2 3 6 45 90 50
Запасы, шт.
Целевая функция и ограничения данной задачи имеют вид
25 50 35 75
15
Вид листа электронной таблицы, задание переменных, целевой функции, ограничений и граничных условий приведенной двухиндексной задачи и ее решение представлены на рис.13, 14, 15 и в табл.5.2.
Рис. 13: Лист двухиндексной задачи (курсор в целевой ячейке F15)
Таблица 5.2: Формулы для листа двухиндексной задачи Объект математической модели
Выражение в Excel
16 Переменные задачи Формула в целевой ячейке F15 Ограничения по строкам в ячейках F3, F4, F5, F6 Ограничения по столбцам в ячейках С7, D7, E7 Суммарные запасы и потребности в ячейках H8, G9
C3:E6 =SUMPRODUCT(C3:E6;C12:E15) =SUM(C3:E3) =SUM(C4:E4) =SUM(C5:E5) =SUM(C6:E6) =SUM(C3:C6) =SUM(D3:D6) =SUM(E3:E6) =SUM(H3:H6) =SUM(C9:E9)
Рис. 14: Лист после получения решения двухиндексной задачи
Рис. 15: Ограничения и граничные условия задачи