Aller au contenu


Calculs Mathématiques


  • Veuillez vous connecter pour répondre
24 réponses à ce sujet

#1 Lethal paradox

Lethal paradox

Posté 18 février 2008 - 16:57

Salut

J'aurais besoin d'utiliser des fonctions dans des scripts:
-cos (arcos )
-sin ( arcsin )
-tan ( arctan )
-exponentielle
-logarithme
-log népérien

merci
Batîsseur de L'empire céleste

#2 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 18 février 2008 - 17:06

Bonjour

Moultes solutions :

- Approximer ces fonctions par leur développement de Taylor en un point (à l'ordre 6 ou 7 ça suffit pour le sinus et le cosinus je crois; c'est laid mais c'est pratique et pas cassant, pour une fonction lisse ça ne pose aucune difficulté)
- utiliser des scripts de tables de sinus, de cosinus, de log, etc. (voir le tutoriel MSFD)
- utiliser maths mod : http://planeteldersc...w...ail&id=6082 (je ne garantis pas l'optimisation des méthodes utilisées)
- utiliser Morrowind Script Extender (idem)

#3 Lethal paradox

Lethal paradox

Posté 18 février 2008 - 17:09

Ok merci
mais pour le dévellopement de taylor ca pose problème
Batîsseur de L'empire céleste

#4 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 18 février 2008 - 17:28

Citation

mais pour le dévellopement de taylor ca pose problème
Mais encore ?

#5 Lethal paradox

Lethal paradox

Posté 18 février 2008 - 17:31

salut

pour la fonction exponentielle, j'ai besoin de valeur très précises, et le calcule est difficile a mettre en place rien qu'avec des scripts
Batîsseur de L'empire céleste

#6 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 18 février 2008 - 17:53

Effectivement dans ce cas on peut avoir des problèmes.

Quel est l'objet des calculs, peut-être que dans ce cas une autre méthode est meilleure ?

#7 Lethal paradox

Lethal paradox

Posté 18 février 2008 - 18:14

merci

les calculs c'est pour l'empire céleste, c'est pour gérer la gestion d'un empire
Pour les épidémies par exemple
Batîsseur de L'empire céleste

#8 Gilles56

Gilles56

Posté 20 février 2008 - 11:49

Pour l'Exponentielle, la méthode la plus efficace me semblent effectivement être le développement limité :

Le développement en série de l'exponentielle est
exp(x) = Sum {n=0..infini} ( x^n/n!)
(formule vraie pour toux x réel et même complexe)

En pratique, on ne peut évidemment par faire ce calcul en prenant toutes les valeurs de n jusqu'à l'infini. Il faut s'arrêter à un certain rang, c'est celui du développement de Taylor correspondant.

Pour choisir ce rang, il faut décider d'un critère de précision ("assez précis" n'est justement pas une réponse assez précise). Par exemple, on veut la valeur de l'exponentielle à 0.001 près. On prend donc les valeurs successives de n jusqu'à ce que la valeur numérique du terme supplémentaire soit inférieure à ce seuil de 0.001. En pratique, grâce à la factorielle, cela va assez vite. On obtient alors une estimation par défaut de l'exponentielle (puisque le résidu est strictement positif). Il suffit d'ajouter encore un petit quelque chose (le dernier terme fait souvent l'affaire) pour avoir une estimation par excès. On obtient donc finalement un encadrement de la valeur recherchée.

D'un point de vue numérique, cette formule marche évidemment mieux pour les valeurs de x proches de 0. Pour les grandes valeurs de x, il faudra pousser le développement assez loin, ce qui peut entrainer des problèmes. Autre détail important pour le calcul numérique : surtout ne pas chercher à calculer directement le terme x^n/n! . Il est préférable de conserver sa valeur d'une itération à la suivante en utilisant la formule ( x^(n+1)/(n+1)! = (x/(n+1))*(x^n/n!)


A partir de là, le calcul des sinus et cosinus est assez facile puisque ce sont respectivement les parties réelles et imaginaires de l'exponentielle de "i*x" (Formule de Moivre : exp(ix)= cos(x) + i * sin(x) )


Pour les fonctions réciproques, c'est plus compliqué. Il faut résoudre numériquement une équation. Par exemple pour le logarithme de x il faut résoudre exp(y)=x dont la solution est y=log(x). Un algorithme type Newton (descente de gradient) marche bien, mais il est aussi assez facile de programmer une simple dichotomie (comme on manipule ici des fonctions monotones, ça marche même très bien).

Algorithme (cas d'une fonction f croissante, facile à adapter si f décroissante) :
chercher un yinf et un ysup tels que f(yinf)<=x<f(ysup)
calculer y=(yinf+ysup)/2
si f(y)<x alors remplacer yinf par y
sinon remplacer ysup par y
recommencer jusqu'à ce que (ysup-yinf<précision demandée).
valeur finale = y


Inconvénient de cet algorithme : il nécessite d'employer celui qui est déjà utilisé pour le calcul de f (exponentielle par exemple). Comme les scripts du TES ne permettent pas à ma connaissance de définir de nouvelles fonctions, cela nécessite d'imbriquer dans le calcul les deux algorithmes précedemment décrits. C'est lourd !

Enfin, ces algorithmes, bien que numériquement efficaces dans les langages de programmation scientifiques classiques, risquent de se révéler très lents à l'exécution dans le TES. Mais je ne vois pas d'autre solution.


********************

Ceci était une réponse technique à une question technique. Il y a peut-être plus efficace pour l'usage que tu veux en faire. Peux-tu développer ce que tu entends par "la gestion d'un empire" et des "épidémies" par exemple ?

#9 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 20 février 2008 - 13:28

Dans le cadre de ton mod, l'utilisation de la fonction exponentielle pour la simulation d'une épidémie rendrait le niveau de difficulté cauchemardesque assez rapidement.

Pourquoi ne pas utiliser des fonctions random (aléatoires), dont les valeurs possibles seront multipliées par le nombre de personnes déja malades. Exemple, premier jour, si il y a un seul malade, le nombre de malades en plus possible le jour suivant oscillera entre 2 et 4, le deuxième jour, une valeur entre 2 et 4 mais multipliées par le nombre de malades le jour précédent...Mais là encore, la machine risque de s'emballer...

Le plus simple étant d'additionner chaque jour la valeur d'une variable aléatoire, cela permettra d'éviter une croissance trop forte.
Le Steampunk, c'est bon, mangez en  !

#10 Lethal paradox

Lethal paradox

Posté 20 février 2008 - 18:21

Salut

Merci pour vos explications
Pour les épidémies c'est pas le plus compliqué, mais ca risque de l'etre pour la gestion des armée:
-300 contre 200, le nombre de combats va croissant et celui qui est plus nombreux gagne beaucoup plus vite car il se retrouvent 2 pour 1.
c'est ce genre de problèmes qui me pose des difficultées.

Pour le calcul de la fonction exponentielle l'algorithme est vraiment très lourd !!
Le moteur de morrowind va etre surchargé
Batîsseur de L'empire céleste

#11 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 21 février 2008 - 00:31

Citation

Pour le calcul de la fonction exponentielle l'algorithme est vraiment très lourd !!
Le moteur de morrowind va etre surchargé

Tiens je me demandais si une autre méthode n'était pas plus simple. C'est juste une idée :

On sait que (1 + x/n ) ^ n tend vers e^x quand n tend vers +l'infini. Cette formule est de convergence extrêmement lente, donc a priori ce n'est pas intéressant, mais si on utilise un n de la forme 2^p et qu'on effectue le calcul à la façon de l'exponentiation rapide, on obtient une approximation avec seulement p multiplications successives (et une addition initiale)

Pour les grandes valeurs de x cela pourrait être plus intéressant dans certains cas, par exemple 1+ 5 + 5^2/2! + 5^3/3! + 5^4/4! + 5^5/5! + 5^6/6! coûte six additions et dix multiplications, pour une approximation médiocre, alors que ( 1 + 5/ (2^10) ) ^ (2^10) coûte un calcul initial et dix multiplications pour un bien meilleur résultat. Bien sûr à la longue le développement en série de Taylor est meilleur, mais les flottants dans Morro sont limités à sept chiffres significatifs, il ne sert à rien de finir par converger très rapidement si les premières approximations sont mauvaises.

#12 Lethal paradox

Lethal paradox

Posté 21 février 2008 - 10:04

Salut

Merci

Les deux méthodes pourrraient me convenir, mais il faudrait que je jongle avec l'une et l'autre.

Peut on utiliser le signe ! ( factorielle ) dans les opérations , et surtout dans le tescs
Batîsseur de L'empire céleste

#13 Gilles56

Gilles56

Posté 21 février 2008 - 10:52

A Nerval :

Citation

[On sait que (1 + x/n ) ^ n tend vers e^x quand n tend vers +l'infini. Cette formule est de convergence extrêmement lente, donc a priori ce n'est pas intéressant, mais si on utilise un n de la forme 2^p et qu'on effectue le calcul à la façon de l'exponentiation rapide, on obtient une approximation avec seulement p multiplications successives (et une addition initiale)

Pour les grandes valeurs de x cela pourrait être plus intéressant dans certains cas, par exemple 1+ 5 + 5^2/2! + 5^3/3! + 5^4/4! + 5^5/5! + 5^6/6! coûte six additions et dix multiplications, pour une approximation médiocre, alors que ( 1 + 5/ (2^10) ) ^ (2^10) coûte un calcul initial et dix multiplications pour un bien meilleur résultat. Bien sûr à la longue le développement en série de Taylor est meilleur, mais les flottants dans Morro sont limités à sept chiffres significatifs, il ne sert à rien de finir par converger très rapidement si les premières approximations sont mauvaises.

Ton idée n'est pas mauvaise, sauf qu'elle nécessite de disposer du calcul de puissance. Or si j'en crois le "Morrowind Scripting for dummies" seules les 4 opérations élémentaires sont disponibles (donc au passage on ne peut pas non plus calculer directement la factorielle). Par conséquent l'exemple que tu donnes coûterait beaucoup plus cher en termes de nombre d'opérations que ce que tu indiques : 9 opérations pour 2^10 (=1024), 1 opération pour x/2^10, 1 autre pour (1+x/2^10) ... et encore (1024-1) pour passer à la puissance !

************

Autre piste à explorer, mais dans le cas particulier du logarithme : puisqu'il s'agit de la primitive d'une fonction simple (1/x), on peut aussi le calculer facilement comme une intégrale en utilisant la formule de Riemann ou, mieux, celle des trapèzes (pas tellement plus compliquée mais gain de précision important).


************
Ceci dit je ne suis pas certain que tout cela soit nécessaire compte tenu de ce que je crois comprendre des objectifs de Lethal Paradox.

L'idée de Von Zeeple (utiliser des variables aléatoires) est intéressante. A creuser en fonction des caractéristiques du phénomène à simuler.

D'une manière générale, pour simuler une épidémie par exemple, il serait aussi simple de programmer une suite de la forme :
Malades (jour+1) = f( (Malades (jour), autres paramètres).

Ainsi, il est assez facile de programmer une suite (déterministe ou aléatoire) dont le comportement soit de type exponentiel au début (propagation rapide de l'épidémie) mais ralentisse ensuite (saturation de la population) voire même diminue progressivement sur la fin (guérison).


Il y a de multiples façons de faire tout cela, mais pour en définir judicieusement une il faudrait vraiment savoir ce que veut faire Lethal Paradox. J'insiste un peu lourdement car pour moi ce n'est pas clair du tout.

#14 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 21 février 2008 - 11:01

C'est sûr que s'il veut simuler la propagation d'une épidémie ou les pertes d'unités lors d'une guerre (résultats naturellement très aléatoires)... je vois absolument pas pourquoi :

Citation

j'ai besoin de valeur très précises

C'est pas clair pour moi non plus. Lethal, commence donc par nous dire ce que tu veux faire.

Sinon pour la factorielle c'est très simple, ça se calcule itérativement en même temps que le reste (5! = 4! * 5).
You look like you need a monkey!

Attention : perfectionniste paresseux.

#15 Zubustou

Zubustou

    Ha ha HAHAHAHA Gnéhéhéhéhéhé depuis 2006


Posté 21 février 2008 - 11:48

Citation

C'est sûr que s'il veut simuler la propagation d'une épidémie ou les pertes d'unités lors d'une guerre (résultats naturellement très aléatoires)...

Pourquoi ne pas utiliser la bonne vieille formule utilisée dans les wargames depuis des décennies: un nombre aléatoire multiplié par le nombre de belligérants pour le nombre de morts total et un nombre aléatoire pondéré par le rapport de force pour connaitre les pertes dans chaque camp. Comme de toutes façons, il n'y a aucune formule mathématique précise pour prévoir les pertes sur un champ de bataille, ça ne sert à rien de dégainer les exponentielles.
Je ne parle pas des épidémies.

Aubustou tape vite
et surtout dans la gueule
- Marmotte Milka, 28 juin 2012 à 21:27


#16 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 21 février 2008 - 12:07

Citation

Ton idée n'est pas mauvaise, sauf qu'elle nécessite de disposer du calcul de puissance. Or si j'en crois le "Morrowind Scripting for dummies" seules les 4 opérations élémentaires sont disponibles (donc au passage on ne peut pas non plus calculer directement la factorielle). Par conséquent l'exemple que tu donnes coûterait beaucoup plus cher en termes de nombre d'opérations que ce que tu indiques : 9 opérations pour 2^10 (=1024), 1 opération pour x/2^10, 1 autre pour (1+x/2^10) ... et encore (1024-1) pour passer à la puissance !

Dans la formule (1 + (x / 2^p)) ^ (2^p), on peut d'abord fixer p, ce qui permet de considérer (1 + ( x / (2^ p )) comme une simple multiplication suivi d'une addition.
Ensuite, pour calculer simplement l'élévation à la puissance 2^p d'un nombre, on regroupe par blocs de deux en utilisant les résultats précédents :
a ^ ( 2^ p ) = a.... a (2^p blocs) = a²... a² (2^(p-1) blocs) = a^4... a^4 (2^(p-2) blocs), etc.

On calcule donc a.a ce qui donne a², on calcule a².a² à partir du résultat précédent ce qui donne a^4, on calcule ensuite a^4.a^4 etc... jusqu'à obtenir a^(2^p). Ca coûte donc au final p-1 multiplications et pas 2^p - 1.

#17 Gilles56

Gilles56

Posté 21 février 2008 - 15:09

Citation

Dans la formule (1 + (x / 2^p)) ^ (2^p), on peut d'abord fixer p, ce qui permet de considérer (1 + ( x / (2^ p )) comme une simple multiplication suivi d'une addition.
Ensuite, pour calculer simplement l'élévation à la puissance 2^p d'un nombre, on regroupe par blocs de deux en utilisant les résultats précédents :
a ^ ( 2^ p ) = a.... a (2^p blocs) = a²... a² (2^(p-1) blocs) = a^4... a^4 (2^(p-2) blocs), etc.

On calcule donc a.a ce qui donne a², on calcule a².a² à partir du résultat précédent ce qui donne a^4, on calcule ensuite a^4.a^4 etc... jusqu'à obtenir a^(2^p). Ca coûte donc au final p-1 multiplications et pas 2^p - 1.

Effectivement, si p est fixé à l'avance et donc 2^p précalculé, ça marche :
x/2^p -> 1 opération
1+x/2^p->+1 opération
(1+x/2^p)^(2^p)-> p opérations (et non p-1 mais cela ne fait pas une grosse différence)
Total=p+2 opérations

A titre de comparaison, l'algorithme du calcul de l'exponentielle par développement de Taylor à l'ordre p demande :
Initialisation :  1 (p=0),
Puis pour la kième itération :
calcul de x^k/k! par ( (x^(k-1)/(k-1)! ) * x / k (2 mutliplications)
addition de ce terme au résultat déjà acquis : 1 opération :
soit 3 opérations/itération
Total : 1+3*p opérations .

Restent à comparer la précision de ces deux algorithmes pour un nombre total d'opérations donné. Sauf erreur de ma part, l'algorithme de Nerwal est plus performant pour un faible nombre d'itérations autorisées et celui de Taylor quand ce nombre augmente. Plus x est grand, plus la période pendant laquelle l'algorithme de Nerwal reste le plus performant est importante.

#18 Lethal paradox

Lethal paradox

Posté 21 février 2008 - 20:28

Salut


Merci

Les épidémies agissent sur le moral, sur la réputation de l'empire sur les flux commerciaux.... et donc se répercutent de nouveu sur le moral.... si les valeurs sont peu précises, au bout d'un moment on s'éloigne vraiment du résultat véritable.

Et "dégainer les exponentielles" et un moyen d'avoir une grande précision et de se baser sur des résultats " statistiques", qui vont agir sur des dizaines de variables et qui vont subir des opérations complexes.

Sinon je peux aussi faire comme dit Aubustou mais les résultats ne sont pas les résultats statistiques, même si le facteur chance va entrer en compte.
De plus les fonctions vont faciliter le calcul, car utiliser des variables aléatoires va allonger la longeur du script..

CE que je veux vraiment c'est de savoir comment utiliser les fonctions, pas forcément pour ce mod... même si ca me facilite la tache, et que ca me permet de ne pas perdre trop de précision tout le long des calculs.
Batîsseur de L'empire céleste

#19 Zubustou

Zubustou

    Ha ha HAHAHAHA Gnéhéhéhéhéhé depuis 2006


Posté 21 février 2008 - 20:42

Citation

Sinon je peux aussi faire comme dit Aubustou mais les résultats ne sont pas les résultats statistiques, même si le facteur chance va entrer en compte.

Pour les épidémies, je n'y connais rien mais pour les batailles, je peux te dire que c'est tout sauf des statistiques faciles à appréhender. Il faut exprimer des dizaines de paramètres pour une seule bataille(nombre d'hommes, armement, entrainement, terrain, météo, moral, leader,...) et ça reviendra au même d'utiliser des nombres aléatoires avec un minimum de pondération.

Aubustou tape vite
et surtout dans la gueule
- Marmotte Milka, 28 juin 2012 à 21:27


#20 Lethal paradox

Lethal paradox

Posté 21 février 2008 - 20:46

Salut


Merci

OK pour les batailles c'est possible de faire sans,  mais pour les centaines paramètres ce serait plus facile d'utiliser les fonctions
Batîsseur de L'empire céleste

#21 Gilles56

Gilles56

Posté 22 février 2008 - 09:58

On ne va pas ouvrir ici de débat pour savoir si un phénomène comme une épidémie ou une bataille est réellement mû par de l'aléa ou par du chaos déterministe. S'il ne s'agit que d'en simuler raisonnablement les résultats, une représentation aléatoire fonctionne parfaitement, pourvu que l'on choisisse soigneusement la forme de cet aléa. Une simple recherche avec votre moteur préféré vous permettra d'en trouver plein d'exemples.

Les phénomènes de type rétroaction (A agit sur B qui agit en retour sur A) rentrent parfaitement dans ce cadre. Je ne comprends pas le besoin de précision exprimé par Lethal Paradox, et encore moins pourquoi il faudrait absolument passer par des exponentielles. Cele me parait même contradictoire. Il est tout à fait possible de trouver un système dont le comportement reste tout à fait raisonnable (autrement dit, ne parte pas dans le décor ni ne se mette à donner des valeurs aberrantes).

Mais pour cela il est nécessaire de bien expliciter le phénomène que l'on veut représenter ainsi que ses mécanismes de base. C'est ce que Lethal paradox a (enfin !) commencé à faire en expliquant :

Citation

Les épidémies agissent sur le moral, sur la  réputation de l'empire sur les flux commerciaux.... et donc se  répercutent de nouveu sur le moral.... si les valeurs sont peu  précises, au bout d'un moment on s'éloigne vraiment du résultat  véritable.

Je m'interroge sur ce que devrait être le "résultat véritable" mais peu importe pour l'instant.

Ce n'est cependant pas encore suffisant. Le moral, la réputation ou l'intensité des flux commerciaux par exemple sont-ils représentés dans son système par autant de nombres, où sont-ils le résultat d'un calcul. Je m'explique avec un exemple : l'intensité des flux commerciaux. Lethal paradox : dans ton système, s'agit-il d'un nombre sur lequel tu travailles globalement (par exemple : intensité du flux pour l'empire un jour donné : 1 millions de pièces d'or) sans détailler comment est composé ce flux, ou s'agit il d'un résultat (exemple : tu peux avoir  10 marchands dans ton empire qui échangent avec l'extérieur. Si un jour donné chacun d'eux échange pour 100 000 pièces d'or, le total des échange est de 1 million, comme dans le cas précédent).

Dans le premier exemple, on peut se contenter d'un système d'équations qui explique globalement comment le flux commercial intéragit avec les autres paramètres. Dans le second cas, il faudra plutôt que ce système décrive comment l'activité de chaque marchand interagit avec les autres composantes du système. C'est TRES différent.

Si tu veux vraiment que l'on t'aide à formaliser et programmer tout ça, tu dois faire l'effort de décrire correctement ton système.

Enfin, il ne faut pas avoir peur d'utiliser des variables aléatoires. Ce n'est pas plus compliqué qu'une fonction. D'un point de vue mathématique ou informatique, c'est d'ailleurs pratiquement la même chose (et franchement pas compliqué dans les script de Morrowind). Il faut simplement veiller à ne pas choisir n'importe quoi.

#22 Lethal paradox

Lethal paradox

Posté 22 février 2008 - 11:45

Salut

Merci pour vos explications
S'il vous plait pas de sarcasmes!!! je suis désolé pour le manque d'explications précises

Pour les flux, il faut détailler leur composition:
flux global: 1M de po
commerce extérieur ( ville1 ): ....po
tributs ( ville1 ):  ... po
commerce ( ville 2): ...po  (marchand1 : ...po / marchand2: ..po )
Chaque marchand va interagir sur le système global et chaque petite chose va en final agir sur les flux
des dizaines de données vont influer sur ces variables, c'est pour ca qu'il me faut d'ailleur une grande précision. De plus pour décrire les systèmes économiques c'est très colmpliqué car il faut introduire des attracteurs...et la ca se complique :dwarf:
Au lancement d'une nouvelle industrie: exploitation de fer ( exemple ), l'offre est faible, la demande est importante -> la demande va baisser ( manque d'offre) et la production augmenter pour répondre a la demande, et ainsi on va tendre vers un système d'équilibre: attracteur.
L'ensemble des attracteurs vont influer différement sur les flux, selon leur "distance" avec une situation stable...et la ca fait beaucoup d'opérations, c'est pour ca que je me demende si des équations ne faciliterais pas le script..... ;)

Les fonctions trigonométriques vont me servir pour des calculs de trajectoire (tir de canon ... ), avec les angles de tir ....

Le but de ce sujet etait de savoir si l'on pouvait utiliser les fonctions pour faciliter les calculs:
ex: exp (x), mais quelque chose de très compliqué ca va alllonger les calculs... :D
Batîsseur de L'empire céleste

#23 Gilles56

Gilles56

Posté 22 février 2008 - 15:54

Merci de tes réponses, cela commence à s'éclaircir vraiment.

*******

D'abord une petite remarque théorique : tu veux construire un système contenant un mécanisme d'autorégulation (équilibre offre et demande par exemple). On peut montrer que dans un tel système il existe (au moins) un point d'équilibre. Si on est en ce point et qu'on fait tourner le système, rien ne bouge. Cela ne suffit pas à cependant pour connaître les propriétés du système. Il faut savoir ce qui se passe autour de ce point d'équilibre. Il y a trois grands types de comportement possibles :
-quand on s'écarte du point d'équilibre, le système à tendance à nous y ramener ;
-quand on s'en écarte, on a tendance à osciller autour mais sans vraiment s'en rapprocher ni s'en éloigner ;
-quand on s'en écarte, on a tendance à s'en éloigner indéfiniment.

Il est possible de construire des systèmes tels que, pour un même point d'équilibre, ces trois comportements soient observables. Le type de comportement peut dépendre de la distance à laquelle on se trouve de l'équilibre (on parlera de rayon de convergence ou de rayon d'attraction). On peut même avoir des systèmes dans lequels on commence à se rapprocher du point d'équilibre pour finir par s'en éloigner ou le contraire.

Il est aussi possible que pour un type d'équation donné, le comportement théorique change avec la valeur des paramètres associés alors que la forme générale ne change pas.

Enfin il peut y avoir des systèmes comprenant plusieurs points d'équilibres, chacun avec son propre comportement. Il y aura donc plusieurs bassins d'attraction.

Ce qui précède peut s'appliquer aussi bien à des systèmes déterministes qu'aléatoires. Il y aurait formellement quelques détails à ajuster mais les idées générales restent les mêmes.


Tout ça pour te dire que trouver un système dont les propriétés correspondent vraiment à ce que tu cherches peut être assez technique. Or j'imagine que ce qui t'intéresse avant tout est de trouver un système qui fonctionne, pas de noircir des pages de démonstrations mathématiques.

De plus, tu es fortement contraint par les limites techniques du TECS (pas de fonctions mathématiques élaborées, lenteur d'exécution). Tu dois donc trouver un système simple.

Ces deux raisons m'amènent à penser que, une fois un système d'équations choisi, tu aurais tout intérêt à le tester d'abord dans un autre programme. L'idéal serait un langage de programmation si tu en maitrises un, sinon tu peux aussi faire pas mal de choses avec un tableur. Cela te permettrait de faire des simulations de ton système, de sortir des courbes, de tester son comportement avec différents jeux de paramètres, bref de vraiment tester ce qu'il peut donner afin de vérifier qu'il se comporte bien comme tu le souhaites.

De plus, faire ce travail te facilitera la programmation ultérieure dans un script: tu auras déjà réfléchi à l'algorithme.

**************
Passons maintenant à l'exemple que tu proposes : lancement d'une nouvelle industrie avec un système d'offre et de demande. Histoire de généraliser, je pars d'emblée sur un système comprenant  plusieurs industriels (offre1, offre2, ...) et plusieurs clients (demande1, demande2, ...). Rien ne t'interdit après de faire des bilans par ville ou par province en fonction de la localisation de ces différents agents.


On peut imaginer plein de systèmes différents, par exemple avec une régulation par les prix.

Pour l'industriel, plus ce prix est elevé, plus il est incité à produire. Pour le client, c'est le contraire. Plus le prix est élevé, moins il est disposé à acheter. Le prix d'équilibre correspond au prix pour lesquels la quantité que proposent les uns correspond à la quantité que les autres sont prêts à acheter.
La façon la plus simple de représenter cela est de prendre des fonctions linéaires :
offre (prix) = a + b*prix et demande (prix) = c - d* prix.
Rien ne t'interdit de prendre des valeurs différentes pour a et b selon les industriels, et des valeurs différentes de c et de selon les acheteurs.
De la sorte, les fonctions d'offre et de demandes globales restent des droites. Le prix d'équilibre est facile à calculer, il reste à l'utiliser pour calculer ce que chacun est prêt à produire ou acheter.

Dans ce système, l'équilibre est instantané. Il n'y a pas véritablement de régulation progressive. Cela deviendrait le cas si par exemple il y avait un certain délai entre le signal perçu (le prix) et la réaction (l'offre/ la demande). Par exemple : l'industriel décide de ce qu'il produit le jour j+1 en fonction du prix du jour j (il faut un jour entier pour la production). Si de son côté le client a des besoins quotidiens à assurer (il lui faut tous les jours sa ration de pain par exemple), tu peux aussi y adjoindre une régulation de ce qu'il est prêt à offrir pour avoir sa ration. Par exemple, si la veille il n'a rien eu du tout, il est prêt à offrir le double de ce qu'il donnerait normalement pour la quantité équivalente. Ou au contraire, s'il a reçu 50% en plus de ce qui lui est nécessaire la veille, il n'est prêt à payer que 50% de ce qu'il donnerait normalement pour une quantité équivalente.

L'intérêt d'un tel système, c'est qu'il reste linéaire. Tu as donc des solutions explicites aux équations correspondantes, qui de plus se calculent avec les 4 opérations (+,-,*,/). Donc ce n'est pas trop difficile avec le TECS.


Ce n'est qu'une proposition bien sûr, mais elle me semble correspondre globalement à ce que tu recherches. Tu peux en imaginer des tas de variantes qui colleront peut-être mieux à tes désirs.

Tu peux aussi le raffiner en mettant des aléas de production. Par exemple, l'industriel décide de produire une quantité q, mais en raison des aléas de production, il produit finalement q + X, où X est une variable aléatoire (d'espérance nulle). Par exemple X=q*(Random100-50)/500 : on peut produire entre q-10% et q+10%.

Tu évoques une exploitation de fer, normalement la part d'aléa est assez réduite. Ce que je viens d'écrire s'appliquerait plutôt à une production agricole : les aléas climatiques font qu'il y a des années à bonnes récoltes et d'autres à mauvaises récoltes. Mais peut-être ton idée d'épidémie peut-elle jouer un rôle ici ?

En tout cas, j'espère que ça te donnera des idées.
*************

Citation

Les fonctions trigonométriques vont me servir pour des calculs de trajectoire (tir de canon ... ), avec les angles de tir ....

Le but de ce sujet etait de savoir si l'on pouvait utiliser les fonctions pour faciliter les calculs:
ex: exp (x), mais quelque chose de très compliqué ca va alllonger les calculs... ;)


Ouh là, ça me parait plus compliqué ça ! A brûle-pourpoint comme ça je ne vois pas comment contourner les calculs de sinus et cosinus. Avant d'aller plus loin, veux-tu représenter la trajectoire d'un boulet de canon (le joueur doit voir le boulet se déplacer) ou simplement le résultat (le point d'impact) ?
Dans le premier cas : cela me paraît très difficile. Ce serait simple dans Oblivion qui dispose déjà d'un moteur physique, mais dans Morrowind : glup ! :D
Dans le second cas, on peut essayer. Mais il faudrait là encore que tu précises tes besoins. Sans garantie.

#24 Lethal paradox

Lethal paradox

Posté 22 février 2008 - 20:05

Merci pour ta réponse qui m'a apporté pas mal d'informations..
maintenant je vois comment je vais faire et je trouve de bonnes solutions...
Ensuite je ne sais pas programmer mais je suis en train d'apprendre le C.

Pour ce qui est du tir ( canon ) le joueur vera le boulet, c'est pour ca que c'est compliqué, de plus la vitesse du personnage va influer sur la trajectoire....
Batîsseur de L'empire céleste

#25 sucresalesucre

sucresalesucre

    En fait y'a des accents cachés


Posté 17 avril 2008 - 12:44

Je vais botter directement en hors sujet, mais plutôt que d'essayer d'adapter le TES à une vision mathématique d'un système qui va régir l'économie dans ton mod, pourquoi ne pas utiliser de manière simple et usuelle les mécanismes du TES ?

A savoir :
- utiliser une variable globale comme index de chaque domaine : prix de telle matière, prix de telle autre, nombre de belligérants de l'armée, nombre d'infectés, etc...  
- Faire varier ces index suivant la réussite des quêtes des guildes correspondantes. Donc mettre les quêtes au centre du système, comme c'est le cas dans Morrowind.
- L'index de chaque varible globale sert dans le script de chaque "acteur" de l'économie à faire varier son état : pour les matières premières-> plus ou moins de marchandage du NPC par exemple, pour les armées, certaines catégories d'hommes sont enable ou disable suivant l'état de la variable, idem pour les infectés à qui on ajoute ou retire la maladie...

C'est moins précis forcément, mais beaucoup moins lourd à implémenter, plus simple, moins risqué pour les bugs. Et ça évite que le système s'emballe (et retour bureau), car le TES est chatouilleux coté scripts, et parfois même quand ça semble marcher sans problème quand on teste, lol !

Le chat CROIT appartenir à une race supérieure évoluée. Mais ce n'est qu'un rebut pervers avec des yeux belzebuth et des griffes.


------

Moddeur de Blye Citadelle du Chaos pour Morrowind et Vault panic pour Fallout3





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)