Je n'arrive pas à le faire avec Excel seul. - VB/VBA/VBS - Programmation
Marsh Posté le 28-01-2010 à 20:54:51
lol, ogame
le jeu qui a foutu ma vie sociale en l'aire pdt 1 an
tu es dans quel univers???
j'étais dans l'uni9, 20 et 22
j'étais top 100 flotte dans l'uni 9! :-)
sinon, pour ta question, à mon avis, difficile
avis aux matheux
Marsh Posté le 28-01-2010 à 21:46:40
Je joue sur le 42 depuis 1 an et demi maintenant.
Il suffit d'être organiser et de ne pas raider comme un fou et c'est gérable au quotidien.
merci de m'avoir lu en tout cas, suivant
Marsh Posté le 02-02-2010 à 00:24:50
Il faut procéder par itérations, avec la force brute... Tester toutes les solutions une par une, en arrêtant les boucles quand le nombre de points ou de vaisseaux sont dépassés.
J'ai fait quelque chose, c'est en train de calculer...
Marsh Posté le 02-02-2010 à 07:54:04
Reporting de ce matin :
Ca a tourné toute la nuit et c'est loin d'être terminé.
J'ai pour l'instant pas loin de 6000 solutions
Comme on peut le voir sur cette capture d'écran, il y a encore 5 types de vaisseaux qui n'ont pas encore commencés à être calculé...
Marsh Posté le 02-02-2010 à 10:52:55
ok merci OtObOx je pensais pas qu'il y avait autant de solution.
Maintenant on peut limiter le champ de recherche en supprimant les sondes du calcul car elles ne font pas de mal lors d'un combat.
Pourras tu me dire comment tu as procédé ?
Un grand merci en tout cas pour le temps passé sur mon problème, je ne pensais pas qu'il y aurait une réponse aussi vite.
Marsh Posté le 02-02-2010 à 13:10:14
Ca a tourné encore toute la matinée, j'en suis à 10231 solutions ! Et j'en suis encore à compter les solutions avec le nombre de vaisseaux de colonisations, qui est passé de 7 vaisseaux à 13 !
Je laisse tourner pour le fun, mais avant qu'il n'explore toutes les possibilités, il y en a encore pour des jours je pense !
Il y a 1232^12 possibilités. En enlevant celles qui dépassent les limites, je dirais que ça diminue de moitié le nombre de possibilité.
Si on enlève un vaisseau, les sondes par exemple, ça laisse encore 1232^11 solutions... même divisé par deux, ça fait beaucoup !
Enlever les sondes, c'est bien joli, mais ça fera combien de vaisseaux et de points au total ? Ce sont des données d'entrée capitales pour le calcul !
Je posterai mon code et le classeur ce soir. Il y a peut être moyen de l'optimiser pour rendre la procédure plus rapide.
Marsh Posté le 02-02-2010 à 18:52:51
Si il y a autant de possibilité il va falloir trouver le composition la plus méchante possible en privilégiant les vaisseaux les plus fort en premier et ensuite décroitre. La il ne devrait y en avoir qu'une ^^
Marsh Posté le 02-02-2010 à 19:32:58
Presque 19h00 que ça tourne, j'en suis à 15169 réponses ! Et seulement 22 vco calculés pour une limite théorique de 135 itérations. A ce rythme là, il y en a pour des mois pour tout calculer !
J'abandonne ! Peut être faudrait-il refaire la programmation avec un langage plus rapide, ou revoir le code pour l'optimiser en rendement.
Voici mon code :
Option Explicit |
Le classeur est téléchargeable ici
http://www.partage-facile.com/VJH7 [...] e.zip.html
Marsh Posté le 02-02-2010 à 22:32:37
merci bien je vais essayer de comprendre ce que tu as fait avec mes souvenirs de "BASIC" de mon adolescence.
Marsh Posté le 03-02-2010 à 16:34:59
Au fait OtObOx peux tu me conseiller un livre sur le Visual Basic qui fasse la part belle aux exemples du genre "VBA par la pratique".
En gros un livre qui soit bien construit et digeste, pas un livre qui liste les fonctions les une après les autres.
J'aime bien apprendre à partir d'exemples de petits programmes simples et explicités.
Merci
Marsh Posté le 03-02-2010 à 16:57:31
Beau travail, général OttObOx ! Impressionnant!
Moi, j'ai pas trouvé 15 691 solutions, mais j'en ai toujours trouvé une, qui a du moins l'avantage d'utiliser tous les types de vaisseaux:
Nbre Points Pts par Cat NOMS
945 * 1 = 945 Sonde espionnage
100 * 4 = 400 Petit transporteur
77 * 4 = 308 Chasseur léger
20 * 10 = 200 Chasseur lourd
10 * 10 = 100 Étoile de la mort
10 * 12 = 120 Grand transporteur
10 * 12 = 120 Destructeur
10 * 18 = 180 Recycleur
10 * 29 = 290 Croiseur
10 * 40 = 400 Vaisseau de colonisation
10 * 60 = 600 Vaisseau de bataille
10 * 85 = 850 Traqueur
10 * 90 = 900 Bombardier
Soit 1232 vaisseaux pour 5413 points CQFD
A+
Marsh Posté le 03-02-2010 à 18:00:48
onsaker a écrit : Au fait OtObOx peux tu me conseiller un livre sur le Visual Basic qui fasse la part belle aux exemples du genre "VBA par la pratique". |
VBA pour les nuls ? C'est ce bouquin qui m'a mis le pied à l'étrier.
A savoir cependant que le VBA est en perte de vitesse, le nouveau truc c'est le VB.net pour application. Donc, quitte à apprendre un nouveau langage, autant que ça soit celui là. La principale différence, c'est que cette nouvelle mouture de Microsoft est vraiment de la programmation objet, contrairement à l'ancienne version qui est simplement orientée objet.
OtObOx, avec un t (2t déséquilibrent la répartition des O )
Marsh Posté le 03-02-2010 à 18:55:18
Laoo a écrit : Beau travail, général OttObOx ! Impressionnant! Moi, j'ai pas trouvé 15 691 solutions, mais j'en ai toujours trouvé une, qui a du moins l'avantage d'utiliser tous les types de vaisseaux: Nbre Points Pts par Cat NOMS 945 * 1 = 945 Sonde espionnage Soit 1232 vaisseaux pour 5413 points CQFD A+ |
tu t'es un peu trompé sur le cout des vaisseaux ^^
Il y a 13 types de vaisseaux différents possible dont les valeurs sont les suivantes :
Destructeur = 125 pts
Étoile de la mort = 10 000 pts
Sinon j'avais besoin de quelque chose d'automatique car j'ai souvent besoin d'estimer des flottes.
Marsh Posté le 03-02-2010 à 18:58:48
otobox a écrit : |
Ok pour VB.net mais est il gratuit et fonctionne t il avec excel ?
En fait il faudrait que je puisse dialoguer au final avec Excel et Autocad par exemple.
L'avantage que je trouve à VBA c'est qu'il est intégré à microsoft Office.
Tu vois ce que je veux dire ?
Marsh Posté le 03-02-2010 à 19:20:17
Excel et AutoCAD ? Rajoute Access et t'es dans mon domaine !
(En fait, c'est présomptueux de dire ça, je suis loin de maitriser tout ça, mais je me débrouille )
ACAD, je crois que c'est à partir de la version 2009, n'utilise plus VBA, mais VB.net. (personnellement, je suis utilisateur d'ACAD V.2005, donc toujours avec le VBA).
Idem pour Office 2009 ou 2010.
VB.net est gratuitement téléchargeable sur le site Microsoft. A partir de cela, tu peux piloter n'importe quelle application supportant le vb.net. Peut être même les autres, mais je n'en suis pas sur.
VB.net te fera des application complètement indépendante, contrairement à VB.net pour applications, qui a besoin du logiciel natif pour fonctionner. C'est livré avec le logiciel, comme le VBA.
J'ai fait quelques truc en VB.net, c'est un peu différent, mais guère... Il faut arrêter de réfléchir comme le VB V.6 et raisonner en objet, c'est la grande révolution.
Par exemple, en VB (ou VBA), une variable est une variable. En VB.net, une variable est un objet, donc traitable comme un objet.
Evidemment, si tes applis ne supporte pas le VB.net, tu ne pourras pas l'utiliser au sein de celles ci. En gros, je pense que tu as le cul entre deux chaises. Il vaudrait mieux que tu attendes d'avoir des applis supportant le .net
Marsh Posté le 03-02-2010 à 19:26:15
d'après ce que tu as déjà pu voir, VB.net est plus dur a programmer que VBA ?
Pour info je ne suis pas un informaticien/programmeur mais un utilisateur éclairé.
Marsh Posté le 03-02-2010 à 20:34:27
Non, ce n'est pas plus dur. Il y a simplement des automatismes a réapprendre quand on change. C'est un peu comme quand j'ai changé de système de DAO. On recherche des fonctions qui n'existent pas dans le nouveau logiciel, mais au bout d'un certain temps, on retrouve des repères et ça roule...
C'est pourquoi je te disais que tu avais le cul entre deux chaises. Si tu apprends avec le VBA, tu vas vouloir refaire la même chose avec le vb.net, parce qu'il y a beaucoup de similitudes. Alors, si tu ne connais ni l'un ni l'autre, autant commencer avec un système qui a un avenir et laisser tomber l'autre qui va devenir obsolète. Malheureusement, pour l'instant, tu n'as accès qu'à VBA. Alors autant attendre.
Marsh Posté le 03-02-2010 à 20:49:10
ok je pense que je vais attendre ça me parait plus raisonnable.
Moi mes habitudes date de l'époque (1981 de mémoire) ou je programmais (en Basic) beaucoup avec mon ZX spectum car il n'y avait pas beaucoup de logiciel à cette époque.
Il est vrai qu'aujourd'hui il existe un logiciel dans tous les domaines.
Mais il est vrai que ça me manque un peu de pouvoir programmer un petit truc pour me simplifier la vie quand il n'existe rien sur le marché.
Marsh Posté le 03-02-2010 à 21:24:49
Mes premières lignes de programmation ont été faites avec un ZX81, mais le visual basic est quand même bien différent ! Ca n'a plus grand chose à voir, même si on retrouve des fonctions comme le for...next ou goto.
Tu peux toujours te faire la main sur des fonctions simple sous Excel. C'est assez pratique et facile, en utilisant l'enregistreur de macros.
Marsh Posté le 04-02-2010 à 09:56:56
Vu le nombre de solution je vais affiner le calcul pour faire ressortir la composition de flotte la plus dangeureuse pour moi.
J'ai donc fais sauter les vaisseaux qui ne combattent pas en virant les Sondes, les Vaisseaux de Colonisation et les Pts.
Bien qu'ils ne combattent pas j'ai laissé les GTs et les Rc car il y en a souvent dans les flottes.
Et j'ai lancé le calcul hier en début d'après midi, il est 10H00 aujourd'hui et il ne m'a trouvé aucune solution pour le moment.
A suivre ......
Marsh Posté le 04-02-2010 à 14:50:03
Bon alors j'ai abandonné car c'est beaucoup trop long et il n'a toujours trouvé aucun solution.
J'ai donc repensé l'ordre des boucles et j'ai obtenu ce résultat très rapidement
3 Des, 3 VB, 3 Cro et 1224 Clg
ou
1 Des, 2 Tra, 2 VBa, 4 Cro et 1223 Clg
ou
4 Tra, 1 VBa, 5 Cro et 1222 Clg
J'ai mis les Clg juste après les Des et ensuite les autres vaisseaux lourds.
Citation : For Rec = 0 To NbTotalVaisseaux |
Marsh Posté le 04-02-2010 à 18:21:39
Oui, j'ai aussi pensé à changer l'ordre des vaisseaux, en les ordonnant du plus fort au plus faible (ou le contraire). Mais il me semble que ça ne changera pas grand chose sur le temps d'exécution total de la procédure.
Marsh Posté le 04-02-2010 à 19:07:58
Sur la totalité ça ne changera rien mais par contre sur le temps de sortie des premiers résultats c'est "le jour et la nuit".
Marsh Posté le 19-02-2010 à 09:34:33
Bonjour
Un petit Application.ScreeUpdating=False en debut, et = True en fin divisera pas 10 le temps de traitement...
Cordialement
Marsh Posté le 28-01-2010 à 16:06:24
Bonjour,
Je coince sur excel pour résoudre mon problème.
Je pense que VBA devrait pouvoir y arriver mais je ne connais pas ce langage de programmation.
Et je n'ai malheureusement pas le temps d'apprendre un nouveau langage pour trouver ma réponse.
J'aurais donc besoin d'une personne qui aime résoudre (pour son plaisir) les problèmes mathématiques.
Donc si l'un de vous a un peu de temps et les connaissances pour m'aider je lui serais reconnaissant.
Et si à mon tour je peux aider dans un autre domaine ça sera avec grand plaisir.
Voici l'énoncé du problème.
Je joue à un jeu qui s’appel Ogame, c’est un jeu de guerre inter-galactique en ligne gratuit.
J’ai pu découvrir une partie de la flotte de mon adversaire mais il me reste une petite partie que je ne connais pas mais que je devrais pouvoir trouver par déduction.
Valeur de sa flotte complète = 128 627 pts
Nombre de vaisseaux constituant sa flotte complète = 32 536 unités
J’ai pu découvrir 31 304 de ses vaisseaux d’une valeur totale de 123 214 pts.
Il me reste donc 1 232 vaisseaux d’une valeur totale de 5 413 pts à trouver.
Il y a 13 types de vaisseaux différents possible dont les valeurs sont les suivantes :
Petit transporteur = 4 pts
Grand transporteur = 12 pts
Chasseur léger = 4 pts
Chasseur lourd =10 pts
Croiseur = 29 pts
Vaisseau de bataille = 60 pts
Vaisseau de colonisation = 40 pts
Recycleur = 18 pts
Sonde espionnage = 1 pt
Bombardier = 90 pts
Destructeur = 125 pts
Étoile de la mort = 10 000 pts
Traqueur = 85 pts
Est il possible avec VBA de trouver la compostion exacte de la flotte manquante ?
J'ai essayé avec les mathématiques mais je me retrouve avec 2 équations à 13 inconnues et je n'arrive pas a trouver les 11 autres équations.
On sait aussi qu'il ne peut pas y avoir d'étoile de la mort car elle coute trop cher ce qui fait une inconnue de moins ^^.
Si trouver la composition exacte s'avère trop compliqué voir impossible.
Peut on trouver une composition qui corresponde à la plus méchante c'est à dire avec les plus gros vaisseaux possible (traqueur, destructeur, vaisseau de bataille) ?
Message édité par onsaker le 28-01-2010 à 16:18:29