我正在尝试使用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))
但我希望每个列表由不同的随机数组成。
感谢您的时间。
答案 0 :(得分:6)
将:initial-element
与make-list
一起使用时,该元素只会创建一次。
实现目标的一种方法:
(loop :repeat individuals
:collect (create-chromosome min max))