Ввод данных в AMPL

У меня есть такой набор, как:

set PRODUCTS  := p1 p2 p3 p4 p5 ;

Связанный с этим набором у меня есть некоторые параметры в форме:

param min_production {PRODUCTS} >= 0;
param max_production {PRODUCTS} >= 0;

Я хочу заполнить эти param форматом, в котором установленный индекс является индексом столбца, а имя param является индексом строки.

Что-то вроде этого:

#Data                       p1   p2   p3   p4   p5
param min_production        20   10   20   20   30 ;
param max_production       120  110  120  120  150 ;
param min_stock_products    20   20   20   20   20 ;
param max_stock_products   100   80   80  120  120 ;
param price               6400 6000 5900 6250 6500 ;
param unit_cost            800 1000  400  500 1000 ;
param fixed_cost          1500 1500 1250 1500 1600 ;
param stock_cost_products   20   20   10   25   30 ;
param frac_demand_lost     0.4  0.4  0.4  0.4  0.4 ;

Это возможно? Каков синтаксис?


person Jsevillamol    schedule 22.09.2018    source источник
comment
Готовы ли вы рассмотреть ответы, транспонирующие этот макет? (т.е. установите индекс как строку, а имя параметра как столбец.) Если это так, это выполнимо, и я могу дать ответ. Если нет, то единственный известный мне вариант — превратить имена параметров во второй набор индексов, а затем определить один параметр, проиндексированный для обоих наборов.   -  person Geoffrey Brent    schedule 22.09.2018
comment
@GeoffreyBrent Мне любопытно увидеть ответ на транспонирование   -  person Jsevillamol    schedule 22.09.2018


Ответы (1)


Раздел 9.2 Книги AMPL предлагает способ сделать что-то похожее на set индекс в виде строки и имя параметра в виде столбца. См. стр. 151, «Сводные списки множеств и параметров».

Формат будет выглядеть примерно так:

param: min_production max_production min_stock_products max_stock_products :=
p1     20             120            20                 100
p2     10             110            20                 80
p3     20             120            20                 80
;

Единственный известный мне способ сохранить продукты в качестве индекса столбца - это создать второй набор индексов, который соответствует именам параметров вашей модели, а затем определить "model_parameters" как параметр, индексированный как для продуктов, так и для параметра_типа. Затем вы можете использовать метод, показанный в книге AMPL 9.3 той же ссылки:

param model_parameters: p1   p2   p3   p4   p5 :=
min_production          20   10   20   20   30 
max_production          120  110  120  120  150 
min_stock_products      20   20   20   20   20 
max_stock_products      100  80   80   120  120 
;
person Geoffrey Brent    schedule 23.09.2018