使用 lisp 生成随机数列表列表
Generating list of lists of random numbers with lisp
我正在使用 Lisp 试验遗传算法,
我想生成一个包含五个随机数的列表列表。
我可以生成该列表,但所有子列表都由相同的随机数组成,这是因为我不确定我是否正确管理 "random state"。
有人可以给我提示吗?
代码如下:
(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))
这个程序的输出是:
((54 51 85 61 44) (54 51 85 61 44) (54 51 85 61 44))
但我希望每个列表由不同的随机数组成。
感谢您的宝贵时间。
当您将 :initial-element
与 make-list
一起使用时,该元素仅创建一次。
一种实现你想要的方法:
(loop :repeat individuals
:collect (create-chromosome min max))
我正在使用 Lisp 试验遗传算法, 我想生成一个包含五个随机数的列表列表。
我可以生成该列表,但所有子列表都由相同的随机数组成,这是因为我不确定我是否正确管理 "random state"。
有人可以给我提示吗?
代码如下:
(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))
这个程序的输出是:
((54 51 85 61 44) (54 51 85 61 44) (54 51 85 61 44))
但我希望每个列表由不同的随机数组成。
感谢您的宝贵时间。
当您将 :initial-element
与 make-list
一起使用时,该元素仅创建一次。
一种实现你想要的方法:
(loop :repeat individuals
:collect (create-chromosome min max))