Lightness> le raycasting et le A* sont deux algos de pathfinding.
le terme pathfinding est compose de deux mots anglais:
path-> chemin
finding-> decouverte
le pathfinding est en quelque sorte le domaine, ou le but est de trouver le chemin(le plus rapide, le plus court...) menant d´un point A vers un point B
et a partir de la, il existe plusieurs techniques pour arriver a ses fins telles que le raycasting.
raycasting:
ray: rayon
casting: jet
je ne vais pas te faire le cour, vus qu´il en existe deja un a l´adresse cite precedement(et si tu y avais regarde un peu(ne serait-ce que le paragraphe de nain troduction), j´aurais pas eu besoin de te preciser tout cela ;).
mais comme son nom le nain dique, le principe est de lancer un rayon et de voir si il se cogne quelque part(et si oui, d´agir de facon appropriee).
son nom est donc completement justifie.
apres evidement, un mot peut etre utilise dans plusieurs domaines, mais la, etant donne que l´on parlait d´IA et non de 3D, je ne pensais pas que sa definition aurait eu besoin d´etre enoncee.
Ninja-Trouille> si c´est a moi que tu parles, je gueulais pas! au contraire je me marrais! trop fort ce coup la! et puis tu te debrouilles bien comme modero, continues comme ca!
merci je suis suffisament culturé en anglais pour savoir ca. seulement je n´avais jamais entendu parler de raycast pour l´IA mais plutot dans les algorithme d´eclairage par la methode des raytrace/raycast.
et le pathfinding je n´avais pas besoin de définition vu ke c moi ki l´ai posté.
bon ben sinon pour le gars ki a posé la question je vais faire un exemple simple d´IA en langage basic:
(attention je ne le test pas donc ca peu ne pas marcher mais c pour ton donner une idee)
dans la boucle principale tu pourrai faire un appel a une fonction (ou une methode) qui contiendrait qq chose comme ca:
(joueur1 serait l´ordi et joueur2 l´humain)
If Joueur(1).Unites.nombre < Joueur(2).Unites.nombre then
for i = 0 to Joueur(2).Unites.nombre - Joueur(1).Unites.nombre + 1
if Joueur(1).ressources.nourriture < 50 then
call TrouveNouriture (Joueur(1).Unites.villageois(VillageoisLibre\%(JOUEUR1))
end if
forum.creeunite
next
end if
public sub TrouveNourriture (integer Villageois)
... un algo ki prend le villageois et ki lui fait prendre de la nourriture
end sub
public function VillageoisLibre (integer player) as integer
for i = 0 to joueur(player).Unites.nombre
if joueur.Unites.data(i).libre = true then
VillageoisLibre = i
exit function
end if
end function
voila un pti bout de l´IA peut ressembler a ca ici les joueurs sont un tableau de classe contenant toutes les infos sur eux ce qui peut etre pratique.
bon si ta rien compris mieu vo ne pas t´attaquer dans une IA parce ke ca c la base de la base.
ah ben si t´es culturé alors... ^_^
pfouahahaha en effet il faudrait ke je me culture en francais avant de parler lol.
bon en tout cas au niveau de l´anglais ce n´est pas un probleme pour moi c´est ce ke je voulait dire bien sur
)))).
hem c rhare kan je fès des photes deux se nivo mais la jheu devè aitre phatiger
))
Lightness1024, c´est pas de l´ia ce que tu nous a fait là, c´est juste de la prog toute bête ;p
Si vous voulez apprendre à programmer, http://rndghost.com/forum/
Sinon concernant l´ia : réseaux de neurones, algorithme génétiques, etc. Ca c´est de l´ia ;p
de la prog toute bete ?
ca existe pas la prog ki sert a rien.
evidemment ke c de la prog mais c de la prog dans le but de faire une IA !
toi tu ne donnes rien de concret avec tes histoires de neurones moi au moins je sert a qqch !
en plus c ridicule on parle d´IA de jeu pas de recherches scientifiques.
tu crois ke c koi l´IA un cerveau branché a un PC sur port fire wire ?
et ben non c´est de la prog eh oui..
Bah les réseaux neuroniques, les algo génétiques tout ça, c´est très concret hein. C´est juste à un (gros gros) niveau au dessus que ce que l´on est capable de faire nous, c´est tout ![]()
Vous voulez du concret ? lol
Alors voici le code de ma dll de réseau de neurones (en vb, pour que ça soit + facile ;p)
clsRN.cls:
Private Couches() As clsCouche
Public Property Get nCouches() As Variant
nCouches = UBound(Couches) + 1
End Property
Public Property Let nCouches(ByVal vNewValue As Variant)
ReDim Couches(vNewValue - 1)
Dim i As Integer
For i = 0 To UBound(Couches)
Set Couches(i) = New clsCouche
Next i
End Property
Public Property Get Couche(i As Integer) As clsCouche
Set Couche = Couches(i)
End Property
Public Sub Init()
Dim i As Integer, j As Integer
Couches(0).Init
For i = 1 To UBound(Couches)
For j = 0 To Couches(i).nNeurons - 1
Couche(i).Perceptron(j).nW = Couche(i - 1).nNeurons
Next j
Couches(i).Init
Next i
End Sub
Public Function Out(x() As Double) As Double()
Dim i As Integer, tX() As Double
tX = x
For i = 0 To UBound(Couches)
tX = Couches(i).Out(tX)
Next i
Out = tX
End Function
Public Sub Learn(x() As Double, c() As Double)
Dim o() As Double, tX() As Double
Dim i As Integer, j As Integer, k As Integer
´=== calcul des di pour la couche de sortie
o = Out(x)
For i = 0 To Couches(UBound(Couches)).nNeurons - 1
Couches(UBound(Couches)).Perceptron(i).d = (c(i) - o(i)) * o(i) * (1 - o(i))
Next i
tX = x
´=== calcul des di des couches q-1 à 0
On Error Resume Next
For i = UBound(Couches) - 1 To 0 Step -1
For j = 0 To Couches(i).nNeurons - 1
Couches(i).Perceptron(j).d = 0
For k = 0 To Couches(i + 1).nNeurons - 1
Couches(i).Perceptron(j).d = Couches(i).Perceptron(j).d + Couche(i + 1).Perceptron(k).d * Couche(i + 1).Perceptron(k).W(j)
Next k
Couches(i).Perceptron(j).d = Couche(i).Perceptron(j).d * Couche(i).CurrentOut(j) * (1 - Couche(i).CurrentOut(j))
Next j
Next i
´=== mise à jour des poids
For j = 0 To Couches(0).nNeurons - 1
For k = 0 To Couches(0).Perceptron(j).nW - 1
Couches(0).Perceptron(j).W(k) = Couches(0).Perceptron(j).W(k) + Couches(0).Perceptron(j).d * x(k)
Next k
Next j
For i = 1 To UBound(Couches)
For j = 0 To Couches(i).nNeurons - 1
For k = 0 To Couches(i).Perceptron(j).nW - 1
Couches(i).Perceptron(j).W(k) = Couches(i).Perceptron(j).W(k) + Couche(i).Perceptron(j).d * Couches(i - 1).CurrentOut(k)
Next k
Next j
Next i
End Sub
===============================================
cl
sPerceptron.cls:
Private Weight() As Double
Public d As Double
Public Sigmoid As Boolean
Public Property Get nW() As Variant
nW = UBound(Weight) + 1
End Property
Public Property Let nW(ByVal vNewValue As Variant)
ReDim Weight(vNewValue - 1)
End Property
Public Property Get W(i As Integer) As Variant
W = Weight(i)
End Property
Public Property Let W(i As Integer, ByVal vNewValue As Variant)
Weight(i) = vNewValue
End Property
Public Function o(x() As Double) As Double
Dim i As Integer
Dim Out As Double
Out = 0
For i = 0 To UBound(Weight)
Out = Out + x(i) * W(i)
Next i
o = 1 / (1 + Exp(-Out))
End Function
=============================================
clsCouche:
Private Neurons() As clsPerceptron
Private COut() As Double
Public Property Get CurrentOut(i As Integer) As Double
CurrentOut = COut(i)
End Property
Public Property Get nNeurons() As Integer
nNeurons = UBound(Neurons) + 1
End Property
Public Property Let nNeurons(ByVal vNewValue As Integer)
ReDim Neurons(vNewValue - 1)
Dim i As Integer
For i = 0 To UBound(Neurons)
Set Neurons(i) = New clsPerceptron
Next i
End Property
Public Property Get Perceptron(i As Integer) As clsPerceptron
Set Perceptron = Neurons(i)
End Property
Public Sub Init()
Randomize
Dim i As Integer, j As Integer
For i = 0 To UBound(Neurons)
For j = 0 To Neurons(i).nW - 1
Neurons(i).W(j) = Rnd - 0.5
Next j
Next i
End Sub
Public Function Out(x() As Double) As Double()
Dim i As Integer
Dim o() As Double
ReDim o(UBound(Neurons))
For i = 0 To UBound(Neurons)
o(i) = Neurons(i).o(x)
Next i
COut = o
Out = o
End Function
==============================================
Pour info, on trouve ce code sur rndghost.com
Quant à ce que je voulais dire par prog toute bête, une instruction if...then...else, c´est vraiment le b.a.ba de la programmation. Rien à voir avec l´ia.
On dit d´un algo que c´est une intelligence artificielle s´il est entre autres capable de s´adapter aux situations totalement différentes. Un simple if n´a jamais eu cette propriété.
hmmm je commence a voir ce que tu voulais dire..
desoler de vous interompre mais... relisez le titre et le premier message du sujet! =)
je croit qu´on s´éloigne un peu du sujet la! lol
pas tant que ca.
il a parlé d´IA tout court mais d´IA evolutive moi g parlé d´IA specifique a un age of empires like c bien le sujet du post non ?
ué mé en DARK BASIC! =)
c pas du DARK c du VB.
Oui, je parlais d´ia évolutive, et tu parlais des scripts de jeu qu´on appelle aussi ia. :p
oki lol, méga quiproquo :ppp
Par contre, rien n´empêche de faire un mix des deux : une ia évolutive scriptée spécialement pour les jeux.