Поскольку основная идея задачи оптимизации состоит в том, чтобы минимизировать или максимизировать функцию переменных решения, с учетом их ограничений, AMPL ориентирован на явное описание переменных и ограничений. Вот почему объявления var, как правило, идут первыми, а затем minimize or maximize and subject to. С помощью этого подхода можно сформулировать широкий спектр задач оптимизации.
Однако для определенных типов линейных программ может быть предпочтительнее объявить цель и ограничения перед переменными. Обычно в этих случаях существует гораздо более простая схема или интерпретация для коэффициентов одной переменной по всем ограничениям, чем для коэффициентов одного ограничения по всем переменным. На языке линейного программирования проще описать матрицу коэффициентов ограничения «по столбцам», чем «по строкам». В результате формулировка упрощается, сначала объявляя ограничения и цель, затем перечисляя ненулевые коэффициенты в объявлениях переменных.
Одним из примеров этого подхода являются сетевые линейные программы. Каждая переменная имеет не более двух ненулевых коэффициентов в ограничениях: +1 и -1. Вместо того, чтобы пытаться описывать ограничения алгебраически, может быть проще указать в объявлении каждой переменной одно или два ограничения, в которых фигурирует переменная. Фактически, это именно то, что делает пользователь, используя специальные объявления node и arc. Объявления узлов идут первыми, чтобы описать природу ограничений на узлах сети. Затем объявления дуг определяют переменные сетевого потока, используя фразы from и to, чтобы найти их ненулевые коэффициенты среди ограничений узла. Этот подход особенно привлекателен, поскольку он напрямую соответствует тому, как большинство людей думают о проблеме сетевого потока.
Для AMPL было бы нецелесообразно предлагать специальные объявления и фразы для всех типов линейных программ, которые можно было бы объявить по столбцам, а не по строкам.
Вместо этого, дополнительные опции var and subject to позволяют любой линейной программе получать объявления по столбцам. Долее представлены функции AMPL описания задачи по столбцам на основе двух контрастных примеров:
- производственная модель "черный ящик";
- модель планирования рабочей смены.