我为AI作业做了这个。需要一个寻找解决方案的逻辑…这是对问题的解释。
我有答案(任何数字,例如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,那么我们可以使用它两次)——>必须使用两次*
我不是人工智能专家,但任何有帮助的链接也欢迎
第一部分的一个相当简单的解决方案如下:假设所有的数字都是有理数。然后继续在当前结果集上执行允许的操作,直到达到目标。毫无疑问,有许多方法可以改进算法,但这应该是您的入门。
下面是一个类似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
请注意,不能立即清楚此操作是否会在每次输入时终止。你能提供这样一个输入的例子,或者证明它确实在所有输入上都终止吗?我们如何改进它?
对于第二部分,您还需要维护一组允许的条件及其当前状态。如果没有那么多条件,并且它们遵循简单而相似的模式,那么您可能希望手动执行此操作,但是如果它们很多并且容易更改,那么您可能更希望为每个结果的每个条件维护一组状态机。