使用特定值集获取数字方程式以获得给定答案

时间:2014-07-29 08:36:14

标签: math numbers mathematical-optimization

我已经为人工智能分配做了。需要一个寻找解决方案的逻辑。这是对问题的解释。

我已回答(任何数字,例如10)。并有一些数字(例如[1,2,3,4,5,6,8,9])。现在我必须使用(+, - ,*,/)和数字来创建方程式以获得答案10.

这是第一步(不是修复重复数字的长度或条件)..有很多解决方案,如

5 + 5 = 10(2步) 2 * 2 = 10(2步)

2 * 2 + 6 = 10(3步) 3 * 2 + 4 = 10(3步)......并且

第二步(更难)(此后的下一个任务)是必须设置一些条件,如 - >必须在特定的步骤......或者 - >必须没有两次转发器号码(如果在阵列中这里两次5比我们可以使用它两次) - >必须使用*两次

我不是AI的专家但是也欢迎任何有用的链接 在此先感谢

1 个答案:

答案 0 :(得分:1)

第一部分的一个相当天真的解决方案如下:假设你的所有数字都是有理数的。然后继续对当前结果集执行允许的操作,直到达到目标为止。毫无疑问,有许多方法可以改进算法,但这应该可以让你开始。

下面是一个类似Python的伪代码,用于第一部分的天真解决方案。

def solve(numbers, target, binary_operators):
    obtainable_results = set(numbers)
    if target in obtainable_results:
        return True
    while True:
        prev_len = len(obtainable_results)
        for a in obtainable_results:
            for b in obtainable_results:
                for op in binary_operators:
                    c = op(a, b)
                    if c == target:
                        return True
                    obtainable_results.insert(c)
        if prev_len == len(obtainable_results):
             return False

请注意,目前还不清楚这是否会在每次输入时终止。你能提供这样一个输入的例子,或证明这确实在所有输入上终止了吗?我们怎样才能改善它?

至于第二部分,您还需要维护一组允许的条件及其当前状态。如果没有那么多条件,并且它们遵循简单和类似的模式,那么您可能希望手动执行此操作,但如果它们很多并且可能会发生变化,那么您可能更愿意维护一组状态机每个结果的每个条件。