Wie kann die Kardinalität einer Menge und disjunkter Partitionen minimiert werden, die Einschränkungen in der Polynomzeit unterliegen?

8

Das eigentliche Problem, mit dem ich konfrontiert bin, ist das Folgende.

INSTANZ : Ich habe Mengen und und Matrix für alle und .K : = { 1 , , k } a i j > 0 i K j N.N:={1,,n}K:={1,,k}aij>0iKjN

FRAGE : Ich muss eine Teilmenge von einer möglichst kleinen Größe finden und die Menge indisjunkte Mengen deren Vereinigung gleich so dass ich für alle für alle habe i \ in K_j .SNK|S|KjKjS

jSjjaijaij1,
iKj

Beispiel:

Gegeben ist n=k=3 und die Matrix

[0.62.71.21.32.60.81.50.40.6].

In diesem Beispiel sollte S gleich S={1,2} und K1={3} und K2={1,2} .

Ich habe zwei Fakten bemerkt:

  • Wenn in N etwas j \ existiert, jNso dass aij1 für alle iK dann ist S={j} und Kj=K ; und
  • Wenn es iK so dass aij<1 dann ist S= .

Meine Frage : Ist es möglich, dieses Optimierungsproblem in Polynomzeit zu lösen (zumindest mit einem Approximationsalgorithmus)?

Das erste, was ich versuchte, war, es in ein bekanntes Problem umzuwandeln und dann einen bekannten Algorithmus dafür anzuwenden. Ich habe darüber nachgedacht, es in ein Set-Cover oder eine Müllverpackung umzuwandeln, aber ich bin gescheitert und finde das auch nicht interessant.


Das Problem habe ich versucht zu formulieren.

Ich habe Sätze und und Matrix für alle und . Außerdem habe ich disjunkte Mengen für jedes (ich habe als Eingaben hinzugefügt, weil ich es nicht anders formulieren konnte.)N:={1,,n}K:={1,,k}aij>0iKjNnKjKjNKj

Schließlich erhalte ich Folgendes:

minimizeS|S|subject tojSjjaijaij1,jS,iKj,SN.

Vielen Dank.

drzbir
quelle
Haben Sie versucht, mithilfe der Binärvariablen als ILP neu zu formulieren ? Ihr Ziel ändert sich zu min mit einer ähnlichen Änderung in der Einschränkung. Ein ILP-Solver von der Stange kann damit problemlos umgehen. xjxj
Nicholas Mancuso
Aber ich denke, das würde mir keinen polynomiellen Zeitalgorithmus geben?
Drzbir
Vielleicht theoretisch, aber nicht in der Praxis. Moderne Löser wie CPLEX sind dank Branch and Bound und anderen Heuristiken unglaublich gut darin, in relativ kurzer Zeit optimale Lösungen zu finden.
Nicholas Mancuso
Sind die alle ? Wenn ja, dann denke ich, dass die Formulierung Ihres "echten Problems" ein Problem hat, da es trivial optimiert wird, indem eine beliebige Singleton-Menge : Wenn Sie dies tun, wird die Summe auf der LHS Ihrer Zielfunktion 0 sein .aij1S{j}
j_random_hacker
Nicht alle sind größer als . aij1
Drzbir

Antworten:

4

Auch die Entscheidung Version dieses Problem, bei dem wir versuchen , einfach zu bestimmen , ob es existiert jede machbare Lösung ist NP-schwer durch Reduktion von Exact - Abdeckung . (Die Optimierungsversion, in der wir nach einer praktikablen Lösung suchen, die minimiert , ist eindeutig mindestens so schwierig.)|S|

Die einzeilige einspaltige Matrix mit dem Wert 0,5 ist ein Beispiel für eine Eingabe, für die es keine praktikable Lösung gibt. Hier ist ein anderes:

[0.243.1350.6].

Erstellen eines Gadgets "höchstens eines auswählen"

Erstens, dass Hinweis , wenn der Maximalwert in irgendeiner Zeile ist , und diese Reihe enthält (mindestens) zwei Kopien von , sagen sich bei und , , dann kann nicht sowohl als auch , da dann einer der beiden folgenden Fälle auftreten muss, die jeweils zu einem Widerspruch führen:aix>0xaijaijjjSjj

  1. iKjKj : Angenommen, wlog, dass . Aber dann , was der Anforderung widerspricht, dass .iKjΣmS,mjaimaij=x=aijΣmS,mjaimaij1
  2. iKjKj : Dann nehme . Aber dann ist , und da in Zeile maximal ist , ist es das höchste, das könnte eindeutig , also müssen wir die gleiche Ungleichung wie zuvor verletzen.iKp,p{j,j}ΣmS,mpaimaij+aij=2xxiaipx

Daher können wir einen Maximalwert auswählen, der sicher höher ist als die Summe aller nicht maximalen Werte in der Zeile, und Kopien dieses Maximalwerts verwenden, um zu erzwingen, dass höchstens eine dieser Spalten in .S

Wir können diese Einschränkung "höchstens eine auswählen" in eine Einschränkung "genau eine auswählen" umwandeln, indem wir einen positiven Wert kleiner als 1 als "nicht maximalen" Wert verwenden. Das liegt daran, dass jede Zeile zu einem Teil der gehört , und wenn ist, wird die RHS der Ungleichung für Zeile negativ , sodass es keine Möglichkeit gibt, sie zu erfüllen: also muss mindestens ein in gezwungen werden, so dass .iKjaij<1ijSaij1

Um sicherzustellen, dass genau eine der Spalten in einer Menge in gezwungen wird , erstellen Sie eine Zeile wie folgt:TNSai

  • Set für jeden .aij=n+1jT
  • Setze für jedes zweite .aij=0.5j

Somit wird die Reduktion von Exact Abdeckung ist einfach: es eine Zeile für jedes Element ist, eine Spalte für jeden Satz, mit , wenn Satz enthält Element und sonst. Beide Richtungen ("Die Eingabe-EC-Instanz ist eine YES-Instanz konstruierte Instanz des OP-Problems eine YES-Instanz ist" und "Die konstruierte Instanz des OP-Problems ist eine YES-Instanz Eingabe-EC-Instanz eine YES-Instanz ist") sind sauber.aij=n+1jiaij=0.5

j_random_hacker
quelle
Das Beispiel, das Sie gegeben haben, hat meiner Meinung nach eine Lösung von . 2×2S={2}
Drzbir
Ich habe und . Meine Ungleichung ist also für . Weil die Ungleichung für alle gültig sein muss . S={2}K2=K={1,2}0ai21iK2={1,2}iKj
Drzbir
Du hast recht, sorry. Ich werde es jetzt reparieren.
j_random_hacker
Ich habe dieses Problem als Ganzzahlprogramm geschrieben und es gelöst. Jetzt muss ich es mit einem gierigen Algorithmus lösen (besser, einem Algorithmus mit Leistungsgarantien). Wie Sie vorgeschlagen haben, habe ich nach genauem Cover-Hopping gesucht, um Ideen zu finden, wie ein guter Algorithmus dafür entworfen werden kann. Hast du eine Idee?
Drzbir
Es ist NP-hart, daher gibt es mit ziemlicher Sicherheit keinen Poly-Time-Algorithmus. Ich würde versuchen, alle einzelnen Spalten, alle Spaltenpaare, alle Tripel usw. zu überprüfen, bis Sie eine zufriedenstellende Menge finden. Das Teilproblem, das Sie für jede Zeile lösen müssen (nämlich zu entscheiden, welches Element in für diese Zeile ausgewählt werden soll), ist einfach. S
j_random_hacker