Problème de hauteur d'empilement maximale

8

Le problème suivant a-t-il été étudié auparavant? Si oui, quelles approches / algorithmes ont été développés pour le résoudre?

Problème ("Problème de hauteur d'empilage maximale")

Étant donné polygones, trouvez leur disposition stable et sans chevauchement qui maximise leur hauteur d'empilement sur un sol fixe sous l'influence de la gravité.n


Exemple

Trois polygones:

entrez la description de l'image ici

et trois de leurs infiniment d'arrangements stables, sans chevauchement, avec différentes hauteurs d'empilement:

entrez la description de l'image ici


Clarifications

  • Tous les polygones ont une masse uniforme et une densité égale
  • La friction est nulle
  • La gravité agit sur chaque point vers le bas (c'est-à-dire que les vecteurs de force sont tous parallèles)
  • Une configuration n'est pas considérée comme stable si elle repose sur un point d'équilibre instable (par exemple, le triangle vert sur les images ne peut s'équilibrer sur aucun de ses sommets, même si la masse à gauche et à droite du point d'équilibre est égale)
  • Pour clarifier davantage le point ci-dessus: Un polygone est considéré comme instable ("basculement") à moins qu'il ne repose sur au moins un point strictement à gauche et au moins un point strictement à droite de son centre de gravité (cette définition simplifie considérablement la simulation et en particulier, l'intégration de la position, etc. n'est pas nécessaire pour évaluer si un arrangement est stable ou non.
  • Le problème sous sa forme "physique" est un problème continu qui ne peut être résolu que dans la plupart des cas. Pour obtenir un problème discret qui peut être résolu de manière algorithmique, contraignez les sommets des polygones et leur placement dans l'arrangement à des réseaux appropriés.


Remarques

  • Les approches par force brute de toute nature sont clairement irréalisables. Même avec des contraintes strictes sur le placement des polygones à l'intérieur du réseau (comme fournir un espace de réseau limité), la complexité explose simplement pour plus de quelques polygones.
  • Les algorithmes itératifs doivent apporter des heuristiques très intelligentes car il est facile de construire des arrangements où la suppression de tout polygone unique rend la configuration instable et de tels arrangements sont inaccessibles par des algorithmes reposant sur la stabilité de chaque étape intermédiaire.
  • Puisque le problème sent au moins NP- mais plus probablement EXPTIME-complet dans le nombre total de sommets, même l'heuristique serait d'un intérêt considérable. Une chose qui donne de l'espoir est le fait que la plupart des humains reconnaîtront que le troisième arrangement dans l'exemple est optimal.

la source
Pour cette définition de «instable» (mais peut-être pas pour des définitions plus précises), on peut en principe résoudre le problème exactement en éliminant par quantification des champs fermés réels .
@RickyDemer: J'aimerais vraiment comprendre cela mais hélas, bien que j'ai jeté un coup d'œil sur le papier et suivi les points principaux, je ne vois pas la connexion. Pourriez-vous me donner quelques conseils supplémentaires? Un lien entre le problème d'empilement et l'algèbre semble certainement intrigant.
1
C'est peut-être parce que je me suis incorrectement lié à une procédure de décision plutôt qu'à un algorithme d'élimination de quantificateur . Ce document est une bien meilleure référence pour ce dont je parlais. J'ai également trouvé un article sur certains cas quadratiques qui pourraient suffire lorsque les coordonnées des sommets sont toutes rationnelles.
:) J'ai également trouvé un peu plus de matériel liant explicitement la géométrie de calcul à l'élimination des quantificateurs. Maintenant je comprends ce que vous vouliez dire par "mais peut-être pas pour des plus précis"; en effet, il semble impossible d'étendre ces méthodes purement formelles à la physique "réelle", où des contraintes complexes telles que des équations différentielles entrent en jeu. Néanmoins, merci pour l'angle d'attaque très intéressant, je vais passer un peu de temps à l'étudier.

Réponses:

1

Bien que je ne connaisse aucun algorithme spécifique pour ce problème, vous pouvez aborder cela de manière assez efficace en le décomposant en parties distinctes.

Je commencerais par trouver la rotation pour chaque forme individuelle qui fournit une hauteur maximale tout en conservant une orientation d'équilibrage valide (n'est pas sur un point comme avec le triangle). Si une forme a plusieurs hauteurs égales, j'irais avec la configuration qui donne la plus grande surface au-dessus d'elle. Une fois que vous avez cela, vous pouvez alors trouver la meilleure façon d'empiler chaque objet dans un manoir qui peut être équilibré.

GEMISIS
la source
4
Il est assez facile de construire des exemples où cette approche conduit à une solution sous-optimale. Par exemple, considérons un parallélogramme obtenu en cisaillant un très long rectangle (pour le rendre stable uniquement s'il repose sur son côté long) plus un triangle correspondant à son angle de cisaillement. Individuellement, avec votre approche, vous seriez obligé de tourner le parallélogramme pour qu'il repose sur son côté long, mais le triangle peut le soutenir pour le faire "tenir debout" (notez que le problème du frottement zéro peut facilement être surmonté en ajoutant un petit coin au parallélogramme qui permet au triangle de "s'accrocher").
C'est vrai, je n'y avais pas pensé. Une solution pourrait être de vérifier les formes qui peuvent être utilisées comme support pour l'objet, mais qui ne fournissent pas toujours une hauteur optimale. Vous pouvez toujours essayer cela et vérifier contre plusieurs configurations totales pour la meilleure hauteur, car cela devrait toujours être mieux qu'une force brute.
GEMISIS
Ici aussi, on rencontre des problèmes importants, à savoir quand ce n'est pas un objet qui en supporte un autre, mais une pile d'objets ayant juste la bonne hauteur pour supporter un très grand objet debout. Les algorithmes pour vérifier tout ce qui devient arbitrairement complexe. Cela étant dit, je suis d'accord qu'il devrait être possible d'obtenir un runtime "meilleur que la force brute" avec quelques éliminations raisonnables.