Como minimizar a cardinalidade de um conjunto e partições disjuntas sujeitas a restrições no tempo polinomial?


8

O verdadeiro problema que estou enfrentando é o seguinte.

INSTANCE : tenho conjuntosN:={1,…,n} e K:={1,…,k} e matriz aij>0 para todos i∈K e j∈N.

PERGUNTA : preciso encontrar um subconjuntoS do N de tamanho o menor possível e particione o conjunto K para dentro |S| conjuntos disjuntos Kj cuja união é igual K tal que para todos j∈S, Eu tenho

∑j′∈Sj′≠jaij′⩽aij−1,
para todos os .i∈Kj

Exemplo:

Dado e a matriz n=k=3

[0.62.71.21.32.60.81.50.40.6].

Neste exemplo, deve ser igual a S = \ {1, 2 \} e K_1 = \ {3 \} e K_2 = \ {1,2 \} .SS={1,2}K1={3}K2={1,2}

Notei dois fatos:

  • Se houver algum j∈N tal que aij⩾1 para todos os i∈K então S={j} e Kj=K ; e
  • Se existir algum i∈K tal que aij<1 então S=∅ .

Minha pergunta : É possível resolver esse problema de otimização em tempo polinomial (pelo menos com algoritmo de aproximação)?

A primeira coisa que tentei fazer foi transformá-lo em um problema conhecido e depois aplicar um algoritmo conhecido para isso. Pensei em transformá-lo em uma tampa ou caixa de embalagem, mas falhei e também não acho que isso seja interessante.


O problema que tentei formular.

I têm conjuntos e e matriz para todos os e . Além disso, eu tenho conjuntos disjuntos para cada (eu adicionei como entradas porque não poderia formulá-lo de outra forma.)N:={1,…,n}K:={1,…,k}aij>0i∈Kj∈NnKj⊂Kj∈NKj

Por fim, recebo o seguinte:

minimizeS|S|subject to∑j′∈Sj′≠jaij′⩽aij−1,∀j∈S,i∈Kj,S⊆N.

Obrigado.


Você tentou reformular como um ILP usando variáveis ​​binárias ? Seu objetivo muda para min com uma alteração semelhante na restrição. Um solucionador de ILP pronto para uso pode lidar perfeitamente com isso. xj∑xj
— Nicholas Mancuso

Mas acho que isso não me daria um algoritmo de tempo polinomial?
— drzbir

Talvez na teoria, mas não na prática. Os solucionadores modernos como o CPLEX são incrivelmente bons em encontrar soluções ótimas em um tempo relativamente curto, graças às ramificações e ramificações e outras heurísticas.
— Nicholas Mancuso

O all ? Nesse caso, acho que a formulação do seu "problema real" tem um problema, já que é trivialmente otimizado, deixando ser qualquer conjunto de singleton : isso faz com que a soma no LHS da sua função objetivo seja 0 .aij≥1S{j}
— j_random_hacker

Nem todos os são maiores que . aij1
— drzbir

Respostas:


4

Mesmo a versão de decisão desse problema, na qual tentamos determinar simplesmente se existe alguma solução viável, é difícil de NP por redução do Exact Cover . (A versão de otimização, onde buscamos uma solução viável que minimize , é claramente pelo menos tão difícil quanto isso.)|S|

A matriz de linha única e coluna única contendo o valor 0,5 é um exemplo de entrada para a qual não há solução viável. Aqui está outro:

[0.243.1350.6].

Criando um gadget "Escolha no máximo um"

Primeiro, observe que, se o valor máximo em alguma linha for , e essa linha contiver (pelo menos) duas cópias de , digamos em e , , não pode conter e , pois se o fez, um dos dois casos a seguir deve surgir, cada um dos quais leva a uma contradição:aix>0xaijaij′j′≠jSjj′

  1. i∈Kj∪Kj′ : suponha que wlog . Mas então , contradizendo o requisito que .i∈KjΣm∈S,m≠jaim≥aij′=x=aijΣm∈S,m≠jaim≤aij−1
  2. i∉Kj∪Kj′ : Suponha que . Mas então , e como é o máximo na linha , o mais alto que poderia ser é claramente , então devemos estar violando a mesma desigualdade de antes.i∈Kp,p∉{j,j′}Σm∈S,m≠paim≥aij+aij′=2xxiaipx

Assim, podemos escolher um valor máximo que é seguramente maior do que a soma de todos os valores não-máximas na linha, e usar cópias deste valor máximo para impor que, no máximo, uma daquelas colunas está incluída no .S

Podemos transformar essa restrição "escolher no máximo uma" em uma restrição "escolher exatamente uma" usando qualquer valor positivo menor que 1 como o valor "não máximo". Isso porque cada linha pertence a alguma parte da partição de linha e, se , o RHS da desigualdade se torna negativo para a linha , portanto não há como satisfazê-la: portanto, pelo menos um deve ser forçado a modo que .iKjaij<1ijSaij≥1

Portanto, para garantir que exatamente uma das colunas em algum conjunto seja forçada em , crie uma linha seguinte maneira:T⊆NSai

  • Conjunto para cada .aij=n+1j∈T
  • Defina para todos os outros .aij=0.5j

Assim, a redução da tampa exacta é simples: há uma linha para cada elemento, uma coluna para cada conjunto, com , sempre conjunto inclui elemento e contrário. Ambas as direções ("A instância EC de entrada é uma instância YES instância construída do problema do OP é uma instância YES" e "A instância construída do problema do OP é uma instância YES a instância EC de entrada é uma instância YES") são claros.aij=n+1jiaij=0.5⟹⟹


O exemplo você deu acho que tem uma solução de . 2×2S={2}
— drzbir

Eu tenho e . Portanto, minha desigualdade é para . Porque a desigualdade deve ser válida para todos os . S={2}K2=K={1,2}0⩽ai2−1i∈K2={1,2}i∈Kj
— drzbir

Você está certo, desculpe. Eu vou consertar agora.
— Jrandom_hacker

Eu escrevi esse problema como programa inteiro e resolvi-o. Agora, preciso resolvê-lo com um algoritmo ganancioso (melhor, um algoritmo com desempenho garantido). Como você sugeriu, procurei capas exatas para encontrar idéias de como criar um bom algoritmo para isso. Você tem alguma ideia?
— drzbir

É NP-difícil, então quase certamente não existe um algoritmo poli-tempo. Eu tentaria verificar todas as colunas únicas, todos os pares de colunas, todos os triplos etc. até encontrar um conjunto satisfatório. O subproblema que você precisa resolver para cada linha (ou seja, decidir qual elemento em escolher para essa linha) é fácil. S
— Jrandom_hacker
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.