从给定的100个左右operator, 和10多个参数, 结合生成表达式
建模
ast(Abstract Syntax Tree)建模
- 制作leaf node: 表达式最初的参数(days, numbers, states)
- 制作regular node: operator
- 规范operator的参数和return 类型: 用python typing的
Callable - 定义node的名称和分类
- 规范operator的参数和return 类型: 用python typing的
- 定义ExpressionNode类:
- 对象: 当前op(leaf or regular) + chirdren(复合的表达式) + return type
- 方法:
- 添加tree样式和string样式的打印
- 添加变异功能: 同类型node替换
- 制作随机生成ExpressionNode的函数: 从root node递归生成, 到leaf node停止
- 每步根据参数type选择return type符合的candidates随机添加
- 给不同类型的node设置不同概率
MDP(Markov Decision Process)建模
把生成ExpressionNode的每一步拆开. 用dfs的方式遍历:
- 把每个node的return type和args type抽象出来
- 写成State, 用stack记录未被填充的regular node
- Action : node
- transition: 添加node