Определение набора упаковки с помощью MathProg

Для кого-то с нулевым опытом это может быть очень запутанным.

Как определить проблему Set Packing, как это видно из статьи в Википедии, как программу MathProg, которая будет позже запущена в инструменте GLPK?

Одна интуиция привела бы меня к чему-то вроде этого:

var x

maximize SetPacking :
 sum {s in Subsets} x
s.t.         ??              //x is an integer 0 or 1
s.t.         ??              //amount of x <=1
end;

Но его логика явно неверна, и я даже не могу закончить это.

1 ответ

Решение

Вы можете сформулировать проблему упаковки множества в AMPL (и MathProg, которая основана на подмножестве AMPL) следующим образом:

set U; # universe
set S; # subsets
set Members{S}; # members of subsets

# every set is either in the set packing or not
var x{S} binary;

# maximize the total number of subsets
maximize NumSets: sum{s in S} x[s];

# selected sets have to be pairwise disjoint
s.t. Disjoint{e in U}: sum{s in S: e in Members[s]} x[s] <= 1;

Обратите внимание, что вы должны ввести индексированный набор Members с каждым элементом Members[s]представляющих членов подмножества s, Это единственное отличие от алгебраической формулировки.

Другие вопросы по тегам