Можно ли преобразовать файл MIP MathProg в формат, распознаваемый SCIP?

Я использовал GLPK для решения некоторых смешанных задач целочисленного программирования. Вот пример входного файла в формате MathProg:

set REACTIONS;
set REACTANTS;
param Ys {i in REACTANTS, j in REACTIONS};
param Gamma {i in REACTANTS, j in REACTIONS};
param eps;
param delt;
var w {i in REACTANTS} >=-delt <=delt;
var R0 {i in REACTIONS} >=0 <=1, integer;
var Rn {i in REACTIONS} >=0 <=1, integer;
minimize z:  sum{i in REACTIONS} -Rn[i];
s.t. const1{i in REACTIONS} : sum{k in REACTANTS} w[k]*Gamma[k,i] <= delt*(1-R0[i]);
s.t. const2{i in REACTIONS} : -sum{k in REACTANTS} w[k]*Gamma[k,i] <= delt*(1-R0[i]);
s.t. const3{i in REACTIONS} : Rn[i] <= 1-R0[i];
s.t. const5{i in REACTIONS} : sum{k in REACTANTS} w[k]*Gamma[k,i] <= delt*(1-Rn[i])-eps;
s.t. const6{i in REACTIONS, j in REACTIONS: i <> j} : sum{k in REACTANTS} w[k]*(Ys[k,i]-Ys[k,j]) <= delt*(1-Rn[i]+Rn[j]+R0[j]);
data;
set REACTIONS:= 1 2 3 4 5 6;
set REACTANTS:= 1 2 3 4 5 6;
param Ys:   1   2   3   4   5   6:=
1    1  0   0   0   0   0
2    1  0   0   0   0   0
3    0  1   1   0   0   0
4    0  0   0   1   0   0
5    0  0   0   1   0   0
6    0  0   0   0   1   1;
param Gamma:    1   2   3   4   5   6:=
1    -1 1   0   0   0   1
2    -1 1   1   0   0   0
3    1  -1  -1  0   0   0
4    0  0   1   -1  1   0
5    0  0   0   -1  1   1
6    0  0   0   1   -1  -1;
param eps:=0.1;
param delt:=10;
end;

Я сталкивался с проблемами производительности для более крупных задач этого типа, и, поскольку SCIP утверждает, что он в несколько раз быстрее, чем GLPK для MIP, кажется, стоит изучить. Однако я не смог разобраться в документации, когда дело доходит до форматов входных файлов. На на домашней странице SCIP указано, что он поддерживает формат AMPL, а на домашней странице GLPK указано, что MathProg является подмножеством AMPL. Попытка загрузить указанный выше файл в SCIP 3.1.0 через scip -f file.nl возвращает следующую ошибку:

read problem <file.nl>
============

no reader for input file <file.nl> available

Я не уверен, связано ли это с тем, что мне не удалось собрать SCIP с поддержкой AMPL, или с чем-то другим. Я нашел эту запись в блоге о создании SCIP с поддержкой AMPL. , но инструкции кажутся устаревшими, поскольку исходный zip-файл SCIP 3.1.0 не содержит папки interfaces.

Итак, у меня есть два вопроса:

  1. Можно ли заставить SCIP распознавать мой ввод MathProg как есть?
  2. Если нет, то может кто посоветует, как его конвертировать в распознаваемый формат? Автоматический метод был бы предпочтительнее, так как я не очень хочу изучать еще один формат, но ручной метод был бы лучше, чем ничего.

Спасибо за любую помощь и извинения за мое невежество!


person Kitserve    schedule 10.07.2014    source источник
comment
в архиве есть каталог interfaces. Он расположен в основном каталоге SCIP, также известном как подкаталог SCIP пакета оптимизации SCIP, если вы загрузили последний.   -  person Gregor    schedule 10.07.2014
comment
Спасибо, не знаю, как я умудрился это пропустить! К сожалению, scipampl не распознал данные MathProg как действительные AMPL, поэтому я предполагаю, что отношения между MathProg и AMPL сложнее, чем я надеялся.   -  person Kitserve    schedule 15.07.2014
comment
scipampl — это решатель AMPL, поэтому он принимает ввод в формате .nl (en.wikipedia.org/ вики/Nl_(формат)). Я не думаю, что MathProg поддерживает это.   -  person vitaut    schedule 13.10.2014


Ответы (1)


Как я указал в своем комментарии выше, Ampl-интерфейс по-прежнему включен в дистрибутив SCIP, и вы должны иметь возможность скомпилировать его и прочитать свою проблему, как описано в отличном сообщении в блоге, которое вы цитируете.

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

  1. используйте glpk для перевода вашей проблемы в формат файла, распознаваемый SCIP. Я нашел методы glp_write_mps() и glp_write_lp. SCIP может читать как .lp, так и .mps-файлы. Убедитесь, что вы используете именно эти расширения файлов, потому что SCIP не распознает файлы в формате .lp, но заканчивающиеся на .txt.
  2. Вместо этого используйте Zimpl, чтобы сформулировать свои проблемы. Два формата Zimpl и Ampl поразительно похожи, см. документацию для примеров и дополнительных ссылок. . Описания проблем в формате Zimpl могут быть переведены в формат .lp или прочитаны непосредственно SCIP, если вы скомпилируете SCIP с параметром ZIMPL=true, который используется по умолчанию.
person Gregor    schedule 10.07.2014
comment
Пометка как принятая, поскольку это была полезная информация, хотя она не совсем помогла мне найти решение. Один из коллег нашел ответ, который я искал: glpsol включает возможность конвертировать MathProg в формат .lp, который принимается SCIP. Если кому-то это будет полезно, вот как: glpsol --check --wlp newfilename.lp --math oldfilename.glpk - person Kitserve; 15.07.2014
comment
Спасибо за публикацию решения. Я не привык к glpk, когда я загрузил его, чтобы ответить на ваш вопрос, я думал, что единственный доступ будет заключаться в том, чтобы включить библиотеку в собственные проекты, которые, как я полагал, вы, должно быть, уже написали. Я не совсем понял, что существует автономный исполняемый файл glpsol, да и руководство не дало мне намека на это. - person Gregor; 15.07.2014