Ce problème d'optimisation combinatoire est-il similaire à tout problème connu?

10

Le problème est le suivant:

Nous avons un tableau / grille de nombres en deux dimensions, chacun représentant un «avantage» ou un «profit». Nous avons également deux entiers fixes et (pour "largeur" ​​et "hauteur"). Et un entier fixe .h nwhn

Nous souhaitons maintenant superposer rectangles de dimensions sur la grille de sorte que la somme totale des valeurs des cellules de ces rectangles soit maximisée.l × hnw×h

L'image suivante est un exemple d'une grille à deux dimensions avec deux de ces rectangles superposés (l'image ne montre pas la solution optimale, juste une superposition possible où et )n = 2w=h=2n=2

Exemple de grille

Les rectangles ne peuvent pas se croiser (sinon nous aurions juste besoin de trouver la position optimale pour un rectangle, puis de mettre tous les rectangles dans cette position.)

Dans l'exemple ci-dessus, la somme totale des valeurs dans les cellules serait2+4.2+2.4+3.14+2.31.4+13.1

Est-ce similaire à un problème connu d'optimisation combinatoire? afin que je puisse commencer à lire et essayer de trouver des moyens de le résoudre.

Quelques informations supplémentaires pour les personnes intéressées:

Jusqu'à présent, les seules idées que j'ai eues sont soit un algorithme gourmand (qui trouverait le meilleur emplacement pour le premier rectangle, puis trouver la loctaion qui ne se chevauchent pas pour le deuxième rectangle, etc.) ou quelques métaheuristiques tels que les algorithmes génétiques.

En réalité, je souhaite résoudre ce problème avec une grille qui compte environ un million de cellules et des dizaines de milliers (voire des centaines de milliers) de rectangles, bien qu'il ne soit pas nécessaire de le résoudre en peu de temps (c'est-à-dire qu'il serait acceptable pour l'algorithme peut prendre des heures, voire des jours.) Je ne m'attends pas à une solution exacte mais je veux en obtenir une aussi bonne que possible compte tenu de ces contraintes.

À votre santé!

cinquante huit
la source
(au téléphone), cela semble pouvoir être résolu avec une correspondance maximale sous une transformation et quelques contraintes supplémentaires. J'essaierai d'écrire plus tard.
Nicholas Mancuso
Je peux imaginer que l'utilisation du exact signifie parfois qu'un maximum "local" n'est pas utilisé mais un anneau autour de lui. J'imagine une simple forme de dôme ici, où la prise "gourmande" du centre du dôme signifie que vous ne pouvez pas adapter tous les n - 1 autour de lui. nn1
Mark Hurd
Ma première pensée serait d'essayer la programmation dynamique. Numérotez les carrés en fonction de leur distance de Manhattan à partir du coin supérieur gauche. Un sous-problème est: un nombre d'un carré; une liste L de rectangles que vous avez sélectionnés dont le corder supérieur gauche a un nombre inférieur à s ; et le but est d'étendre L au meilleur ensemble possible de carrés qui ne se chevauchent pas en ajoutant un sous-ensemble de carrés avec des coins supérieurs gauche ayant des nombres s . Vous pouvez résoudre rapidement chaque sous-problème si vous avez la solution à tous les sous-problèmes ultérieurs. La seule question est de savoir combien de sous-problèmes vous devrez explorer. sLsLs
DW

Réponses:

2

Ma dernière formulation avait une faille fatale qui nécessiterait une quantité exponentielle de nœuds de "contrainte".

rwrr,rk=n

Nicholas Mancuso
la source
C'est la direction vers laquelle je penche actuellement, je vais expérimenter cela et accepter la solution si c'est celle que je finis par utiliser, applaudit.
cinquante
2

Vous pouvez formuler cela comme une instance de programmation linéaire (ILP) gigantesque, puis appliquer un solveur ILP standard (lp_solve, CPLEX, etc.). Ils vous donneront la meilleure solution possible. Étant donné la taille de votre instance de problème, je ne sais pas si cela sera suffisamment efficace, mais il serait facile d'essayer.

xrrxr=1rxr=0rcrxrcrrrxr=nxr+xs1r,s

DW
la source
Pensez-vous que ce problème est NP-difficile? Je ne suis pas convaincu qu'il n'y ait pas de solution de temps poly, et les solveurs ILP sont peu susceptibles de terminer même des instances de taille modérée.
RB
1
@RB, je n'ai aucune idée si c'est NP-difficile. Voir mon commentaire sous la question sur la programmation dynamique pour ma première réflexion sur la façon d'essayer de trouver un algorithme à temps polynomial (mais je ne sais pas si l'algorithme résultant sera en P ou non). En ce qui concerne ce que les solveurs ILP peuvent faire, la seule façon de le savoir est d'essayer - parfois leurs performances peuvent être surprenantes.
DW