Répartir aléatoirement des objets dans un tableau + 1 contrainte

Bonjour à tous

1) les objets sont des fleurs, que je dois planter dans une serre ou un champ de manière aléatoire en évitant d'avoir des fleurs identiques adjacentes

2) Voici un exemple de cette répartition manuelle avec 24 fleurs différentes en 10 exemplaires pour la plupart.

image

Ce travail est fait manuellement et prend des heures

3) La matrice permet d'avoir une idée de la répartition homogène des fleurs. Pour faire cette matrice (manuellement) et simplifier notre travail, nous n'avons tenu compte que des fleurs adjacentes horizontale et verticales. Dans l'exemple, le min est 0 et le max est 3. L'idéale aurait été d'avoir seulement des 1, mais cela est impossible étant donné le nombre trop restreint de fleurs différentes. En effet, pour chaque fleur, max 4 fleurs adjacentes (horizontalement et verticalement), 10 exemplaires, donc max 40 fleurs adjacentes. Mais nous n'avons que 23 possibilités.

Vous comprenez maintenant mieux mon besoin d'automatiser ce travail, et mon besoin d'écrire une macro. Mais ce défi était trop compliqué pour moi au vu de mes faibles connaissances en VBA. Je pense que vous avez répondu à l'ensemble de mes demandes (sauf l'erreur si nombre de fleurs < nombre de place dans tableau). Je tiens donc encore à vous remercier (surtout BsAlv ) pour vous être penché sur mon problème. Je ne voudrais pas abuser plus de votre temps qui est certainement très précieux.

Cependant si cela vous amuse, et que vous aimez les défis, vous devez savoir que lorsque nous faisons cette répartition manuelle de nos fleurs, nous rajoutons parfois une deuxième voire une troisième contrainte. La couleur des fleurs (10-15 différentes) et les espèces de fleurs (10-20 différentes). Dans ce cas, il ne faut pas de fleurs adjacentes identiques, pas ou un minimum de fleurs de même couleur, pas ou un minimum de fleurs de même espèce. Cette macro serait un luxe pour moi

Bàv

Phosphino

Merci Bart pour ces explications, et pour tous les efforts que tu fais , il faut dire que j'ai appris beaucoup de choses juste en vous suivant.

@tt

re,

je ne sais pas si je l'ai bien compris, mais voici une proposition pour 24 objets en 5 couleurs. Il n'y a aucun objet adjacent et seulement 2 couleurs adjacent !

Temps d'exécution = 1 minute, pour situer les couleurs adjacent voir plage CB35:CS48.

je m'en vais maintenant, je m'explique ce soir ... .

8phosphino.xlsm (61.39 Ko)

re, bon, maintenant avec explication dans la macro et une solution sans points de pénalités

13phosphino.xlsm (61.58 Ko)

Re Bart & Phosphino

Excusez-moi, peut-être mon « obsession » à vouloir comprendre ce genre de pb qui font intervenir des boucles.

Phosphino pour mon intrusion dans ton sujet qui peut-être retarde Bart à répondre à tes soucis

Concernant mon messages précédent ce qui m’a échappé c que la boucle k continue de décrémenter k alors que moi j gardé à l’esprit ptr qui ne bouge pas lors des changements de mauvais choix à partir de E ( il reste égal au nbre d’objets noir de D) alors que k diminue et les r sont entre 1 et k: c vrai que le fait de faire descendre un objet en bas de E va le faire échapper au prochain tirage entre 1 et k (k diminue de plus en plus et inferieur à ptr) mais la façon des formule de permutation dans E Fait que ce n’est pas une véritable poubelle elle n’est pas comme celle de D : dans E un objet déjà mis en bas, peut participer à un prochain tirage, imaginer plusieurs mauvais choix consécutifs

par exemple que r=2 nous a donné D-02 à mettre au tableau enn cells (i=2,j=2) ; on l’enlève tout de suite et on le met à E(ptr1=10) (la première fois k=ptr1=10 ) ; le A-03 (par exp) qui était en bas à E(ptr1) on le ramène à E(r=2) la boucle k tourne et met k maintenant à 9 (cette boucle ne touche pas à ptr ni ptr1) , k=9 donc prochain r ne peut pas atteindre le D-02 c vrai ! mais imaginer qu’elle a choisi r=4 et tombe sur D-03 mauvais aussi ici regardez bien ce qui va se passer :

D-02 qui a été stocké précédemment dans E(ptr1) va remonter à E(4) et va placer en bas à E(ptr1) ce D-03

D-02 qu’on a jeté à la poubelle précédemment est revenu à une position (4) où il peut être atteint par le prochain r (k=8=> r ente 1 et 8)

Je comprend le but voulu de Bart mais je pense tout simplement qu’il a utilisé par erreur ptr1 au lieu de k dans les formules du cas b=false

Normalement comme ça:

Cells(r, "E").Value = Cells(k, "E").Value 
Cells(k, "E").Value = .Cells(i, j).Value
.Cells(i, j).Value = ""

ci-joint fichier et une capture où je suis tombé sur un cas de plusieurs mauvais choix consécutifs : la poubelle de E est bien fermée les « noir » de E diminuent alors qu’en D sont stagné pendant la recherche en E du bon choix.

4phosphinoe.xlsm (39.68 Ko)
ph e

Ce qui est aussi bizard c que tu as parlé de cette fonction match qu’elle a un rôle quelconque, mais moi je ne lui vois aucun rôle sauf s’il y a une erreur dans son emplacement dans les boucles ( elle donne toujours le même r celui choisis au hasard = celui déterminé par match

Cordialement

re, j'utilise "ptr" pour "pointer" en anglais (google translate : aiguille), et ce pointer est "ptr" pour la colonne D et "ptr1" pour la colonne E et sert à fixer la dernière ligne des 2 marmites. Et c'est vrai que ptr1 ne fait pas grand chose, ce sont le "k" et "r" en colonne E pour choisir le prochain objet, puis on revient vers la colonne D, où le même objet ne se trouve pas toujours cote à cote, donc le "r" de la colonne E n'est pas bonne pour la colonne D et avec ce match, on recherche la position de l'objet choisi dans la colonne D.

Dans la nouvelle version, la colonne E est disparue ... .

re

9phosphino-d.xlsm (42.43 Ko)

avec seulement colonne D

.et collection des combinaisons resultats à la feuille f1

en attendant sans colonnes marmite ...

@ tt

re,

vous vous amusez bien, supér.

La sans colonne marmite était mon but initial, tout faire en mémoire, parce que cela est le plus vite.

Mais je l'ai fait de cette manière physique, pourque vous (et le reste) pouvauent suivre ... .

Voir mon poste de jeudi, 100 boucles en 1 minute, avec un tableau en mémoire .... ??? moins que la moitié ???

re,

17 sec = 1 quart

12phosphino.xlsm (73.43 Ko)

bonjour,

@ Bart , en réalité pour sans colonnes marmite et sans autres calcules dans la feuille, je t'attendais, parce que je savais que moi ça va me prendre des mois !, je suis toujours encore en phase de m'entrainer et analyser les autres calcules: (de nombre d'adjacent...etc)..

Oui effectivement l'affichage sur la feuille du déroulement des calculs nous aide beaucoup...

à l’occasion j’ai pensais avant, de soumettre un problème de conception d’un planning de travail de permanence (jour/nuit) d’une équipe… un peu particulière, que je vois qu’il ressemble un peu à ce problème, alors je vais m’entrainer sur ça, et essayer de le faire seul, si je trouve des difficultés je le soumis à ce ce forum

@tt

re,

une simplification dans la feuille "DUMMY" !

Il y a une macro qui remplit la plage d'une manière vraiment aléatoire. Donc cela cause autant de "problèmes" dans la plage droite. Si vous regardez les formules de cette plage, ils comptent les nombre de cellules des 9 cellules autour d'une cellule avec les mêmes 2 derniers lettres (=couleur) -1 (pour éliminer la cellule elle-même).

Bon, il y a une 2ième macro, quick, dirty et dummy, qui échange une cellule problèmatique et une cellule aléatoire et si le résultat (la somme en P23) est mieux, c'est bien, autrement on retourne à la situation précédente.

Ces problèmes qui se posent assez simple, comme "aucun cellule adjacent le même couleur" sont souvent difficile à résoudre

Comme ça, vous pouvez peut-être résoudre vos plannings ...

14phosphino.xlsm (88.81 Ko)
Rechercher des sujets similaires à "repartir aleatoirement objets tableau contrainte"