Suite arithmétique et géométrique à plusieurs embranchements

Olympiades mathématiques, énigmes et défis
Yecho
Messages: 4
Enregistré le: 07 Juil 2021, 12:41

Suite arithmétique et géométrique à plusieurs embranchements

par Yecho » 07 Juil 2021, 12:53

Bonjour à tous,

Dans un jeu vidéo auquel je joue, il y a un événement pour lequel nous jouons un personnage et celui-ci gagne des niveaux à chaque fois que nous battons des ennemis.

Pour améliorer notre personnage quand nous montons de niveau, nous avons 3 possibilités :
Augmenter de 6 notre attaque.
Augmenter de 12% notre dégât critique.
Augmenter de 0,4% notre chance de coup critique.

La formule des dégâts est la suivante :
Attaque * dégât critique si dégât critique
Sinon juste attaque.

Ci-dessous la situation initiale :
L'attaque = 100
Les dégâts critiques = 200%
La chance critique = 10%

Edit : Tous les 30 niveaux sur une statistique, celle-ci diminue de moitié pendant 10 augmentation puis reprend son augmentation d'origine pendant 30 niveaux et ainsi de suite.

Y a t il un ordre optimal pour monter les caractéristiques ? Existe t il une formule pour savoir comment optimiser chaque montée de niveau, autre que la façon "brute" ?

Edit 2 : j'ai réalisé un tableur excel pour étayer mon souci, ça m'a l'air infaisable autrement... Si vous arrivez à théoriser mon problème et à y voir un pattern, tant mieux sinon c'est pas grave je resterai sur mon tableur excel. (Je pense qu'il y a trop d'arguments dans mon problème)

Si vous avez besoin d'un autre renseignement dans mon problème, n'hésitez pas à me le demander.



lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Suite arithmétique et géométrique à plusieurs embranchem

par lyceen95 » 07 Juil 2021, 20:58

Situation à t'instant t:
Attaque = (=100 pour t=0)
Dégat Critique = (=2 pour t=0)
Chance de coup critique = (=10% pour t=0)

Les dégats que tu vas faire sont de A_t*D_t dans C_t % desc cas , et de A_t dans le cas contraire.
Donc , en moyenne, les dégats sont de

A l'instant t+1, tu as le choix entre ou ou

Je n'ai pas trop compris ce qui se passe tous les 30 niveaux, donc pour l'instant, je fais l'impasse sur ça.

Comment choisir entre Augmenter , ou augmenter : Sur les premiers paliers, en augmentant , tu augmentes ton efficacité (de 6%) , sur tous les combats, alors qu'en augmentant , tu augmentes ton efficacité de 6% aussi, mais sur 10% des combats seulement.
Ce qui est pris n'est plus à prendre, tant que est proche de 100, 200 , 300, tant que est très petit, il n'y a à peu près aucun bénéfice à augmenter , au moins au début. Augmenter est mieux qu'augmenter .
Comment choisir entre Augmenter t et augmenter ? Là, c'est un peu plus subtil. On peut avoir une notion de stratégie qui intervient. Il y a des jeux où on veut finir premier ou rien, et on prend tous les risques. Et il y a des jeux où on vise l'assurance : je veux minimiser les risques, je veux finir dans les 100 premiers, pas la peine de tenter un exploit.
Ca veut dire quoi ? Si on veut finir premier ou rien, on va dire : A chaque tour, j'ai 10% de chances de faire bingo. Ce n'est pas beaucoup, mais je vais parier que je vais avoir BEAUCOUP de chance. Ce n'est pas la peine d'augmenter ce , je vais avoir de la chance (méthode Coué), et donc j'augmente .

Si on contraire, on veut jouer l'assurance, on va plus facilement augmenter .

Admettons qu'on soit dans ce 2nd scénario, il reste à voir si augmenter est réellement avantageux.
Entre et , lequel des 2 nombres est le plus grand ... et on choisit en fonction de ce résultat.

Ici, j'essaie d'augmenter ma performance immédiate le plus possible. Comment être le plus efficace possible dès le prochain tour.
Ce n'est peut-être pas la bonne stratégie, peut-être que les adversaires qu'on doit tuer au début sont très faciles, et il faut viser : comment être le plus efficace possible dans 20 tours, parce que c'est à ce moment là que les dangers vont arriver. Et dans ce cas là, augmenter A est moins pertinent, c'est plutôt D qu'il faudrait augmenter. Regarde ce qui se passe si tu augmentes A 20 fois, ou si tu augmentes D 20 fois.
Ca je ne sais pas comment ton jeu est foutu.

En plus, si pour tuer un adversaire, il faut 140 points par exemple, ça ne sert pas à grand chose d'avoir un facteur 2 ou plus , ça ne sert pas à grand chose que soit élevé. Il vaut mieux faire en sorte que chaque Attaque génère 140 points, et on est sûr de tuer un adversaire à chaque attaque.
Il peut donc y avoir des effets de seuil comme ça.

Voilà les réflexions que ta question m'inspire, tu n'es pas plus avancé... mais tu as des éléments pour réfléchir.

Yecho
Messages: 4
Enregistré le: 07 Juil 2021, 12:41

Re: Suite arithmétique et géométrique à plusieurs embranchem

par Yecho » 07 Juil 2021, 23:23

Merci de ton retour.

Mes dégats sont fixes et ne sont en rien influencé par les ennemis.

Mes ennemis n'infligent pas de dégats, on se soucie uniquement de mon personnage.

Leur point de vie augmente au fur et à mesure des niveaux passés. Ennemi 1 : 1000 points de vie, Ennemi 2 : 1500 points de vie ... de façon plus ou moins linéaire.

J'avais essayé un projet sur Excel, mais la complexité de mon souci de la 30ème amélioration m'a fait arrêter.

Selon mon estimation jusqu'à 500 d'attaque soit sur 100+(5*80 tours) il est plus rentable d'augmenter les dégats "bruts". Mais cela ne tient pas à compte de l'événement à la 30ème amélioration.

https://www.zupimages.net/viewer.php?id=21/27/u90i.png

Pour t'expliquer cette événement, au moment où j'arrive au 30/70/110...ème niveau d'une des 3 caractéristiques, l'augmentation de cette même statistique et uniquement de celle-ci est divisé par 2 pendant 10 niveaux, puis on reprend l'augmentation normal. Donc je peux mettre à 29 chaque statistique puis choisir quel statistique montée s'il s'agit de la meilleure stratégie à adopter.

lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Suite arithmétique et géométrique à plusieurs embranchem

par lyceen95 » 08 Juil 2021, 00:46

Zut fausse manip tout perdu.

En résumé, ... j'ai fait un fichier Excel aussi.
Il faut augmenter A au début. Jusqu'à 280. Ensuite, le bénéfice devient trop faible, et il faut augmenter D, une douzaine de fois, jusqu'à avoir D=8 environ. Au delà, c'est peu justifié d'augmenter D. On a en principe à ce niveau des adversaires qui ont à peu près 3000 points de vie, on va leur donner plusieurs coups à 280 pts de vie, et quand on a de la chance, un coup à 8*280 points de vie. Si l'adversaire était déjà amoché, et qu'il lui restait 1500 points de vie, un coup à 8*280 points de vie, c'est du gachis,
Il faut donc à ce moment là, vers le 40ème coup, commencer à augmenter le 3ème paramètre.
Au 40ème coup, on est en gros à (A=280, D=5.546, C=10%) et jusqu'au 100ème coup , on fait peu évoluer A et D, et on fait évoluer surtout C ... pour arriver en gros à (A=292, D=24.2, C=28%)
Et sur la suite, pareil, au 200ème coup, on est en gros à (A=346, D=84.18, C=60%) pour des adversaires d'environ 28000 pts de vie.

Lunns
Membre Naturel
Messages: 13
Enregistré le: 08 Juil 2021, 09:53

Re: Suite arithmétique et géométrique à plusieurs embranchem

par Lunns » 08 Juil 2021, 10:33

Bonjour,

J'ai fait un petit script Python qui normalement devrait répondre à tes questions. Pas de démonstration formelle donc, mais des éléments de réponse. Je mets le code en fin de post, pour l'utiliser, il suffit simplement de télécharger Python (j'utilise la version 3.9.0) et de le faire tourner en changeant la valeur de n qui représente le niveau. Il t'affichera ensuite à chaque étape le niveau des caractéristiques et donc celle à augmenter à chaque passage de niveau.

Je remarque qu'il est intéressant au départ d'augmenter ses dégâts (jusqu'au lvl 30) puis d'alterner avec les dcc (jusqu'au lvl 40 att et 10 dcc), puis dégâts jusqu'au lvl 60, puis alternance dégâts/dcc jusqu'à 60/17/0 et enfin on commence doucement à monter les chances de CC.

Le pattern est ensuite le suivant : 60/30/30 -> 90/30/30 -> 90/60/30 -> 90/60/60 -> 90/90/60 -> 120/90/60 -> 120/90/90, puis devient davantage chaotique, au fur et à mesure que les CC tendent vers 100%. Une fois la limite atteinte (pour le lvl 264 en CC), on observe une alternance à chaque niveau entre dégâts et dcc dans les tranches [n*30;n*30+9] et une alternance (tout dégâts puis tout dcc) dans les tranches [n*30+10; n*30+29].

En résumé, je n'ai pas l'impression de trouver de pattern exact qui se répète tant que les chances de CC n'ont pas atteint leur maximum. Je pense que ceci est dû au fait que l'on n'est pas linéaire et qu'il n'y a pas assez de niveau avant d'atteindre le max pour dégager un vrai pattern. Une fois le max atteint, on a un pattern simple et qui prend bien en compte le fait que tous les 30 niveaux et durant 10, les bonus sont divisés par 2.

Je n'ai pas tout détaillé, j'espère ne pas avoir fait d'erreur dans le code (je l'ai fait assez vite et n'ai pas tout vérifié) mais j'espère que ça t'aidera un peu.

Si tu as des questions ou des remarques, n'hésite pas à me les partager.

Lunns

Code: Tout sélectionner
def degats(att,dcc,cc):
    """Calcule les dégâts moyens."""
    return(att*dcc/100*cc/100 + att*(1-cc/100))

def check_upgrade(stat_lvl,stat_up):
    """Permet de prendre en compte le cas où une caractéristique est entre n*30 et n*30 +10 et qu'elle est donc augmentée de moitié seulement."""
    if stat_lvl >= 30 and stat_lvl%30 < 10:
        return(stat_up/2)
    else:
        return(stat_up)

def levelup_opti(att,dcc,cc,att_lvl,dcc_lvl,cc_lvl):
    """Renvoie le nouvel état des caractéristiques : leur valeur ainsi que leur niveau d'augmentation."""
    att_up = check_upgrade(att_lvl,6)
    dcc_up = check_upgrade(dcc_lvl,12)
    cc_up = check_upgrade(cc_lvl,0.4)
   
    max_deg = max(degats(att + att_up, dcc, cc), degats(att, dcc + dcc_up, cc), degats(att,dcc,cc + cc_up)) #calcule le max de dégâts selon les 3 scénarios
   
    if max_deg == degats(att + att_up, dcc, cc): #Si l'attaque est à privilégier
        return(att + att_up,dcc,cc,att_lvl + 1,dcc_lvl,cc_lvl)
    elif max_deg == degats(att, dcc + dcc_up, cc): #Si les dégâts crit sont à privilégier
        return(att,dcc + dcc_up,cc,att_lvl,dcc_lvl + 1,cc_lvl)
    else: #Si les chances de coups crit sont à privilégier
        return(att,dcc,cc + cc_up,att_lvl,dcc_lvl,cc_lvl + 1)

def pattern(n):
    att = 100
    dcc = 200
    cc = 10
    att_level = dcc_level = cc_level = 0
    for i in range(n):
        att,dcc,cc,att_level,dcc_level,cc_level = levelup_opti(att,dcc,cc,att_level,dcc_level,cc_level)
        print([att_level,dcc_level,cc_level])

if __name__ == '__main__':
    n = 20000
    pattern(n)

Yecho
Messages: 4
Enregistré le: 07 Juil 2021, 12:41

Re: Suite arithmétique et géométrique à plusieurs embranchem

par Yecho » 08 Juil 2021, 13:27

Super, j'irai vérifier ça mais ça m'a l'air très complet et cohérent avec mon esquisse sur excel.
J'aurai bien aimé avoir les connaissances afin de pouvoir résoudre ce genre de problème (disons le, dans le cas present, existentiel), mais j'aime bien optimiser quand je peux mes décisions.
Merci beaucoup de ton aide en tout cas.

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite