生成随机逻辑连接

时间:2015-06-04 21:05:24

标签: maxima

是否可以生成随机逻辑连接词,将它们放在变量中并用最大值来评估它们的表达式?

提前致谢。

1 个答案:

答案 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值,然后评估整个表达式。