Hi;
I have a function rosenbrock: List -> Real and a structure particle.
I seem to force the result of rosenbrock into value when I call
generate-particle.
What is going on here?
I have no clue how to deal with this issue.
Thank you much,
Paul
(defstruct particle
position ;position
velocity ;velocity
rosennumber;the rosenbrock number
localbest ;local best so far
localfitbest) ;local best rosennumber
;generates a random particle
(defun generateparticle ()
(setq value (make-particle))
(setf (particle-position value) (randlist 30 -30 30))
(setf (particle-velocity value) (randlist 30 -30 30))
(setf (particle-rosennumber value)
(rosenbrock (particle-position value)))
(setf (particle-localbest value) (particle-position value))
(setf (particle-localfitbest value) (particle-rosennumber value))
value)
In article <············@kestrel.csrv.uidaho.edu>,
Paul <········@uidaho.edu> wrote:
> Hi;
>
> I have a function rosenbrock: List -> Real and a structure particle.
>
> I seem to force the result of rosenbrock into value when I call
> generate-particle.
Why are you using the global variable named "value" in generateparticle,
instead of a local variable?
Is it possible that rosenbrock also similarly misuses the global
variable?
>
> What is going on here?
>
> I have no clue how to deal with this issue.
>
> Thank you much,
> Paul
>
> (defstruct particle
> position ;position
> velocity ;velocity
> rosennumber;the rosenbrock number
> localbest ;local best so far
> localfitbest) ;local best rosennumber
>
>
>
> ;generates a random particle
> (defun generateparticle ()
> (setq value (make-particle))
> (setf (particle-position value) (randlist 30 -30 30))
> (setf (particle-velocity value) (randlist 30 -30 30))
>
> (setf (particle-rosennumber value)
> (rosenbrock (particle-position value)))
>
> (setf (particle-localbest value) (particle-position value))
>
> (setf (particle-localfitbest value) (particle-rosennumber value))
> value)
--
Barry Margolin, ······@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
Paul wrote:
> Hi;
>
> I have a function rosenbrock: List -> Real and a structure particle.
>
> I seem to force the result of rosenbrock into value when I call
> generate-particle.
>
> What is going on here?
>
> I have no clue how to deal with this issue.
>
> Thank you much,
> Paul
>
> (defstruct particle
> position ;position
> velocity ;velocity
> rosennumber;the rosenbrock number
> localbest ;local best so far
> localfitbest) ;local best rosennumber
>
>
>
> ;generates a random particle
> (defun generateparticle ()
> (setq value (make-particle))
> (setf (particle-position value) (randlist 30 -30 30))
> (setf (particle-velocity value) (randlist 30 -30 30))
>
> (setf (particle-rosennumber value)
> (rosenbrock (particle-position value)))
>
> (setf (particle-localbest value) (particle-position value))
>
> (setf (particle-localfitbest value) (particle-rosennumber value))
> value)
(defun generate-particle ()
(let ((new-particle
(make-particle :position (randlist 30 -30 30)
:velocity (randlist 30 -30 30))))
(setf (particle-rosennumber new-particle)
(rosenbrock (particle-position new-particle)))
(setf (particle-localbest new-particle)
(particle-position new-particle)
(setf (particle-localfitbest new-particle)
(particle-rosennumber new-particle))
new-particle))
That should do it. I'd bet your use of the global "value" messed things up.
Cheers
--
Marco
Yea, rosenbrock was messing with the passed in value.
:-(
Thanks.
-paul
Paul wrote:
> Hi;
>
> I have a function rosenbrock: List -> Real and a structure particle.
>
> I seem to force the result of rosenbrock into value when I call
> generate-particle.
>
> What is going on here?
>
> I have no clue how to deal with this issue.
>
> Thank you much,
> Paul
>
> (defstruct particle
> position ;position
> velocity ;velocity
> rosennumber;the rosenbrock number
> localbest ;local best so far
> localfitbest) ;local best rosennumber
>
>
>
> ;generates a random particle
> (defun generateparticle ()
> (setq value (make-particle))
> (setf (particle-position value) (randlist 30 -30 30))
> (setf (particle-velocity value) (randlist 30 -30 30))
>
> (setf (particle-rosennumber value)
> (rosenbrock (particle-position value)))
>
> (setf (particle-localbest value) (particle-position value))
>
> (setf (particle-localfitbest value) (particle-rosennumber value))
> value)
Paul <········@uidaho.edu> writes:
> Hi;
>
> I have a function rosenbrock: List -> Real and a structure particle.
>
> I seem to force the result of rosenbrock into value when I call
> generate-particle.
>
> What is going on here?
>
> I have no clue how to deal with this issue.
>
> Thank you much,
> Paul
>
> (defstruct particle
> position ;position
> velocity ;velocity
> rosennumber;the rosenbrock number
> localbest ;local best so far
> localfitbest) ;local best rosennumber
>
>
>
> ;generates a random particle
> (defun generateparticle ()
> (setq value (make-particle))
> (setf (particle-position value) (randlist 30 -30 30))
> (setf (particle-velocity value) (randlist 30 -30 30))
>
> (setf (particle-rosennumber value)
> (rosenbrock (particle-position value)))
>
> (setf (particle-localbest value) (particle-position value))
>
> (setf (particle-localfitbest value) (particle-rosennumber value))
> value)
First of all, if you do not already have a global variable called
`value' you get undefined behaviour already in the first line of the
function. You need to introduce a new variable with LET before you can
mutate it. Perhaps something like this:
(defun generate-particle ()
(let* ((value (make-particle))
(position (randlist 30 -30 30))
(rosen-number (rosenbrock (position))))
(setf (particle-position value) ...)
...
value))
But secondly, why not use keyword arguments to make-particle instead?
(defun generate-particle ()
(let* ((position (randlist 30 -30 30))
(rosen-number (rosenbrock (position))))
(make-particle :position position
:velocity ...
:rosennumber rosen-number
...)))
Bj�rn
Paul <········@uidaho.edu> writes:
> Hi;
>
> I have a function rosenbrock: List -> Real and a structure particle.
>
> I seem to force the result of rosenbrock into value when I call
> generate-particle.
>
> What is going on here?
[...]
Just talking about style. You'll avoid mistake by correctly indenting
your code. For example:
(defstruct particle
position
velocity
rosen-number
local-best
local-fit-best)
(defun generate-particle ()
(let* ((pos (randlist 30 -30 30))
(vel (randlist 30 -30 30))
(rosen-number (rosenbrok position)))
(make-particle :position position
:velocity velocity
:rosen-number rosen-number
:local-best position
:local-fit-best rosen-number)))
Since the LOCAL-BEST and LOCAL-FIT-BEST can be initialized from some
given values, think about writing a constructor that would take a
position and a velocity as arguments--note that you can specify your
own constructor with structures or with classes, look at the spec.
Regards.
--
Frederic Brunel