使用lisp生成随机数列表

时间:2016-01-12 00:08:30

标签: lisp common-lisp sbcl

我正在尝试使用Lisp进行遗传算法, 我想生成一个包含五个随机数的列表列表。

我可以生成该列表,但所有子列表都由相同的随机数组成,这是因为我不确定我是否正确管理“随机状态”。

任何人都可以给我一个提示吗?

这是代码:

=IFERROR(INDEX(Data!L$2:P$2, 1, AGGREGATE(15, 6, COLUMN($A:$E)/(Data!$L$3:$P$10=G2), 1)), "OTHER")

该程序的输出是:

(setf *random-state* (make-random-state t))    
(defun random_in 
      (min max) 

      (+ (random (+ (- max min) 1) *random-state*) min))

    (defun create_chromosome
      (min max) 
      (list (random_in min max) (random_in min max) (random_in min max) (random_in min max) (random_in min max)))

    (defun create_population
      (individuals min max)
        (make-list individuals :initial-element (create_chromosome min max)))



    (write (create_population 3 10 100))

但我希望每个列表由不同的随机数组成。

感谢您的时间。

1 个答案:

答案 0 :(得分:6)

:initial-elementmake-list一起使用时,该元素只会创建一次。

实现目标的一种方法:

(loop :repeat individuals
      :collect (create-chromosome min max))