你能"teach"计算机使用变量表达式(例如aX+bX=(a+b)X)来做代数吗?



假设在示例中小写为常量,大写为变量。

我想让程序能够"智能地"完成特定的任务,比如代数,但是用人类能理解的符号教程序新的方法应该很容易。例如,如果程序告诉这些事实:

aX + bX = (a + b) X

如果a=bX,则X=a/b

那么它应该能够执行以下操作:2 + 3 = 5

3 + 3 x = 6 x

3x=1因此x=1/3

4x+2x=1 -> 6x=1因此x=1/6

我试图用Prolog做类似的事情,因为它可以很容易地"理解"变量,但后来我遇到了太多的复杂性,主要是因为两种描述关系的方式都会导致崩溃。(不易整理)

总结一下:我想知道是否有一个程序可以只用数学符号来教授代数。我想知道其他人是否尝试过这个,以及它有多复杂。这样做的目的是使编程更容易(运行时不是那么重要)

这取决于你想让机器做什么以及它应该有多智能。

你的问题主要是关于AI而不是ML. AI处理"人类"任务的形式化,而ML(虽然是AI的子集)是关于从数据中构建模型。

描述的程序可以这样实现:

每个事实形成一个模式。程序给出一个表达式和一些模式,可以尝试将其中一些应用到表达式中,看看会发生什么。如果你想让你的程序能够,例如,解决二次方程给定的规则,如ax² + bx + c = 0 → x = (-b ± sqrt(b²-4ac))/(2a),那么它的设计如下:

有人给出了一套规则。规则由模式和结果(解决方案或等效形式)组成。把模式看作是一种正则表达式。

然后程序被要求表现出一些智力,并通过对给定表达式做一些事情来证明它的知识。下面是主要部分:

  • 通过应用可能的规则构建表达式图(如果模式适用于表达式,则添加具有相应结果的新顶点)。
  • 然后运行一些路径搜索算法(例如A*)来查找导致x = ...
  • 形式的转换序列

我认为这是一个有趣的问题,尽管它偏离了SO(工具推荐)的主题

但是,因为它抓住了我的想象力,我用R写了几个函数,可以很容易地解决这样的问题

首先,你需要安装R,之后你需要下载一个名为stringr

的包。

所以在R控制台中运行

install.packages("stringr")
library(stringr)

然后你可以定义下面我写的函数

FirstFunc <- function(temp){
paste0(eval(parse(text = gsub("[A-Z]", "", temp))), unique(str_extract_all(temp, "[A-Z]")[[1]]))
}
SecondFunc <- function(temp){
 eval(parse(text = strsplit(temp, "=")[[1]][2])) / eval(parse(text = gsub("[[:alpha:]]", "", strsplit(temp, "=")[[1]][1])))
}

现在,第一个函数将求解像

这样的方程

aX + bX = (a + b) X

而第二个将解决像

这样的方程

4 x + 2 x = 1

例如

FirstFunc("3X+6X-2X-3X")

将返回

"4X"

现在这个函数是相当原始的(主要是为了说明),并将解决只包含一个变量类型的方程,像FirstFunc("3X-2X-2Y")这样的东西不会给出正确的结果(但函数可以很容易地修改)

第二个函数将解决诸如 之类的问题
SecondFunc("4x-2x=1")

将返回

0.5

SecondFunc("4x+2x*3x=1")

将返回

0.1

注意,这个函数也只适用于一个未知变量(x),但也可以很容易地修改

最新更新