Skip to content
Solverytic.com
Интеллект для бизнеса
  • ⬩BI-анализ
    • ⬩ BI-анализ
    • ⬩ Дашборд руководителя
    • ⬩ Дистрибьюция
      • ⬩ Документация
    • ⬩ Маркетплейсы
    • ⬩ Фармацея
    • ⬩ Калькулятор стоимости
  • ⬩ОПТИМИЗАЦИЯ
    • ⬩ МАТЕМАТИЧЕСКАЯ ОПТИМИЗАЦИЯ
    • ⬩ AMPL
      • ⬩ О AMPL
      • ⬩ AMPL ПРОДУКТЫ
      • ⬩ AMPL IDE
      • ⬩ AMPL API
      • ⬩ FAQ
    • ⬩ SOLVERS
      • ⬩ О SOLVERS
      • ⬩ ВСЕ SOLVERS
      • ⬩ ПРОДАЖА SOLVERS
  • ⬩ОТРАСЛИ
  • ⬩КУПИТЬ
  • ⬩БЛОГ
  • ⬩Контакты

AMPL

  • Оглавление
  • Команды и настройки AMPL
    • Команды
      • Команды моделирования
      • Команды отображения
        • Другие функции отображения
        • Общие настройки управления выводом
        • display
          • Команда display
          • Параметры display
        • print
          • Команда print
        • printf
          • Команда printf
    • Настройки AMPL
      • Изменение данных
      • Модификация моделей
      • Настройка и решение моделей
      • Параметры
  • Столбчатые формулировки
    • Модель “черный ящик”
    • Модель планирования
    • Правила построения формулировки «по столбцам»
    • Формулировки по столбцам. Введение
  • Команды сценариев
    • Завершение цикла. Команда: break и continue
    • Запуск сценариев
    • Оператор перебора набора: for
    • Повторение действий в зависимости от условия. Оператор repeat.
    • Пошаговое выполнение сценария
    • Сценарии команд. Общие сведения.
    • Тестирование условия: оператор if-then-else
  • Сетевые линейные программы
    • Сетевые линейные программы
    • Транспортная модель
      • Общая формулировка
        • Модель кратчайшего пути
        • Модель максимизации потока
        • Модель максимизации потока
        • Модель назначения
        • Минимизация затрат
          • Естественная убыль. Различные единицы измерения грузов при транспортировке
          • Транспортная модель: минимизация затрат (общая модель)
          • Транспортная модель: минимизация затрат (специализированная модель)
      • Нотация: node и arc
        • Правила объявления node и arc
        • Минимизация затрат
          • Варианты моделей перевалки
          • Модель перевалки (специализированная)
          • Сетевая интерпретация модели перевалки (общая).
  • Кусочно-линейные формулировки
    • Min-Max и другие формулировки
    • Инвентированные события
    • Кусочно-линейные модели
    • Правила описания кусочно-линейных выражений
    • Работа с неосуществимостью
    • Штрафы – мягкие ограничения
  • Взаимодействие с моделями
    • Именованное окружение
    • Именованные проблемы
    • Переключение между моделями
  • Линейность и линеаризация выражений
    • Линейные выражения
  • Лексический состав AMPL
    • Зарезервированные и предопределенные имена
    • Общие имена
    • Синонимы ключевых слов и операторов
    • Токены AMPL
    • Функции
      • Библиотека расширенных функций
      • Встроенные функции
      • Строковые выражения в командах AMPL
      • Строковые функции и операторы
      • Функции округления
      • Функции пользователя
      • Функции случайных чисел
    • Выражения
      • Арифметические выражения
      • Логические выражения
      • Логические операторы
      • Логические операторы
      • Операторы арифметической редукции
      • Рекурсия
      • Стандартная форма записи выражений в AMPL
  • Объекты модели
    • Данные
      • Данные в списках
      • Общие правила работы с данными
      • Объявление данных
      • Чтение неформатированных данных
      • Двумерные таблицы и срезы
        • Двумерные таблицы и срезы
      • Базы данных
        • Доступ к базе данных
        • Запись данных в реляционные таблицы
        • Индексированные коллекции таблиц и столбцов, 2D таблица
        • Операторы обработки таблиц
        • Стандартные и встроенные обработчики таблиц
        • Чтение данных из реляционных таблиц
        • Чтение и запись одной и той же таблицы
      • Общие правила работы с данными
        • Другие особенности объявления данных
    • Целевая функция
      • Целевая функция
    • Результаты
      • Альтернативные решения
      • Связанные значения решения
    • Ограничения
      • Ограничения модели
    • Наборы
      • Выражения индексации наборов
      • Индексированные коллекции наборов
      • Интервалы
      • Классификация наборов
      • Место объявления элементов набора
      • Наборы длинных кортежей
      • Наборы упорядоченных пар
      • Наборы. Правила объявления наборов
      • Неупорядоченный набор символьных строк
      • Операции над наборами
      • Подмножества и кусочки упорядоченных пар
      • Предопределенные наборы
      • Размерность набора (Арность)
      • Упорядоченные наборы
      • Установление членства в наборе
      • Числовые наборы
      • Операции с наборами
        • Оператор setof
        • Операции с наборами кортежей
    • Параметры
      • Логические параметры
      • Объявление параметров
      • Ограничения параметров
      • Операции с параметрами
      • Параметр в индексном выражении
      • Разряженные параметры
      • Расчет параметров
      • Символьные параметры
      • Случайно сгенерированные параметры
    • Переменные
      • Действия c переменными
      • Начальные значения переменных
      • Объявление переменных
      • Ограничение переменных
  • Решатели
    • Взаимодействие с решателями
      • Обмен информацией с решателями с помощью суффиксов
      • Получение результатов от решателей
      • Фаза предварительного решения: presolve

Distribution

  • Консоль
    • Страница “ГЛАВНАЯ”
    • Страница “ММЛ / МТ”
    • Страница “ОВП граф.”
    • Страница “ОВП граф.+”
    • Страница “ОВП табл.”
    • Страница “Рейтинги”
    • Страница “Сравнения”
    • Страница «Акции: показатели»
    • Страница «Акции: Скидки»
    • Страница «Акции: Эффективность»
    • Страница «Анализ: ABC-XYZ»
    • Страница «Анализ: Что-Если»
    • Страница «Бенчмаркинг цен»
    • Страница «План/Факт»
    • Страница «Факторный анализ»

Ограничения параметров

Если T предназначено для представления количества недель в многопериодной модели, оно должно быть целым числом и больше 1. Включив эти условия в объявление T,

param T > 1 integer;

мы вводим ограничение типа (integer) используемых в модели данных и диапазона(>0) значений параметра. Запись предписывает AMPL отклонять данные, если T случайно установлено <= 1 с выдачей сообщения об ошибке:

error processing param T:
failed check: param T = 1
is not > 1;

или

error processing param T:
failed check: param T = 2.5
is not an integer;

AMPL не будет отправлять экземпляр проблемы решателю, пока остаются какие-либо подобные ошибки. В объявлении индексированной коллекции параметров простое ограничение, такое как integer или >= 0, применяется к каждому параметру. Наши примеры часто используют эти конструкции, чтобы указать, что векторы и массивы неотрицательны:

param demand{DEST,PROD} >= 0;

Однако, если мы укажем фиктивные индексы в выражении индексации, мы можем использовать их, чтобы указать разные ограничения для каждого параметра:

param f_min {FOOD} >= 0;
param f_max {j in FOOD} >= f_min[j];

integer || binary

Результатом этих объявлений является определение пары параметров f_max[j]>= f_min[j] для каждого j в наборе FOOD. Фраза ограничения для объявления параметра может содержать слово integer (целое) или binary (двоичное) или оператор сравнения, за которым следует арифметическое выражение. В то время как целое число ограничивает параметр целыми значениями, двоичное ограничивает его нулем или единицей. Арифметическое выражение может относиться к наборам и параметрам, ранее определенным в модели, и к фиктивным индексам, определенным в текущем объявлении. В одном объявлении может быть несколько фраз ограничения, и в этом случае они должны быть разделены запятыми.
В особых случаях ограничительная фраза может даже ссылаться на параметр, в объявлении которого она появляется. Например, некоторые многопериодные модели производства определяются с помощью параметра cumulative_market[p,t], который представляет совокупный спрос на продукт p в течение недель с 1 по t. Поскольку значение совокупного спроса увеличивается, мы можем написать фразу ограничения следующим образом:

param cumulative_market{p in PROD, t in 1..T} >=
cumulative_market[p,t-1]; # ERROR

Однако для параметров cumulative_market[p,1] фраза ограничения будет ссылаться на данные cumulative_market[p,0], которые не определены. AMPL отклонит объявление с сообщением об ошибке.

If-then-else в ограничениях параметров

Нам вновь понадобится условное выражение, которое обрабатывает первый период отдельно:

param cumulative_market{p in PROD, t in 1..T} >= if t = 1 then 0 else cumulative_market[p,t-1];

То же самое можно записать более компактно:

param cumulative_market{p in PROD, t in 1..T} >= if t > 1 then cumulative_market[p,t-1];

Поскольку предполагается, что else 0. Почти всегда требуется некоторая форма выражения if-then-else, чтобы сделать возможной такую ссылку на себя.

Конструкция check

Иногда, желательно наложить более сложное ограничение на данные модели, чем то, которое можно выразить с помощью фразы ограничения в объявлении. Операторы check предоставляют утверждения, помогающие убедиться в том, что правильные данные были прочитаны или созданы. Каждый оператор проверки оценивается при выполнении одной из команд solve, write, solution. Оператор check имеет следующий синтаксис:

check [indexingopt:] lexpr;

Например, мы бы хотели, наложить проверку того, что в транспортной модели, общий объем предложения равнялся общему спросу. Для этого, мы можем использовать конструкцию check:

check: sum{i in ORIG}supply[i] = sum{j in DEST}demand[j];

Мультимодальная версия использует индексированную проверку, чтобы сказать, что общее предложение должно равняться общему спросу для каждого продукта:

Здесь ограничение проверяется один раз для каждого элемента p in PROD. Если проверка не удалась для какого-либо участника, AMPL напечатает сообщение об ошибке и отклонит все данные.

Необходимо применять проверочное выражение как определенный тип ограничения, но только для исходных данных. Ограничительное предложение является логическим выражением, которое может использовать любые ранее определенные наборы и параметры, а также фиктивные индексы, определенные в выражении индексации оператора. После считывания значений данных логическое выражение должно принимать значение true. Если было указано индексное выражение, логическое выражение оценивается отдельно для каждого назначения элементов набора фиктивного индекса и должно быть истинным для каждого элемента.

Настоятельно рекомендуется использовать ограничительные фразы и операторы проверки для проверки данных модели. Эти функции помогут обнаружить ошибки в данных на ранней стадии, когда их легко исправить. Не обнаруженные ошибки данных в лучшем случае вызовут ошибку при генерации переменных и ограничений, так что вы получите сообщение об ошибке. В других случаях ошибки данных приводят к генерации неверной линейной программы. Если повезет, неправильный LP будет иметь бессмысленное оптимальное решение и нужно будет потратить много времени на выяснение причин бессмысленных данных. В худшем случае неправильный LP будет иметь вероятное решение, и ошибка останется незамеченной.

Бесконечные границы данных

Бесконечность Infinity - представляет собой предопределенный параметр. Это  максимальный порог, выше которого верхние границы считаются отсутствующими (т. е. бесконечными), а -Infinity - порог, ниже которого нижние границы считаются отсутствующими. Таким образом:

set A;
param Ub{A} default Infinity;
param Lb{A} default -Infinity;
var V {i in A} >= Lb[i], <= Ub[i];

компоненты V, для которых значение Lb не указано в разделе данных, не ограничены с низу, и компоненты, для которых значение Ub не указано, не ограничены с верху. Аналогичным образом можно установить необязательные: нижнюю и верхнюю границы ограничения. На компьютерах с арифметикой IEEE (большинство современных систем) Infinity - это значение IEEE ∞.

Error, binary, indexing, if-then-else, lexpr, param, integer, IEEE, Infinity, check
Каковы ваши чувства?
Поделитесь этой статьёй:
  • Facebook
  • Twitter
  • LinkedIn
  • Pinterest
Оглавление
  • integer || binary
  • If-then-else в ограничениях параметров
  • Конструкция check
  • Бесконечные границы данных
Solverytic.com
  • Аналитика для маркетплейсов в Power BI
  • Аналитика для сети аптек и фармации в Power BI
  • Дашборд для руководителя
  • Аналитика для дистрибьюции/ритейла в power BI
  • Калькулятор онлайн стоимости BI-решения
  • Математическая оптимизация
  • Блог
  • Контакты
Solverytic.com - является официальным партнером AMPL Optimization Inc. и Microsoft
© 2023 Solverytic.com. Все права защищены. Политика конфиденциальности
Minsk, Belarus
(+375) 29 613-13-68
mail@solverytic.com