征集问题求解:基于NFA的算术表达式的智能解析与运算

问题描述:如何让智能体学会计算一个数学表达式?

数学表达式,例如:(1)3,(2)-3,(3)3+5,(4)3+(5),(5)3+5*3;(6)3++5*3,(7)3--5*3....

从现象而言,表达式长度变化不一;但其本质是一个确定有限自动机;

问题定义:应通过什么方式,让智能体学会解析一个算术表达式,并智能地计算其结果(设表达式本身语法正确)?或者,如何让智能体学习到一个DFA,以得到问题的本质模型?

算术表达式的生成python代码:

# 一个算术表达式生成器
# 考量Agent自动构建认知模型的能力
import random

# 生成元
values = [str(i - 5) for i in range(11)]
for i in range(5000):
    s = random.choice([0, 1, 2])
    if s == 0:
        k = random.randint(0, len(values)-1)
        val = '(' + values[k] + ')' 
    elif s == 1:
        k = random.randint(0, len(values)-1)
        val = random.choice('+-') + values[k]
    else:
        k2 = [random.randint(0, len(values)-1), random.randint(0, len(values)-1)]
        if k2[0] > k2[1]:
            k2 = [k2[1], k2[0]]
        k1, k2 = k2
        if k1 == k2:
            val = values[k]
            val = val + random.choice('+-*/') + val
        else:
            val2 = values[k2]
            val1 = values[k1]
            val = val1 + random.choice('+-*/') + val2
    values.append(val)
    try:
        print(val, eval(val))
    except ZeroDivisionError:
        pass
    except:
        raise
for val in values:
    print( val )

生成的结果(部分):

(+-((((-3-+1))))) 4
-(+-4*3)*(-4)/(-5-(3))+-+0-(-4*3)/(-5)*(++1) 3.6
-+(--(+-4))*((((--2-(3))))) -4
+(-4)--+-4*3-(++2+-(-4)/(-5-(3))) -17.5
-((-4)) 4
+((+-4))/(((((-3-+1)))*-+2))/-(+1--+2++(-4))*+(-5-(3))/(--1) 4.0
((+-(-3-+1))) 4
(+++1+--(((0/(-4)))/(+-4))) 1.0
(++2+-(-4)/(-5-(3)))-((-(+-4))) -2.5
(++2)*-4*3/(++2)++((-0-2--+2))-(((+2)*((0/(-4)))/(+-4)))/(++0-2--+2*---1) -12.0
-(-5-(3))+(+(--2-(3))) 7
((0-2--+2)) 0
(-(-(+-4))/(-4+-1)) 0.8
(+(-3-+1)) -4
(--4+-1) 3
+((--(3)-(-3-+1)++2+(-4))) 5
-(((((-3-+1)))*-+2)) -8
((0-2)--+2) 0
+0-2*(0-2)--+2--(+0)-++2+-(-4)/(-5-(3))+(+(-5)) -1.5
(-1+(+1)-+(-4)) 4
((++(--(+-4)))) -4
-((-(-0/(-4)))) -0.0
(+((-2))) -2
-+(-++0-2--+2*---1) 4
((+2)) 2
((((+0)))) 0
(((-3-+2--(+-4))))/(+(-4)) 2.25
+0-2--+2/-+2-((+-4))/((+(-3-+2--(+-4))))/+-((0-2--+2*---1/(--4))) -3.1777777777777776
-(+(-3-+1)) 4
((-2+(-4)/--+1-(+(-5))-+-(+-4)-++-4*+(+(-5)))) -25.0
(+-(3)) -3
-(-5-(3))+(+0-2--+2*(+1*+2+(-4))--3+(-+0)) 5
((2+(-4))) -2
+-((-(-0/(-4)))) -0.0
(+0-2--+2*---1) -4
--(+-4)*(((+0)))-((+2))*+0-2--+2+(+0)*((-(+-4))) 0
((((--2-(3))))) -1
(((--+2))) 2
(+(++0-2--+2*---1*++-(0))) -2
(-3-+1)+(((+0)))-((++0-2))*(((0))) -4
(+-(-4)/(-5-(3))+(+-(-3-+1))) 3.5
+++--(+-4) -4
-((((+0)))) 0
(++-(0)*+(-+1)) 0
(((0-2--+2))) 0
-(((0/(-4)))/(+-4))+-(3) -3.0
-((-(-0/(-4)))) -0.0
((2+(-4))) -2
++-(5*-2-(3))-(-(-3-+1))/-4 14.0
(++0-(-4*3)/(-5)) -2.4
+((0-2--+2))+(+2+(-4))+((-5-(3))) -10
(+((0-2--+2))+(+2+(-4))+((-5-(3)))) -10
+-++-(0-2)/-+((+0-2))+(-0-2--+2) -1.0
(((+0)-++2+-(-4)/(-5-(3))+(+(-5)))) -7.5
((((-3-+2--(+-4))))) -9
(((+-((-(+-4)))))*(4*-(-4)/(-5-(3)))) 8.0
(0-2--+2)/+-3/+(++2+-(-4)/(-5-(3))) -0.0
+(((+-(-3-+1))*((-(+-4))+(0))/-(5*-2-(3))-(-(-3-+1))/-4)/((((-3-+1)))*+0-(-4*3)/(-5)*(++1))) -0.9294871794871795
((--+2---((+2))*(+(-4)))-((-((-(+-4)))))) 14
(+(0/(-4))*(-(+-4))) -0.0
+(((-(+-4))+(0))) 4
+((-(-4))) 4
((-(0-2--+2))) 0
(--+1)-+++-(-3-+1) -3
-(++0-(-4*3)/(-5)) 2.4
+(((-(+-4))+(0)))++--+2/((+-4))-(0-2--+2*(+1*+2+(-4))/-(+-(-3-+1)))+(((++-(-3-+1)))-((-(0/(-4)))))*((-+1-((++-(-3-+1))))) -15.5
0/(-4)/+(-4)*-5-(-5-(3))+-+2-(-(+-4))-((0))--((+2))*(--+2) 6.0
(-3-+1)-+(+0)++-+-4*3 8
+(+(-5))*((-(+-4))+(0)) -20
--((++2+-(-4)/(-5-(3))))*-+(-3-+1) 6.0
-++-4/(--1) 4.0
((((((-3-+1)))*-+2))) 8
(+++(-4)*+2) -8
(((5*-2-(3)))) -13
((-+1/(+(+(-5))))) 0.2
(++++(-4)*+2) -8
-(--+2--(+-4)) 2
(((5*-2-(3))+((-4)/(-5-(3)))))+-((((-(+-4))))) -16.5
-((-(+-4))) -4
((+2+(-4))) -2
+-(-5-(3))+(+0-2--+2*(+1*+2+(-4))--3+(-+0)) 5
+(+((((0-2--+2))))) 0

要求:使用ANN完成表达式的解析,而不是人工编程解析计算过程.

你可能感兴趣的:(人工智能,python,keras,lstm,神经网络,nlp)