Difference between revisions of "Talk:King Bot"
m |
|||
Line 9: | Line 9: | ||
how about a breakdown of the code or some hints using the [[Talk:King_Bot|discussion]] tab above?<br> | how about a breakdown of the code or some hints using the [[Talk:King_Bot|discussion]] tab above?<br> | ||
a clue, a hint ... anything! tnx {{User:Griz/sig}} 16:37, 25 Feb 2006 (MST) | a clue, a hint ... anything! tnx {{User:Griz/sig}} 16:37, 25 Feb 2006 (MST) | ||
+ | |||
+ | When I found this code several months ago (probably closer to 10 or 11) I wanted to modify it so that the king bot was the bot with the most "invested energy", by which I meant the total energy reserves, body reserves, shell, slime, etc. of it and all its descendants. That is where the InvestedEnergy(t) function came in. | ||
+ | |||
+ | However, for a reason I could never figure out the code didn't work. No bot was ever found to be the king for some reason (no bot was ever highlighted), so I changed InvestedEnergy(t) to return always 1 (and thus go back to the previous behavior of most offspring being King (each offspring is given a score of 1)). | ||
+ | |||
+ | To be honest the function is a mess, one of the few areas of the code (this and ties pretty much) that I have hardly touched to clean up. You can see the chaotic way in which Carlo (I assume it was him) coded much of the code. | ||
+ | |||
+ | The score function itself is recursive (it calls itself), which isn't a bad way to search through a tree (in this case, a phylogenic tree) mind you. However he threw 4 different ideas into a single recursive function. It searches for offspring, highlights offspring, draws family lines, and searches for the oldest ancestor. Granted they're somewhat closely related functions, but recursive functions are a headache enough in and of themselves without 4 different ideas thrown in there. | ||
+ | |||
+ | --[[User:65.123.110.120|65.123.110.120]] 17:58, 25 Feb 2006 (MST) | ||
<pre> | <pre> |
Revision as of 19:58, 25 February 2006
would someone please explain how it does so?
exactly where in this code is the number of offspring entered?
what does s(t,1,2,0) mean?
how might one use other factors, weighted or whatever, to contribute
to the score?
what is InvestedEnergy(t)?
how about a breakdown of the code or some hints using the discussion tab above?
a clue, a hint ... anything! tnx Griztalk 16:37, 25 Feb 2006 (MST)
When I found this code several months ago (probably closer to 10 or 11) I wanted to modify it so that the king bot was the bot with the most "invested energy", by which I meant the total energy reserves, body reserves, shell, slime, etc. of it and all its descendants. That is where the InvestedEnergy(t) function came in.
However, for a reason I could never figure out the code didn't work. No bot was ever found to be the king for some reason (no bot was ever highlighted), so I changed InvestedEnergy(t) to return always 1 (and thus go back to the previous behavior of most offspring being King (each offspring is given a score of 1)).
To be honest the function is a mess, one of the few areas of the code (this and ties pretty much) that I have hardly touched to clean up. You can see the chaotic way in which Carlo (I assume it was him) coded much of the code.
The score function itself is recursive (it calls itself), which isn't a bad way to search through a tree (in this case, a phylogenic tree) mind you. However he threw 4 different ideas into a single recursive function. It searches for offspring, highlights offspring, draws family lines, and searches for the oldest ancestor. Granted they're somewhat closely related functions, but recursive functions are a headache enough in and of themselves without 4 different ideas thrown in there.
--65.123.110.120 17:58, 25 Feb 2006 (MST)
' returns the fittest robot (selected through the score function) ' altered from the bot with the most generations ' to the bot with the most invested energy in itself and children Function fittest() As Integer Dim t As Integer Dim s As Double Dim Mx As Double Mx = 0 For t = 1 To MaxRobs If rob(t).Exist And Not rob(t).Veg Then s = score(t, 1, 2, 0) If s >= Mx Then Mx = s fittest = t End If End If Next t End Function
' does various things: with ' tipo=0 returns the number of descendants for maxrec generations ' tipo=1 highlights the descendants ' tipo=2 searches up the tree for eldest ancestor, then down again ' tipo=3 draws the lines showing kinship relations Function score(ByVal r As Integer, ByVal reclev As Integer, maxrec As Integer, tipo As Integer) As Double Dim al As Integer Dim dx As Single Dim dy As Single Dim cr As Long Dim ct As Long Dim t As Integer If tipo = 2 Then plines (r) score = 0 For t = 1 To MaxRobs If rob(t).Exist Then If rob(t).parent = rob(r).AbsNum Then If reclev < maxrec Then score = score + score(t, reclev + 1, maxrec, tipo) score = score + InvestedEnergy(t) If tipo = 1 Then rob(t).highlight = True If tipo = 3 Then dx = (rob(r).pos.x - rob(t).pos.x) / 2 dy = (rob(r).pos.y - rob(t).pos.y) / 2 cr = RGB(128, 128, 128) ct = vbWhite If rob(r).AbsNum > rob(t).AbsNum Then cr = vbWhite ct = RGB(128, 128, 128) End If Line (rob(t).pos.x, rob(t).pos.y)-Step(dx, dy), ct Line -(rob(r).pos.x, rob(r).pos.y), cr End If End If End If Next t If tipo = 1 Then Form1.Cls DrawAllRobs End If End Function