是否可以生成随机逻辑连接词,将它们放在变量中并用最大值来评估它们的表达式?
提前致谢。
答案 0 :(得分:2)
这是一种方法。创建规则以使用随机布尔表达式替换表达式中的符号。递归应用规则以使表达式更深入。请注意,maxapplydepth
设置为较小的数字以限制表达式的大小。
(%i102) maxapplydepth : 5 $
(%i103) matchdeclare (aa, symbolp) $
(%i104) defrule (r1, aa,
if random(1.0) < 0.5
then if random(1.0) < 0.33
then not aa
else if random(1.0) < 0.5
then aa and gensym ()
else aa or gensym ()
else aa) $
(%i105) apply1 (gensym (), r1);
(%o105) g20965
(%i106) apply1 (gensym (), r1);
(%o106) g20966 and (not g20967)
(%i107) apply1 (gensym (), r1);
(%o107) g20968 or g20970 or g20969
(%i108) apply1 (gensym (), r1);
(%o108) g20971
(%i109) apply1 (gensym (), r1);
(%o109) g20972
(%i110) apply1 (gensym (), r1);
(%o110) g20973 and g20974 and (g20975 or g20976)
(%i111) apply1 (gensym (), r1);
(%o111) (not g20977) and g20978 and g20979
(%i112) apply1 (gensym (), r1);
(%o112) g20980
(%i113) apply1 (gensym (), r1);
(%o113) g20981 and g20982
(%i114) apply1 (gensym (), r1);
(%o114) (g20983 and g20985 and (not g20987) and (g20986 or (not g20988)))
or ((((not g20984) and (not g20992)) or g20991) and (not g20990) and (not g20993))
or g20989 or g20994
您可以使用listofvars
获取符号列表。
(%i115) listofvars (%);
(%o115) [g20983, g20985, g20987, g20986, g20988, g20984, g20992, g20991,
g20990, g20993, g20989, g20994]
您可以使用它为符号分配随机的true / false值,然后评估整个表达式。