troujean
Messages postés13Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention13 décembre 2005
-
26 nov. 2005 à 15:12
troujean
Messages postés13Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention13 décembre 2005
-
26 nov. 2005 à 23:50
Bonjour à tous,
voici mon problème en vba, je cherche une commande qui
permettrait de lancer une simulation qui mélange les lignes et les
colonnes d'un tableau excel. Le problème est que ça prend bcp de temps au niveau de
l'affichage. Par ex, si je lance une boucle qui mélange 1000 fois les
rangées, ben ça prend du temps.
Y aurait-il une commande qui permettrait de ne pas afficher les changements du tableau, mais juste le résultat final?
Mon but :
Voilà, j'ai créé un programme qui cherche à optimiser la fabrication de
printed circuit boards (PCB), en français, de circuits imprimés pour
les pc.
Expliqué sous l'un d'un programmateur, je dispose d'un tableau excel,
dont chaque case est soit un "0", soit un "1". Le but est de déplacer
les lignes et les colonnes de façon à avoir les 1 rassemblés dans
certains endroits.
par ex:
11000
01000
10111 00000
00100 10011
01110 00100
11010 00100 qui donnerait après
réorganisation
11001 00110
00011 10010
00000 11010
00111 01001
00000 11101
01010 01100
00000 01111
comme vous le voyez, le 1e et le 3e quadran possède maintenant plus de "1".
Voilà donc, si quelq'un connaissait un algo qui permettrait de faire ça!
Désolé d'avoir été si long, mais c'est pour être assez précis.
troujean
Messages postés13Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention13 décembre 2005 26 nov. 2005 à 23:50
merci bcp, c'est bien ça que je demandais.
pour mon problème, c'est tiré du domaine de la recherche
opérationnelle. Traduit en problème informatique ça donne un truc comme
ça.
on a donc un tableau excel avec dans chaque cellule, soit un 1, soit un 0.
on divise le tableau en 9, de façon à obtenir 9 "cases" rectangulaires comportant le même nombre de cellules.
de là, on compte le nombre de cellules comportant un 1 dans les 3 "cases" se trouvant dans la 1e diagonale.
de là, le but est de déplacer les lignes et les colonnes de façon à ce
que les cellules comportant un 1 se "rangent". pour cela, on veut qu'il
y ait un maximum de 1 dans lesdites 3 cases .
petit schéma parce que je sais que c'est pas très clair...
on a un tableau de 9x9:
001001001
100001010
110100101
111100101
001010101
110011010
010100101
011010101
111001011
on le divise en 9 et on s'occupe du nombre de 1 dans les 3 cases mises en gras:
001 001 001
100 001 010
110 100 101
111 100 101
001 101 101
110 011 010
010 100 101
011 010 101
111 001 011
ici il y a 15 x 1 dans les 3 cases en gras.
si on décide par exemple de d'intervertir la 1e et la 4e ligne, on obtient
111 100 101
100 001 010
110 100 101
001 001 001
001 101 101
110 011 010
010 100 101
011 010 101
111 001 011
maintenant on en compte 17... et ainsi de suite en essayant d'avoir le maximum.
pas facile...
si quelqu'un s'y connait, moi j'utilise la méthode de "recuit simulé"
(en anglais "simulated annealing") pour trouver un algo, mais ce n'est
pas encore optimal et ça prend du temps à tourner.