从给定的100个左右operator, 和10多个参数, 结合生成表达式

建模

ast(Abstract Syntax Tree)建模

  • 制作leaf node: 表达式最初的参数(days, numbers, states)
  • 制作regular node: operator
    • 规范operator的参数和return 类型: 用python typing的Callable
    • 定义node的名称和分类
  • 定义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