Проблема С solve minimize
Я получаю только одно решение, хотя существует несколько оптимальных решений.Я включил распечатку нескольких решений в конфигурациях решателя.Другие оптимальные решения находятся с solve satisfy
вместе с неоптимальными решениями.
Возможные причины Может ли быть так, что кардинальная функция card()
ранжируется по значению перечисления, где размер равен двумнаборы равны?Другими словами, что card(A, B) > card(B, C)
?Если да, нужно ли переключать представление моих вершин?
Программа Я создаю программу MiniZinc для нахождения минимального покрытия вершин данного графа.График в этом примере выглядит следующим образом:

При минимальном разрешении вершинного покрытия: [{A, B, C, E}, {A, B, E, F}, {A, C, D, E}, {B, C, D, E}, {B, C, D, F}, {B, D, E, F}]
. Мой код выводит только {A, B, C, E}
.
Файл данных:
VERTEX = {A, B, C, D, E, F};
edges = [|1, 0, 1, 0, 0, 0, 0, 0, 0
|1, 1, 0, 1, 1, 0, 0, 0, 0
|0, 1, 0, 0, 0, 1, 1, 0, 0
|0, 0, 1, 1, 0, 0, 0, 1, 0
|0, 0, 0, 0, 1, 1, 0, 1, 1
|0, 0, 0, 0, 0, 0, 1, 0, 1|];
Программа расчета:
% Vertices in graph
enum VERTEX;
% Edges between vertices
array[VERTEX, int] of int: edges;
int: num_edges = (length(edges) div card(VERTEX));
% Set of vertices to find
var set of VERTEX: span;
% Number of vertices connected to edge resulting from span
array[1..num_edges] of var 0..num_edges: conn;
% All edges must be connected with at least one vertex from span
constraint forall(i in 1..num_edges)
(conn[i] >= 1);
% The number of connections to each edge is the number of vertices
% in span with a connection to that edge
constraint forall(i in 1..num_edges)
(conn[i] = sum([edges[vert,i]| vert in span]));
% Minimize the number of vertices in span
solve minimize card(span);