基于规则的人工智能算法整数加法的实现人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能算法可以理解为模仿人脑的算法,深度学习是模仿大脑神经网络学习的算法,是分层学习,学习是训练的意思。计算机进行加法运算计算机加法计算是怎么进行呢?它是不是模仿人脑计算?脑算?4+5=9计算机是这样进行计算的,先把数字转换成二进制,然后进行二进制运算,人脑并没有二进制,所以不是人工智能算法。4转换成二进制是1005转换成二进制是101相加的结果是1001怎么理解呢?二进制加法只有两个数0和1,加法规则是逢二进一。计算规则0+0=00+1=11+0=11+1=101+1=10就是逢二进一,1+1=2,但是二进制并没有2这个数字,只能进一位,把2变成1进位并把原来的位置变成0,结果就是10。现在可以理解100+101=1001计算机是用加法器进行二进制运算。32位计算机就是加法器只能进行32个二进制位计算,超过了32位就溢出,超出了32位表示,计算结果是错误的。32位的最大值是2147483647,所以最大能计算21亿多一些,超过了只能用64位表示,可以达到九千万亿亿。只要不是溢出,计算机加法是不会有错误的。用深度学习进行加法运算深度学习是用神经网络进行训练,通过大量计算拟合出一个接近答案的算法,模型。比如直接输入字符串,结果标签也是字符串。输入4+5,预测出结果,让他接近真实标签9.这样输入2+4 结果611+22 结果33333+444结果777算法是实现输入到输出的映射。因为输入是数字,可以转换成数字进行计算,实现逻辑回归。输入两列,输出一列2,4,611,22,33333,444,777通过输入数千万样本数据进行训练,结果会越来越准确。但是数字组合是无穷的,不可能训练所有的数字加法。训练结果总是会有个准确率,不可能达到百分之百正确,比如达到99.99%,还是有0.01%的错误率,这种方法如果计算不准确,不正确,可能相差十万八千里,在要求准确率极高的系统是不可接受的,比如1+2算出1000002,那结果肯定不行的。其实我们要用深度学习做加法运算训练是要学到加法规则和进位规则,但是能学到吗?我们说深度学习并没有理解能力,只是一种映射。1+2我们大脑的理解是一个东西和两个东西合在一起,比如一个苹果和两个苹果放在一起,就能得到三个苹果。要理解1+2=3,首先要认识1,2,3三个数字,他们代表一定的数量,而加就是规则,是把两个数量合起来。规则还有减,乘,除,乘方等方法。所以我认为理解,就是掌握每个数字,或者叫数据,标签,概念,对象,东西,我们用标签来表示。标签1是数量1,标签人则不是数量,是人类,标签乘法,代表求倍数。理解,包含两个意思,一是它跟现实事物的关系,也就是它跟其他标签的关系,用其他标签表示它的属性,二是强加在它上面的各种规则。1表示数量,1个,它能进行加减乘数运算人表示一种动物,人类,有高级智能,能说话,能操作各种东西。一旦建立了各种关系和规则,人就可以做各种事情,比如开车。我们去学车,就是学习理解车,车跟其他东西,环境的关系,并掌握各种规则来操作汽车。利用关系和规则,我们就可以理解,并拥有人的智能。深度学习并不会理解,没有抽象和推理功能。从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃,这种思维过程,称为抽象。推理,逻辑学指思维的基本形式之一,是由一个或几个已知的判断(前提)推出新判断(结论)的过程,有直接推理、间接推理等。抽象就是关系,推理就是规则,合起来就是理解!有了这个概念,我们就可以用关系和规则实现理解,因而有了智能。为什么这样做?因为我们要用计算机来表示并计算,不可能依靠笼统的理解,否则你就没法实现人工智能。面向对象编程有点像理解的代码实现,他有属性和方法,只是人工智能理解为关系和规则。基于规则模仿人脑的加法实现我们不用计算机加法也不用深度学习,利用关系和规则同样可以实现一个加法。当然是模仿人脑的,笔算就是列算式。222+999=?从个位算起,2+9=11,高位1是进位,低位是个位计算十位 2+9=11,但是还有个进位11+1=12,高位1是进位,低位是十位计算十位 2+9=11,但是还有个进位11+1=12,高位1是进位到千位,低位是百位现在和在一起,保留最后一个进位,去掉其他进位,并按高地位排列结果是1221用计算器计算结果1221,说明跟计算机计算结果是一样的。乘法和除法的算法更复杂。驾驶汽车理解的对象更多,规则更多。为了实现模仿人脑的加法,我们要建立关系和规则标签0,1,2,3,4,5,6,7,8,9用十个阿拉伯数字来表示我们要计算的元素对象他们跟数量有关系,假如用到现实中,比如搬运工,8这个数字代表的可能是8袋水泥。这个机器人第一次搬3袋水泥,第二次搬5袋,如果系统让他搬9袋,他有了智能就会去搬最后1袋。规则是加法表0是没有,加0还是等于自己1+1=21+2=31+3=4一直到9+9=18进位规则只是两个数字加起来,那么查看加法表就得到结果。如果多位数相加,就会有进位,两个数相加的高一位就是进位,加到高一位去。减法乘法类似除法更复杂,要尝试枚举乘法表多个规则。本文只是抛砖引玉,真有乘法除法实现也不会放出源代码。sepl规则加法算法实现用编程实现,要定义算法元素,加法规则表,进位规则,然后就可以查表和进位实现任意两个数字的加法,而且不会溢出。sepl代码y引用 System;//器普sepl语言让编程变成有艺术!本代码在sepl3.0编译器运行正常m命名空间 基于规则人工智能算法加法实现m命名空间开始 l类 加法规则 l类开始 g公开的 z字符 数字1; g公开的 z字符 数字2; g公开的 z字符 进位; g公开的 z字符 低位结果; g公开的 加法规则(z字符 数字1, z字符 数字2, z字符 进位, z字符 低位结果) h函数开始 z自身.数字1 = 数字1; z自身.数字2 = 数字2; z自身.进位 = 进位; z自身.低位结果 = 低位结果; h函数结束 l类结束 l类 加法实现 l类开始 z字符[] 阿拉伯数字 := s数组初始化开始 '0','1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' s数组初始化结束; 加法规则[] 加法表 := s数组初始化开始 x新建 加法规则('0','0','0','0'), x新建 加法规则('0','1','0','1'), x新建 加法规则('0','2','0','2'), x新建 加法规则('0','3','0','3'), x新建 加法规则('0','4','0','4'), x新建 加法规则('0','5','0','5'), x新建 加法规则('0','6','0','6'), x新建 加法规则('0','7','0','7'), x新建 加法规则('0','8','0','8'), x新建 加法规则('0','9','1','9'), x新建 加法规则('1','0','0','1'), x新建 加法规则('1','1','0','2'), x新建 加法规则('1','2','0','3'), x新建 加法规则('1','3','0','4'), x新建 加法规则('1','4','0','5'), x新建 加法规则('1','5','0','6'), x新建 加法规则('1','6','0','7'), x新建 加法规则('1','7','0','8'), x新建 加法规则('1','8','0','9'), x新建 加法规则('1','9','1','0'), x新建 加法规则('2','0','0','2'), x新建 加法规则('2','1','0','3'), x新建 加法规则('2','2','0','4'), x新建 加法规则('2','3','0','5'), x新建 加法规则('2','4','0','6'), x新建 加法规则('2','5','0','7'), x新建 加法规则('2','6','0','8'), x新建 加法规则('2','7','0','9'), x新建 加法规则('2','8','1','0'), x新建 加法规则('2','9','1','1'), x新建 加法规则('3','0','0','3'), x新建 加法规则('3','1','0','4'), x新建 加法规则('3','2','0','5'), x新建 加法规则('3','3','0','6'), x新建 加法规则('3','4','0','7'), x新建 加法规则('3','5','0','8'), x新建 加法规则('3','6','0','9'), x新建 加法规则('3','7','1','0'), x新建 加法规则('3','8','1','1'), x新建 加法规则('3','9','1','2'), x新建 加法规则('4','0','0','4'), x新建 加法规则('4','1','0','5'), x新建 加法规则('4','2','0','6'), x新建 加法规则('4','3','0','7'), x新建 加法规则('4','4','0','8'), x新建 加法规则('4','5','0','9'), x新建 加法规则('4','6','1','0'), x新建 加法规则('4','7','1','1'), x新建 加法规则('4','8','1','2'), x新建 加法规则('4','9','1','3'), x新建 加法规则('5','0','0','5'), x新建 加法规则('5','1','0','6'), x新建 加法规则('5','2','0','7'), x新建 加法规则('5','3','0','8'), x新建 加法规则('5','4','0','9'), x新建 加法规则('5','5','1','0'), x新建 加法规则('5','6','1','1'), x新建 加法规则('5','7','1','2'), x新建 加法规则('5','8','1','3'), x新建 加法规则('5','9','1','4'), x新建 加法规则('6','0','0','6'), x新建 加法规则('6','1','0','7'), x新建 加法规则('6','2','0','8'), x新建 加法规则('6','3','0','9'), x新建 加法规则('6','4','1','0'), x新建 加法规则('6','5','1','1'), x新建 加法规则('6','6','1','2'), x新建 加法规则('6','7','1','3'), x新建 加法规则('6','8','1','4'), x新建 加法规则('6','9','1','5'), x新建 加法规则('7','0','0','7'), x新建 加法规则('7','1','0','8'), x新建 加法规则('7','2','0','9'), x新建 加法规则('7','3','1','0'), x新建 加法规则('7','4','1','1'), x新建 加法规则('7','5','1','2'), x新建 加法规则('7','6','1','3'), x新建 加法规则('7','7','1','4'), x新建 加法规则('7','8','1','5'), x新建 加法规则('7','9','1','6'), x新建 加法规则('8','0','0','8'), x新建 加法规则('8','1','0','9'), x新建 加法规则('8','2','1','0'), x新建 加法规则('8','3','1','1'), x新建 加法规则('8','4','1','2'), x新建 加法规则('8','5','1','3'), x新建 加法规则('8','6','1','4'), x新建 加法规则('8','7','1','5'), x新建 加法规则('8','8','1','6'), x新建 加法规则('8','9','1','7'), x新建 加法规则('9','0','0','9'), x新建 加法规则('9','1','1','0'), x新建 加法规则('9','2','1','1'), x新建 加法规则('9','3','1','2'), x新建 加法规则('9','4','1','3'), x新建 加法规则('9','5','1','4'), x新建 加法规则('9','6','1','5'), x新建 加法规则('9','7','1','6'), x新建 加法规则('9','8','1','7'), x新建 加法规则('9','9','1','8'), s数组初始化结束;w无返回值 计算两个阿拉伯数字相加(z字符 数字1, z字符 数字2, z字符 上次进位, f赋值返回 z字符 进位, f赋值返回 z字符 低位结果)h函数开始 进位 = '0'; 低位结果 = '0'; z整数 加法表长度 = 加法表.Length; d带因子循环(z整数 位置索引 = 0;位置索引 { r如果 ((加法表[位置索引].数字1 == 数字1) b并且 (加法表[位置索引].数字2 == 数字2)) k开始 进位 = 加法表[位置索引].进位; 低位结果 = 加法表[位置索引].低位结果; t退出循环; j结束 } d带因子循环(z整数 位置索引 = 0; 位置索引 { r如果 t条件开始 (加法表[位置索引].数字1 == 低位结果) b并且 (加法表[位置索引].数字2 == 上次进位) t条件结束 k开始 低位结果 = 加法表[位置索引].低位结果; t退出循环; j结束 }h函数结束z字符串 计算两个数字字符串相加(z字符串 数字串1, z字符串 数字串2)h函数开始 z整数 最大字符串长度 c初始化 数字串1.Length; r如果 (数字串2.Length > 最大字符串长度) 最大字符串长度 f赋值 数字串2.Length; z字符 每次进位 c初始化 '0'; z字符串 总值串 c初始化 ""; d带因子循环(z整数 次序 = 0; 次序 x循环开始 z字符 数字1 c初始化 '0'; z字符 数字2 c初始化 '0'; z整数 字符1位置 := 数字串1.Length - 1 - 次序;//从低位开始相加 z整数 字符2位置 := 数字串2.Length - 1 - 次序; r如果 m满足条件 (次序=0) n那么 数字1=数字串1[字符1位置]; r如果 t条件 (次序 = 0) w为真就执行 数字2 = 数字串2[字符2位置]; z字符 进位 = '0'; z字符 低位结果 = '0'; 计算两个阿拉伯数字相加(数字1, 数字2, 每次进位, f赋值返回 进位, f赋值返回 低位结果); 每次进位:= 进位; 总值串 = 低位结果 + 总值串; x循环结束 r如果 m满足条件 (每次进位 b不等于 '0') n那么 总值串 f赋值 每次进位 l连接 总值串; f返回 总值串; l类结束 g公开的 j静态全局的 w无返回值 主函数(z字符串[] 命令行参数) h函数开始 加法实现 加法对象=x新建 加法实现(); z执行 x循环开始 Console.WriteLine("请输入数字1(q退出):"); z字符串 数字串1 = Console.ReadLine(); r如果 m满足条件 数字串1 d等于 "q" n那么 t退出循环; Console.WriteLine("请输入数字2(非数字当0):"); z字符串 数字串2 = Console.ReadLine(); z字符串 总和 = 加法对象.计算两个数字字符串相加(数字串1,数字串2); Console.WriteLine("总和:"+总和); x循环结束 m满足条件再循环(z真); h函数结束 l类结束m命名空间结束运行测试结果:请输入数字1(q退出):11111111请输入数字2(非数字当0):22222222总和:33333333请输入数字1(q退出):23214234234242342342342342342342343545656请输入数字2(非数字当0):56456456456456564564564645646456456565655总和:79670690690698906906906987988798790111311请输入数字1(q退出):99999999999999999999999999999999999999999999999999999999999999999请输入数字2(非数字当0):33333333333333333333333333333333333333333333333333333333333333333总和:133333333333333333333333333333333333333333333333333333333333333332请输入数字1(q退出): 09-08 11:26