SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Основы моделирования в
пакете GUSEK/GLPK
v 0.3 2015-03-06
Задача о рационе
Двухиндексные задачи
Форматированный вывод
Заходякин Г.В. postlogist@gmail.com
План занятия
• Содержательная постановка
• Модель с отдельными ограничениями
• Форматированный вывод на экран
• Двухиндексная модель
• Форматы определения данных
2
Содержательная постановка задачи
• Рацион для питания животных на ферме состоит из двух видов кормов A и B.
• Один килограмм корма A стоит 80 ден. ед. и содержит: 1 ед. жиров, 3 ед. белков,
1 ед. углеводов, 2 ед. нитратов. Один килограмм корма B стоит 10 ден. ед. и
содержит 3 ед. жиров, 1 ед. белков, 8 ед. углеводов, 4 ед. нитратов.
• Требуется составить наиболее дешевый рацион питания, обеспечивающий жиров
не менее 6 ед., белков не менее 9 ед., углеводов не менее 8 ед., нитратов не
более 16 ед.
3
МОДЕЛЬ С ОТДЕЛЬНЫМИ
ОГРАНИЧЕНИЯМИ
4
Концептуальная модель
• Данные для решения задачи в табличном виде:
• Отношения между элементами и свойствами:
Корм A B Требование
Цена 80 10 → min
Жиры 1 3 ≥6
Белки 3 1 ≥ 9
Углеводы 1 8 ≥ 8
Нитраты 2 4 ≤ 16
Элементы множества
Свойства
элемента
A B C …Виды корма
Свойства: Цена Жиры Белки Углеводы Нитраты
Требования
к рациону:
→ min
≥
мин.Ж
≥
мин.Б
≥
мин.У
≤
макс.Н
Решения: Кол-во
5
Модель с отдельными ограничениями
• Обозначения для модели:
• Математическая постановка:
A B C …FOOD
Свойства: cost fat prot carb nitr
Требования
к рациону:
→ min ≥ minfat
≥
minprot
≥
mincarb
≤ maxnitr
Решения: buy
(множество)
�
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ⋅ 𝑐𝑐𝑐𝑐𝑐𝑐𝑡𝑡𝑓𝑓 → 𝑚𝑚𝑚𝑚𝑚𝑚
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑓𝑓𝑓𝑓𝑡𝑡𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minfat
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minprot
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ mincarb
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≤ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚
𝑠𝑠. 𝑡𝑡. 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ 0 ∀𝑓𝑓 ∈ 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
6
Подготовка
• Запустите GUSEK и сохраните пустой файл модели под именем korm.mod
(например, на рабочий стол)
– Расширение должно быть обязательно .mod, от этого зависит подсветка
команд и доступный набор действий с файлом
• В этом примере мы будем хранить и модель, и данные в одном
файле
7
Компоненты оптимизационной модели
• Для формализации модели на языке моделирования необходимо
определить следующие компоненты:
1. Множества (set) – соответствуют типам объектов в содержательной постановке
задачи – продукты, клиенты, периоды времени, ресурсы и т.п.; содержат
названия или коды этих объектов
2. Параметры (parameter) – содержат количественные характеристики, которые
заранее известны; могут иметь одно значение, или характеризовать каждый
элемент некоторого множества
3. Переменные (var) – содержат неизвестные заранее количественные
характеристики объектов, т.е. решения, которые необходимо принять в задаче
оптимизации
4. Целевая функция (minimize/maximize) – линейное выражение, соответствующее
критерию эффективности в задаче
5. Ограничения (subject to или s.t.) – линейное выражение, соответствующее
некоторому ограничению/требованию
• Порядок определения компонентов произвольный, но компонент,
который включается в выражение, должен быть обязательно уже
определен. Поэтому удобен именно такой порядок определения, как на
этом слайде: параметры и переменные почти всегда зависят от
множеств. Без переменных и параметров невозможно записать ни одно
выражение для целевой функции или ограничений.
8
Модель на MathProg: множества и параметры
• Для реализации модели нам необходимо одно множество – FOOD (виды корма):
• Каждый элемент множества (вид корма) обладает набором свойств (содержание
питательных компонентов), которые войдут в модель как параметры,
определенные на множестве FOOD:
• Также существует ряд свойств, которые относятся уже не к отдельным видам
корма, а ко всему рациону в целом (требования к питательности):
• Обратите внимание: MathProg чувствителен к регистру символов.
Имена нужно вводить в точности, как показано на слайде 9
Модель на MathProg: постановка
• Математическая модель приведена на рисунке:
�
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ⋅ 𝑐𝑐𝑐𝑐𝑐𝑐𝑡𝑡𝑓𝑓 → 𝑚𝑚𝑚𝑚𝑚𝑚
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑓𝑓𝑓𝑓𝑡𝑡𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minfat
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minprot
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ mincarb
𝑠𝑠. 𝑡𝑡. �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≤ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚
𝑠𝑠. 𝑡𝑡. 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ 0 ∀𝑓𝑓 ∈ 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
10
Данные для модели
• Ранее мы задавали данные для
модели в такой последовательности:
1. элементы множеств:
set FOOD = A B;
2. параметры:
param cost := A 80 B 10;
param fat := A 1 B 3;
…
• Однако во многих случаях удобнее использовать
табличный формат определения параметров, который позволяет задать все свойства
элементов множеств одновременно:
param : cost fat prot carb nitr :=
A 80 1 3 1 2
B 10 3 1 8 4;
– Для удобства ввода таблицы названия параметров в первой строке, а также значения в каждой строке, разделяются
символами табуляции (клавиша TAB)
• В этом варианте прежде, чем задавать значения параметров, нужно, как и ранее, сначала
задать элементы множеств. Но можно одновременно задать и элементы множеств, и
параметры. Это наиболее удобный способ, который мы и применим в данной модели (см.
следующий слайд)
Корм A B Требование
Цена 80 10 → min
Жиры 1 3 ≥6
Белки 3 1 ≥ 9
Углеводы 1 8 ≥ 8
Нитраты 2 4 ≤ 16
11
Данные для модели
• Раздел данных для нашей модели показан на рисунке
– Синтаксис для одновременного определения элементов множества и их свойств:
param : множество : свойство1 свойство 2 :=
элемент1 знач11 знач12
элемент2 знач21 знач22;
– Стрелки на рисунке обозначают символы табуляции. Их отображением можно
управлять с помощью команды меню: View>Whitespace
12
Расчет модели
• Включите создание файлов с отчетами по решению
(Tools>Generate Output File on Go)
и устойчивости (Tools>Generate LP Sensitivity Analysis)
и запустите модель
13
Отчёт по решению
Activity – ЛЧ ограничения, либо переменная решения
Lower/Upper Bound – границы для переменной/ЛЧ
Marginal – теневая цена
St – статус переменной(ограничения):
• B – базисная (не связывающее ограничение),
• NU – связывающее ограничение-неравенство,
достигнут верхний предел ЛЧ,
• NL – то же, достигнут нижний предел ЛЧ
• NS – связывающее ограничение-равенство
Минимальная стоимость рациона (190) достигается при покупке 2 единиц корма A и 3 единиц
корма B. Связывающие ограничения – по белкам и нитратам. Информация о теневых ценах
ограничений приведена в столбце Marginal. При увеличении минимального содержания белка на
1 стоимость рациона вырастет на 30 единиц. При увеличении максимального содержания
нитратов на 1 стоимость рациона упадет на 5 единиц. Дополнительная информация приведена в
отчете по устойчивости (см. следующий слайд).
14
Отчёт по устойчивости (1)
В первой части отчёта – анализ чувствительности к изменению ограничений:
• Значение левой части ограничения в оптимальном решении (Activity)
• Остаток (Slack) или теневая цена (Marginal)
• Диапазон изменения правой части ограничения (Activity range): в первой строке – минимальное, во второй
строке – максимальное
• Ограничение, которое становится активным при граничных значениях правой части (Limiting Variable) -
базисная переменная, достигшая одной из своих границ
• Для связывающего ограничения по белкам (Prot) мы видим:
• Теневая цена: 30 – на столько увеличится стоимость рациона при увеличении минимального
содержания белка
• Теневая цена постоянна при изменении требования от 4 до 24 единиц. При снижении требований
по содержанию белка до 4 единиц будет уменьшаться количество корма A в рационе (он более богат
белком и стоит дороже). При нижнем граничном значении этот корм не будет приобретаться вообще.
15
Интерпретация отчета по устойчивости
• Рассмотрим связывающее ограничение по белкам (Prot):
• Теневая цена (Marginal): 30 – на столько увеличится стоимость рациона при увеличении минимального
содержания белка
• Теневая цена постоянна при изменении требования от 4 до 24 единиц (Activity Range).
• При снижении требований по содержанию белка до 4 единиц будет уменьшаться количество корма A
в рационе (он более богат белком и стоит дороже). На нижней границе этот корм не будет
приобретаться вообще. Связывающим ограничением станет условие неотрицательности для
количества корма A.
• При увеличении требований по белку до 24 единиц будет увеличиваться количество корма A. Однако,
поскольку этот корм беден углеводами, связывающим ограничением станет требование по
минимальному содержанию углеводов в рационе
Корм A B Требование
Цена 80 10 → min
Белки 3 1 ≥ 9
Углеводы 1 8 ≥ 8
16
Отчёт по устойчивости (2)
Во второй части отчёта – анализ чувствительности к изменению целевых
коэффициентов
• оптимальное значение переменной решения (Activity)
• целевой коэффициент (Obj coef) или теневая цена для границы (Marginal)
• диапазон изменения целевого коэффициента (Obj coef range): в первой строке – минимальное
значение, во второй строке – максимальное
• оптимальные значения переменной решения при граничных значениях целевого
коэффициента (Activity range)
• значения целевой функции при граничных значениях (Obj value at break point)
• ограничение, которое становится активным при граничных значениях целевого коэффициента
(Limiting Variable)
17
Форматированный вывод результатов
• Ранее мы использовали для вывода результатов команду display, которая выводит в консоль значения
указанных переменных:
• Недостатком display является то, что она выводит все значения переменных по отдельности. Это
неудобно, если данных много.
• Более читаемые результаты решения можно получить с помощью команды printf, которая используется
для форматированного вывода
• После printf необходимо указать в кавычках (одинарных или двойных) строку для вывода на печать:
• При выводе через printf переход на следующую строку автоматически не производится. Следующая
команда продолжит ту же строку (обратите внимание, что пробел также не был добавлен):
• Чтобы принудительно перевести строку, необходимо вставить в текст символ n:
• Обратную черту можно использовать и для вывода других специальных символов, например,
табуляции: t. Для вывода обратной черты нужно писать:  18
Шаблоны форматов printf
• Мощь printf в том, что эта команда позволяет формировать строку для вывода по шаблону.
Вы можете включить в текст строки спецификаторы форматов (шаблоны) для вычисляемых
результатов, которые при выводе будут заменены на результаты вычислений. Формулы для
вычисления нужно записать после строки-шаблона через запятую
– Вывод строки (%s):
– Строка, которая подставляется вместо %s, получена сцеплением нескольких строк (&)
– Действительное число (%f):
– Округление до заданного числа знаков после запятой (2 знака):
– Вывод в поле заданной ширины (5 знаков):
19
Спецификаторы форматов printf
Подробнее – см. здесь: http://www.mir-koda.ru/full_leson_cpp.php?id=6
Спецификатор Значение
%s строка
%5s строка фиксированной длины – 5 символов
%-5s строка длиной 5 символов, выравнивание по левому краю
%d целое число
%f действительное число с плавающей точкой
%.2f то же, точность 2 десятичных знака
%5.2f то же, фиксированная ширина шаблона – 6 символов (с точкой)
%g действительное число, при необходимости используется
экспоненциальный формат
%.2g то же, точность 2 значащие цифры
%% символ процента %
20
Использование printf в MathProg
• Разумеется, выражения, которые подставляются в строку, могут быть вычислены и с
использованием компонентов модели
• Обычно printf используется совместно с индексными выражениями (например, {f in FOOD})
• На рисунке показана команда, позволяющая получить отформатированный отчет по
решению задачи о рационе:
21
ДВУХИНДЕКСНАЯ МОДЕЛЬ
22
Концептуальная модель
• При разработке предыдущей модели мы выделили одно множество – множество видов корма (т.е.
физических объектов). Но в качестве множества можно рассматривать также и множество свойств
каждого вида корма. Некоторые из свойств – содержание компонентов – очень похожи между собой.
• Новая схема отношений между видами корма и их свойствами:
Корм A B Требование
Цена 80 10 → min
Жиры 1 3 ≥6
Белки 3 1 ≥ 9
Углеводы 1 8 ≥ 8
Нитраты 2 4 ≤ 16
Множество видов корма
Множество
компонентов
A B C …Виды корма
Компоненты:
Цена
Жиры Белки Углеводы Нитраты
Содержание в рационе мин макс
Кол-во
Содержание
Решение
Свойство компонента
Свойство корма
Свойство компонента корма
23
Двухиндексная модель
• Обозначения для модели:
• Математическая постановка:
�
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ⋅ 𝑐𝑐𝑐𝑐𝑐𝑐𝑡𝑡𝑓𝑓 → 𝑚𝑚𝑚𝑚𝑚𝑚
𝑠𝑠. 𝑡𝑡. ∀𝑐𝑐 ∈ 𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶:
𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑡𝑡𝑐𝑐 ≤ �
𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≤ maxcontc
𝑠𝑠. 𝑡𝑡. 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ 0 ∀𝑓𝑓 ∈ 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹
A B C …FOOD
COMP
cost
fat prot carb nitr
mincont maxcont
buy
content
24
MathProg: множества и параметры двухиндексной модели
• Создайте новую модель – korm2sets.mod
• На рисунке показаны объявления множеств и компонентов новой модели
– Множества теперь два – корма и компоненты
– Некоторые параметры характеризуют только корм, некоторые – только компонент, некоторые –
сочетание компонента и корма
– Для упрощения записи ограничений, нам пришлось с каждым компонентом связать два параметра –
минимальное и максимальное значение (в исходной постановке было только одно)
– Для содержания компонентов в рационе заданы удобные значения по умолчанию (default);
9999 – это искусственная граница, достаточно большое число, которое гарантированно не будет
достигнуто в данной задаче. Т.е., если максимальное содержание компонента не будет явно задано
в данных, то ограничение, фактически, никак не будет влиять на решение
– Для максимального содержания компонента задана проверка: для любого компонента этот
параметр не может быть меньше, чем минимальное содержание
25
MathProg: двухиндексная модель
• Формализация двухиндексной модели приведена на рисунке
– Content – это не одно ограничение, а множество ограничений: ограничение по составу задается
для каждого компонента
– Множество ограничений создается благодаря использованию индексирующего выражения
{c in COMP} после имени ограничения
– Обратите внимание, что при использовании параметра content, который зависит от двух множеств,
мы использовали порядок индексов – компонент, корм. Так необходимо делать, потому что мы
определили именно такой порядок индексов для этого параметра (см. предыдущий слайд)
26
Данные для двухиндексной модели
• Данные для двухиндексной модели
показаны на рисунке
– Для кормов мы сразу задали и элементы множества,
и их стоимость
– Для компонентов мы поступили так же,
отличие лишь в том, что у элементов этого
множества – два свойства (параметра)
– Обратите внимание, что значения параметров
для компонентов, которые не требуется задавать,
обозначены точками. Нельзя просто пропустить их.
– Для параметра content используется табличный (2D)
формат определения значений
27
Реляционный формат данных
• На рисунке показан альтернативный способ определения значений параметра – реляционный (relation –
англ. отношение)
• При реляционном способе данные хранятся в виде плоских (одномерных) таблиц. Единственным
измерением в таких таблицах являются строки. А для уникальной идентификации строк используются
ключевые столбцы (один или несколько).
• В этом примере ключевыми столбцами являются 1 и 2 (компоненты и виды корма). Именно свойства
отношения между этими объектами – содержание компонента в корме - записаны в таблице.
Таких свойств может быть и больше (в этом случае добавляются дополнительные столбцы)
• В противоположность реляционному формату, на предыдущем слайде мы использовали
двухмерный формат для параметра content:
таблица имела два измерения – компонент и вид корма
• Реляционный формат выгодно использовать по нескольким причинам:
– именно в этом формате хранятся данные в учетных системах
предприятий и базах данных;
– если какие-то сочетания элементов множеств в ключевых
столбцах не имеют смысла, то их не нужно указывать в таблице;
в двухмерной же таблице должны быть все возможные сочетания
элементов индексирующих множеств;
– в отношение могут вступать три и более множеств, в этом случае
табличный формат использовать невозможно
• Свойства кормов и компонентов мы также задавали в реляционном
формате (в этих таблицах был один ключевой столбец)
28
Использование данных из внешнего файла
• При сценарном анализе часто необходимо рассчитывать одну и ту же модель для разных наборов
исходных данных. Поэтому целесообразно разделять данные и модель и хранить их в различных файлах.
GUSEK, как и другие подобные инструменты, позволяет легко заменять файлы данных и находить
решение в новой ситуации
• Создайте в GUSEK новый файл и сохраните его как korm2sets.dat в ту же папку, где находится модель
• При запуске модели данные будут браться из этого файла. Внешний файл данных имеет приоритет над
данными в файле с моделью. Убедитесь в этом, изменив какие-либо параметры в файле и запустив
модель повторно (не забудьте вернуть измененные числа обратно)
• Файл данных не обязательно
называть так же, как и файл
с моделью. Но в этом случае
его имя должно быть явно
указано в настройках GUSEK
• Чтобы назначить другой
файл данных, откройте его
в GUSEK и выполните
команду:
Tools> Set as Default .dat File
29
Использование внешних данных
korm2sets.mod
korm2sets.dat
korm2sets.mod
korm2sets_new.dat
30
Форматированный вывод решения
• Поскольку мы представили компоненты кормов как множество, нам больше не
нужно выводить их свойства по отдельности. Вывод таблицы с решением можно
автоматизировать, используя команду printf.
• Добавьте показанные на рисунке команды в файл korm2sets.mod, чтобы получить
форматированный отчет по решению
31
Форматированный вывод таблиц: for
• При большом объеме данных для анализа результатов удобно использовать табличный
формат данных. Таблица состоит из столбцов фиксированной ширины. Значения в столбцах
выводятся с помощью команды printf. Строки таблицы можно получить, многократно
применяя команду printf для каждого элемента множества (в данном случае – множества
COMP). Разумеется, не требуется указывать индекс каждого элемента вручную.
Автоматизировать перебор значений помогает команда for
• Команда for повторяет какое-либо действие несколько раз. Количество повторений
определяется индексирующим выражением после for. Набор действий, которые должны
повторяться, указывают в фигурных скобках после for:
Заголовок
11
симв.
4 симв.,
∀ корм
7
симв.
5
симв.
5
симв.
∀компонент
32
Форматированный вывод таблиц: for
• Добавьте показанные на рисунке команды для вывода таблицы с отчетом по содержанию
компонентов в рационе
Заголовок
11
симв.
4 симв.,
∀ корм
7
симв.
5
симв.
5
симв.
∀компонент
33

Mais conteúdo relacionado

Destaque

Визуализация данных на географических картах в Tableau. Следующий уровень.
Визуализация данных на географических картах в Tableau. Следующий уровень.Визуализация данных на географических картах в Tableau. Следующий уровень.
Визуализация данных на географических картах в Tableau. Следующий уровень.Gleb Zakhodiakin
 
Визуализация данных на географических картах в Tableau (базовый уровень)
Визуализация данных на географических картах в Tableau (базовый уровень)Визуализация данных на географических картах в Tableau (базовый уровень)
Визуализация данных на географических картах в Tableau (базовый уровень)Gleb Zakhodiakin
 
Прогнозирование - Лекция 1. Компьютерные инструменты прогнозирования
Прогнозирование - Лекция 1. Компьютерные инструменты прогнозированияПрогнозирование - Лекция 1. Компьютерные инструменты прогнозирования
Прогнозирование - Лекция 1. Компьютерные инструменты прогнозированияGleb Zakhodiakin
 
Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)
Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)
Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)Gleb Zakhodiakin
 
Прогнозирование - Лекция 4. Регрессионные модели временных рядов
Прогнозирование - Лекция 4. Регрессионные модели временных рядовПрогнозирование - Лекция 4. Регрессионные модели временных рядов
Прогнозирование - Лекция 4. Регрессионные модели временных рядовGleb Zakhodiakin
 
Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...
Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...
Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...Gleb Zakhodiakin
 
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессияПрогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессияGleb Zakhodiakin
 
Прогнозирование - Лекция 3. Множественная регрессия
Прогнозирование - Лекция 3. Множественная регрессияПрогнозирование - Лекция 3. Множественная регрессия
Прогнозирование - Лекция 3. Множественная регрессияGleb Zakhodiakin
 

Destaque (9)

Визуализация данных на географических картах в Tableau. Следующий уровень.
Визуализация данных на географических картах в Tableau. Следующий уровень.Визуализация данных на географических картах в Tableau. Следующий уровень.
Визуализация данных на географических картах в Tableau. Следующий уровень.
 
Визуализация данных на географических картах в Tableau (базовый уровень)
Визуализация данных на географических картах в Tableau (базовый уровень)Визуализация данных на географических картах в Tableau (базовый уровень)
Визуализация данных на географических картах в Tableau (базовый уровень)
 
Прогнозирование - Лекция 1. Компьютерные инструменты прогнозирования
Прогнозирование - Лекция 1. Компьютерные инструменты прогнозированияПрогнозирование - Лекция 1. Компьютерные инструменты прогнозирования
Прогнозирование - Лекция 1. Компьютерные инструменты прогнозирования
 
Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)
Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)
Прогнозирование - Лекция 5. Методология Бокса-Дженкинса (модели ARIMA)
 
Прогнозирование - Лекция 4. Регрессионные модели временных рядов
Прогнозирование - Лекция 4. Регрессионные модели временных рядовПрогнозирование - Лекция 4. Регрессионные модели временных рядов
Прогнозирование - Лекция 4. Регрессионные модели временных рядов
 
Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...
Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...
Прогнозирование - Лекция 6. Использование инструментов подготовки данных и пр...
 
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессияПрогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
 
Прогнозирование - Лекция 3. Множественная регрессия
Прогнозирование - Лекция 3. Множественная регрессияПрогнозирование - Лекция 3. Множественная регрессия
Прогнозирование - Лекция 3. Множественная регрессия
 
TextMining with R
TextMining with RTextMining with R
TextMining with R
 

Тренинг GLPK, часть 2: Двухиндексные задачи

  • 1. Основы моделирования в пакете GUSEK/GLPK v 0.3 2015-03-06 Задача о рационе Двухиндексные задачи Форматированный вывод Заходякин Г.В. postlogist@gmail.com
  • 2. План занятия • Содержательная постановка • Модель с отдельными ограничениями • Форматированный вывод на экран • Двухиндексная модель • Форматы определения данных 2
  • 3. Содержательная постановка задачи • Рацион для питания животных на ферме состоит из двух видов кормов A и B. • Один килограмм корма A стоит 80 ден. ед. и содержит: 1 ед. жиров, 3 ед. белков, 1 ед. углеводов, 2 ед. нитратов. Один килограмм корма B стоит 10 ден. ед. и содержит 3 ед. жиров, 1 ед. белков, 8 ед. углеводов, 4 ед. нитратов. • Требуется составить наиболее дешевый рацион питания, обеспечивающий жиров не менее 6 ед., белков не менее 9 ед., углеводов не менее 8 ед., нитратов не более 16 ед. 3
  • 5. Концептуальная модель • Данные для решения задачи в табличном виде: • Отношения между элементами и свойствами: Корм A B Требование Цена 80 10 → min Жиры 1 3 ≥6 Белки 3 1 ≥ 9 Углеводы 1 8 ≥ 8 Нитраты 2 4 ≤ 16 Элементы множества Свойства элемента A B C …Виды корма Свойства: Цена Жиры Белки Углеводы Нитраты Требования к рациону: → min ≥ мин.Ж ≥ мин.Б ≥ мин.У ≤ макс.Н Решения: Кол-во 5
  • 6. Модель с отдельными ограничениями • Обозначения для модели: • Математическая постановка: A B C …FOOD Свойства: cost fat prot carb nitr Требования к рациону: → min ≥ minfat ≥ minprot ≥ mincarb ≤ maxnitr Решения: buy (множество) � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ⋅ 𝑐𝑐𝑐𝑐𝑐𝑐𝑡𝑡𝑓𝑓 → 𝑚𝑚𝑚𝑚𝑚𝑚 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑓𝑓𝑓𝑓𝑡𝑡𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minfat 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minprot 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ mincarb 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≤ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑠𝑠. 𝑡𝑡. 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ 0 ∀𝑓𝑓 ∈ 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 6
  • 7. Подготовка • Запустите GUSEK и сохраните пустой файл модели под именем korm.mod (например, на рабочий стол) – Расширение должно быть обязательно .mod, от этого зависит подсветка команд и доступный набор действий с файлом • В этом примере мы будем хранить и модель, и данные в одном файле 7
  • 8. Компоненты оптимизационной модели • Для формализации модели на языке моделирования необходимо определить следующие компоненты: 1. Множества (set) – соответствуют типам объектов в содержательной постановке задачи – продукты, клиенты, периоды времени, ресурсы и т.п.; содержат названия или коды этих объектов 2. Параметры (parameter) – содержат количественные характеристики, которые заранее известны; могут иметь одно значение, или характеризовать каждый элемент некоторого множества 3. Переменные (var) – содержат неизвестные заранее количественные характеристики объектов, т.е. решения, которые необходимо принять в задаче оптимизации 4. Целевая функция (minimize/maximize) – линейное выражение, соответствующее критерию эффективности в задаче 5. Ограничения (subject to или s.t.) – линейное выражение, соответствующее некоторому ограничению/требованию • Порядок определения компонентов произвольный, но компонент, который включается в выражение, должен быть обязательно уже определен. Поэтому удобен именно такой порядок определения, как на этом слайде: параметры и переменные почти всегда зависят от множеств. Без переменных и параметров невозможно записать ни одно выражение для целевой функции или ограничений. 8
  • 9. Модель на MathProg: множества и параметры • Для реализации модели нам необходимо одно множество – FOOD (виды корма): • Каждый элемент множества (вид корма) обладает набором свойств (содержание питательных компонентов), которые войдут в модель как параметры, определенные на множестве FOOD: • Также существует ряд свойств, которые относятся уже не к отдельным видам корма, а ко всему рациону в целом (требования к питательности): • Обратите внимание: MathProg чувствителен к регистру символов. Имена нужно вводить в точности, как показано на слайде 9
  • 10. Модель на MathProg: постановка • Математическая модель приведена на рисунке: � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ⋅ 𝑐𝑐𝑐𝑐𝑐𝑐𝑡𝑡𝑓𝑓 → 𝑚𝑚𝑚𝑚𝑚𝑚 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑓𝑓𝑓𝑓𝑡𝑡𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minfat 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ minprot 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ mincarb 𝑠𝑠. 𝑡𝑡. � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≤ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑠𝑠. 𝑡𝑡. 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ 0 ∀𝑓𝑓 ∈ 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 10
  • 11. Данные для модели • Ранее мы задавали данные для модели в такой последовательности: 1. элементы множеств: set FOOD = A B; 2. параметры: param cost := A 80 B 10; param fat := A 1 B 3; … • Однако во многих случаях удобнее использовать табличный формат определения параметров, который позволяет задать все свойства элементов множеств одновременно: param : cost fat prot carb nitr := A 80 1 3 1 2 B 10 3 1 8 4; – Для удобства ввода таблицы названия параметров в первой строке, а также значения в каждой строке, разделяются символами табуляции (клавиша TAB) • В этом варианте прежде, чем задавать значения параметров, нужно, как и ранее, сначала задать элементы множеств. Но можно одновременно задать и элементы множеств, и параметры. Это наиболее удобный способ, который мы и применим в данной модели (см. следующий слайд) Корм A B Требование Цена 80 10 → min Жиры 1 3 ≥6 Белки 3 1 ≥ 9 Углеводы 1 8 ≥ 8 Нитраты 2 4 ≤ 16 11
  • 12. Данные для модели • Раздел данных для нашей модели показан на рисунке – Синтаксис для одновременного определения элементов множества и их свойств: param : множество : свойство1 свойство 2 := элемент1 знач11 знач12 элемент2 знач21 знач22; – Стрелки на рисунке обозначают символы табуляции. Их отображением можно управлять с помощью команды меню: View>Whitespace 12
  • 13. Расчет модели • Включите создание файлов с отчетами по решению (Tools>Generate Output File on Go) и устойчивости (Tools>Generate LP Sensitivity Analysis) и запустите модель 13
  • 14. Отчёт по решению Activity – ЛЧ ограничения, либо переменная решения Lower/Upper Bound – границы для переменной/ЛЧ Marginal – теневая цена St – статус переменной(ограничения): • B – базисная (не связывающее ограничение), • NU – связывающее ограничение-неравенство, достигнут верхний предел ЛЧ, • NL – то же, достигнут нижний предел ЛЧ • NS – связывающее ограничение-равенство Минимальная стоимость рациона (190) достигается при покупке 2 единиц корма A и 3 единиц корма B. Связывающие ограничения – по белкам и нитратам. Информация о теневых ценах ограничений приведена в столбце Marginal. При увеличении минимального содержания белка на 1 стоимость рациона вырастет на 30 единиц. При увеличении максимального содержания нитратов на 1 стоимость рациона упадет на 5 единиц. Дополнительная информация приведена в отчете по устойчивости (см. следующий слайд). 14
  • 15. Отчёт по устойчивости (1) В первой части отчёта – анализ чувствительности к изменению ограничений: • Значение левой части ограничения в оптимальном решении (Activity) • Остаток (Slack) или теневая цена (Marginal) • Диапазон изменения правой части ограничения (Activity range): в первой строке – минимальное, во второй строке – максимальное • Ограничение, которое становится активным при граничных значениях правой части (Limiting Variable) - базисная переменная, достигшая одной из своих границ • Для связывающего ограничения по белкам (Prot) мы видим: • Теневая цена: 30 – на столько увеличится стоимость рациона при увеличении минимального содержания белка • Теневая цена постоянна при изменении требования от 4 до 24 единиц. При снижении требований по содержанию белка до 4 единиц будет уменьшаться количество корма A в рационе (он более богат белком и стоит дороже). При нижнем граничном значении этот корм не будет приобретаться вообще. 15
  • 16. Интерпретация отчета по устойчивости • Рассмотрим связывающее ограничение по белкам (Prot): • Теневая цена (Marginal): 30 – на столько увеличится стоимость рациона при увеличении минимального содержания белка • Теневая цена постоянна при изменении требования от 4 до 24 единиц (Activity Range). • При снижении требований по содержанию белка до 4 единиц будет уменьшаться количество корма A в рационе (он более богат белком и стоит дороже). На нижней границе этот корм не будет приобретаться вообще. Связывающим ограничением станет условие неотрицательности для количества корма A. • При увеличении требований по белку до 24 единиц будет увеличиваться количество корма A. Однако, поскольку этот корм беден углеводами, связывающим ограничением станет требование по минимальному содержанию углеводов в рационе Корм A B Требование Цена 80 10 → min Белки 3 1 ≥ 9 Углеводы 1 8 ≥ 8 16
  • 17. Отчёт по устойчивости (2) Во второй части отчёта – анализ чувствительности к изменению целевых коэффициентов • оптимальное значение переменной решения (Activity) • целевой коэффициент (Obj coef) или теневая цена для границы (Marginal) • диапазон изменения целевого коэффициента (Obj coef range): в первой строке – минимальное значение, во второй строке – максимальное • оптимальные значения переменной решения при граничных значениях целевого коэффициента (Activity range) • значения целевой функции при граничных значениях (Obj value at break point) • ограничение, которое становится активным при граничных значениях целевого коэффициента (Limiting Variable) 17
  • 18. Форматированный вывод результатов • Ранее мы использовали для вывода результатов команду display, которая выводит в консоль значения указанных переменных: • Недостатком display является то, что она выводит все значения переменных по отдельности. Это неудобно, если данных много. • Более читаемые результаты решения можно получить с помощью команды printf, которая используется для форматированного вывода • После printf необходимо указать в кавычках (одинарных или двойных) строку для вывода на печать: • При выводе через printf переход на следующую строку автоматически не производится. Следующая команда продолжит ту же строку (обратите внимание, что пробел также не был добавлен): • Чтобы принудительно перевести строку, необходимо вставить в текст символ n: • Обратную черту можно использовать и для вывода других специальных символов, например, табуляции: t. Для вывода обратной черты нужно писать: 18
  • 19. Шаблоны форматов printf • Мощь printf в том, что эта команда позволяет формировать строку для вывода по шаблону. Вы можете включить в текст строки спецификаторы форматов (шаблоны) для вычисляемых результатов, которые при выводе будут заменены на результаты вычислений. Формулы для вычисления нужно записать после строки-шаблона через запятую – Вывод строки (%s): – Строка, которая подставляется вместо %s, получена сцеплением нескольких строк (&) – Действительное число (%f): – Округление до заданного числа знаков после запятой (2 знака): – Вывод в поле заданной ширины (5 знаков): 19
  • 20. Спецификаторы форматов printf Подробнее – см. здесь: http://www.mir-koda.ru/full_leson_cpp.php?id=6 Спецификатор Значение %s строка %5s строка фиксированной длины – 5 символов %-5s строка длиной 5 символов, выравнивание по левому краю %d целое число %f действительное число с плавающей точкой %.2f то же, точность 2 десятичных знака %5.2f то же, фиксированная ширина шаблона – 6 символов (с точкой) %g действительное число, при необходимости используется экспоненциальный формат %.2g то же, точность 2 значащие цифры %% символ процента % 20
  • 21. Использование printf в MathProg • Разумеется, выражения, которые подставляются в строку, могут быть вычислены и с использованием компонентов модели • Обычно printf используется совместно с индексными выражениями (например, {f in FOOD}) • На рисунке показана команда, позволяющая получить отформатированный отчет по решению задачи о рационе: 21
  • 23. Концептуальная модель • При разработке предыдущей модели мы выделили одно множество – множество видов корма (т.е. физических объектов). Но в качестве множества можно рассматривать также и множество свойств каждого вида корма. Некоторые из свойств – содержание компонентов – очень похожи между собой. • Новая схема отношений между видами корма и их свойствами: Корм A B Требование Цена 80 10 → min Жиры 1 3 ≥6 Белки 3 1 ≥ 9 Углеводы 1 8 ≥ 8 Нитраты 2 4 ≤ 16 Множество видов корма Множество компонентов A B C …Виды корма Компоненты: Цена Жиры Белки Углеводы Нитраты Содержание в рационе мин макс Кол-во Содержание Решение Свойство компонента Свойство корма Свойство компонента корма 23
  • 24. Двухиндексная модель • Обозначения для модели: • Математическая постановка: � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ⋅ 𝑐𝑐𝑐𝑐𝑐𝑐𝑡𝑡𝑓𝑓 → 𝑚𝑚𝑚𝑚𝑚𝑚 𝑠𝑠. 𝑡𝑡. ∀𝑐𝑐 ∈ 𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶: 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑡𝑡𝑐𝑐 ≤ � 𝑓𝑓∈𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑓𝑓 ⋅ 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≤ maxcontc 𝑠𝑠. 𝑡𝑡. 𝑏𝑏𝑏𝑏𝑦𝑦𝑓𝑓 ≥ 0 ∀𝑓𝑓 ∈ 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 A B C …FOOD COMP cost fat prot carb nitr mincont maxcont buy content 24
  • 25. MathProg: множества и параметры двухиндексной модели • Создайте новую модель – korm2sets.mod • На рисунке показаны объявления множеств и компонентов новой модели – Множества теперь два – корма и компоненты – Некоторые параметры характеризуют только корм, некоторые – только компонент, некоторые – сочетание компонента и корма – Для упрощения записи ограничений, нам пришлось с каждым компонентом связать два параметра – минимальное и максимальное значение (в исходной постановке было только одно) – Для содержания компонентов в рационе заданы удобные значения по умолчанию (default); 9999 – это искусственная граница, достаточно большое число, которое гарантированно не будет достигнуто в данной задаче. Т.е., если максимальное содержание компонента не будет явно задано в данных, то ограничение, фактически, никак не будет влиять на решение – Для максимального содержания компонента задана проверка: для любого компонента этот параметр не может быть меньше, чем минимальное содержание 25
  • 26. MathProg: двухиндексная модель • Формализация двухиндексной модели приведена на рисунке – Content – это не одно ограничение, а множество ограничений: ограничение по составу задается для каждого компонента – Множество ограничений создается благодаря использованию индексирующего выражения {c in COMP} после имени ограничения – Обратите внимание, что при использовании параметра content, который зависит от двух множеств, мы использовали порядок индексов – компонент, корм. Так необходимо делать, потому что мы определили именно такой порядок индексов для этого параметра (см. предыдущий слайд) 26
  • 27. Данные для двухиндексной модели • Данные для двухиндексной модели показаны на рисунке – Для кормов мы сразу задали и элементы множества, и их стоимость – Для компонентов мы поступили так же, отличие лишь в том, что у элементов этого множества – два свойства (параметра) – Обратите внимание, что значения параметров для компонентов, которые не требуется задавать, обозначены точками. Нельзя просто пропустить их. – Для параметра content используется табличный (2D) формат определения значений 27
  • 28. Реляционный формат данных • На рисунке показан альтернативный способ определения значений параметра – реляционный (relation – англ. отношение) • При реляционном способе данные хранятся в виде плоских (одномерных) таблиц. Единственным измерением в таких таблицах являются строки. А для уникальной идентификации строк используются ключевые столбцы (один или несколько). • В этом примере ключевыми столбцами являются 1 и 2 (компоненты и виды корма). Именно свойства отношения между этими объектами – содержание компонента в корме - записаны в таблице. Таких свойств может быть и больше (в этом случае добавляются дополнительные столбцы) • В противоположность реляционному формату, на предыдущем слайде мы использовали двухмерный формат для параметра content: таблица имела два измерения – компонент и вид корма • Реляционный формат выгодно использовать по нескольким причинам: – именно в этом формате хранятся данные в учетных системах предприятий и базах данных; – если какие-то сочетания элементов множеств в ключевых столбцах не имеют смысла, то их не нужно указывать в таблице; в двухмерной же таблице должны быть все возможные сочетания элементов индексирующих множеств; – в отношение могут вступать три и более множеств, в этом случае табличный формат использовать невозможно • Свойства кормов и компонентов мы также задавали в реляционном формате (в этих таблицах был один ключевой столбец) 28
  • 29. Использование данных из внешнего файла • При сценарном анализе часто необходимо рассчитывать одну и ту же модель для разных наборов исходных данных. Поэтому целесообразно разделять данные и модель и хранить их в различных файлах. GUSEK, как и другие подобные инструменты, позволяет легко заменять файлы данных и находить решение в новой ситуации • Создайте в GUSEK новый файл и сохраните его как korm2sets.dat в ту же папку, где находится модель • При запуске модели данные будут браться из этого файла. Внешний файл данных имеет приоритет над данными в файле с моделью. Убедитесь в этом, изменив какие-либо параметры в файле и запустив модель повторно (не забудьте вернуть измененные числа обратно) • Файл данных не обязательно называть так же, как и файл с моделью. Но в этом случае его имя должно быть явно указано в настройках GUSEK • Чтобы назначить другой файл данных, откройте его в GUSEK и выполните команду: Tools> Set as Default .dat File 29
  • 31. Форматированный вывод решения • Поскольку мы представили компоненты кормов как множество, нам больше не нужно выводить их свойства по отдельности. Вывод таблицы с решением можно автоматизировать, используя команду printf. • Добавьте показанные на рисунке команды в файл korm2sets.mod, чтобы получить форматированный отчет по решению 31
  • 32. Форматированный вывод таблиц: for • При большом объеме данных для анализа результатов удобно использовать табличный формат данных. Таблица состоит из столбцов фиксированной ширины. Значения в столбцах выводятся с помощью команды printf. Строки таблицы можно получить, многократно применяя команду printf для каждого элемента множества (в данном случае – множества COMP). Разумеется, не требуется указывать индекс каждого элемента вручную. Автоматизировать перебор значений помогает команда for • Команда for повторяет какое-либо действие несколько раз. Количество повторений определяется индексирующим выражением после for. Набор действий, которые должны повторяться, указывают в фигурных скобках после for: Заголовок 11 симв. 4 симв., ∀ корм 7 симв. 5 симв. 5 симв. ∀компонент 32
  • 33. Форматированный вывод таблиц: for • Добавьте показанные на рисунке команды для вывода таблицы с отчетом по содержанию компонентов в рационе Заголовок 11 симв. 4 симв., ∀ корм 7 симв. 5 симв. 5 симв. ∀компонент 33