Я использовал 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
.
Итак, у меня есть два вопроса:
- Можно ли заставить SCIP распознавать мой ввод MathProg как есть?
- Если нет, то может кто посоветует, как его конвертировать в распознаваемый формат? Автоматический метод был бы предпочтительнее, так как я не очень хочу изучать еще один формат, но ручной метод был бы лучше, чем ничего.
Спасибо за любую помощь и извинения за мое невежество!
interfaces
. Он расположен в основном каталоге SCIP, также известном как подкаталог SCIP пакета оптимизации SCIP, если вы загрузили последний. - person Gregor   schedule 10.07.2014