[racket] Newbie question on abstraction and the built in random function

From: Rian Shams (rian.shams at gmail.com)
Date: Fri Dec 20 10:27:45 EST 2013

Matthew and Richard, Thanks a lot!

Defining the encoding schemes as functions solves my problem.

Richard, thank you for showing me a solution in the context of the function
I have already built and
Matthew, thank you for showing me solutions using map and for/list. I have
learned a lot from your answers.

Best,
Rian



On Fri, Dec 20, 2013 at 1:52 AM, Richard Cleis <rcleis at me.com> wrote:

> You might want your encoding-scheme to be a function,
> and you want to evaluate that function inside generate-chromosome:
>
> (define (generate-chromosome encoding-scheme number-of-genes)
>   (cond  [(zero? number-of-genes) empty]
>             [else (cons (encoding-scheme)
>                              (generate-chromosome encoding-scheme (sub1
> number-of-genes)))]))
>
> (define (binary-encoding-scheme)
>   (random 2))
> (define (value-encoding-scheme)
>   (random))
>
> (generate-chromosome binary-encoding-scheme 10)
> (generate-chromosome value-encoding-scheme 10)
>
> (0 1 1 1 1 1 0 1 1 0)
> (0.17586764776624525
>  0.13437314563189037
>  0.585523111696543
>  0.6533766686688987
>  0.09071850144989983
>  0.8804515074319006
>  0.6998388642832832
>  0.599233672637633
>  0.5238661544779689
>  0.72734166222789)
> >
>
>
> rac
>
>
>
> On Dec 19, 2013, at 7:42 PM, Rian Shams wrote:
>
> Hello All,
>
> I am new to Racket and just started building an evolutionary computing
> module to supplement my research and learn more about Racket.
>
> When it comes to representing a chromosome, there are many encoding
> schemes one can choose from. To start I would like to build a function that
> lets the user choose the encoding scheme they would like by being able to
> directly insert it into the function call. So far I have created this:
>
> (define (generate-chromosome encoding-scheme number-of-genes)
>   (cond  [(zero? number-of-genes) empty]
>             [else (cons encoding-scheme
>                              (generate-chromosome encoding-scheme (sub1
> number-of-genes)))]))
>
> Two popular encoding schemes are the binary encoding scheme and the real
> value encoding scheme:
>
> (define binary-encoding-scheme
>   (random 2))
> (define value-encoding-scheme
>   (random))
>
> So then calling this function using the binary encoding scheme:
>
> (generate-chromosome binary-encoding-scheme 10)
>
> gives either a list of only ten 1's or a list of only ten 0's. Random only
> works once and whatever the first random value is stays and doesn't change.
>
> *How would I make random re-evaluate each time given that I want it to be
> included in the definition of an encoding scheme?*
>
> As an alternate, the function below works when I directly include (random
> 2) in for a value in the encoding scheme, but I prefer the structure of the
> above function.
>
> (define (generate-chromosome-2 number-of-genes)
>   (cond [(zero? number-of-genes) empty]
>            [else (cons (random 2)         ;binary-encoding-scheme
>                             (generate-chromosome-2 (sub1
> number-of-genes)))]))
>
> So the function call
> (generate-chromosome-2 10) gives the desired result, but doesn't fit the
> needed structure.
>
> Any help would be much appreciated.
>
> Best Regards,
> --
> Rian Shams
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users
>
>
>


-- 
Rian Shams
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20131220/7bca958c/attachment.html>

Posted on the users mailing list.