问题 - 我有 10 张卡片的数量为 1 到 10。现在我必须将卡片排列起来,添加 5 张卡片给我 36,剩余 5 张卡片的乘积给我 360。
我已经成功地制作了一个 GA 来解决 java 中的卡片问题。现在我正在考虑用神经网络解决同样的问题。NN可以解决这个问题吗?我应该采取什么方法?
问题 - 我有 10 张卡片的数量为 1 到 10。现在我必须将卡片排列起来,添加 5 张卡片给我 36,剩余 5 张卡片的乘积给我 360。
我已经成功地制作了一个 GA 来解决 java 中的卡片问题。现在我正在考虑用神经网络解决同样的问题。NN可以解决这个问题吗?我应该采取什么方法?
这个问题很难用神经网络直接解决。神经网络不会有求和或乘积的概念,因此它们无法直接区分有效和无效的解决方案。
如果您创建了足够多的示例并进行了标记,那么神经网络可能能够通过记住它们来学会区分“好”和“坏”的安排。但这将是一种非常低效和不准确的方法,而且它有点毫无意义——你必须有一个知道如何解决问题的单独程序才能创建数据来训练神经网络。
PS 我认为你有点幸运,你设法让 GA 也能正常工作 - 我怀疑它只是因为问题足够小,让 GA 可以在答案附近尝试大多数可能的解决方案因此不久它偶然发现了一个正确的答案。
要跟进@mikera 关于为什么神经网络 (NN) 可能不适合这项任务的评论,考虑一下通常如何使用 NN 是很有用的。
NN 通常用于监督学习任务。也就是说,实现者提供了许多输入示例以及与该输入相关的正确输出。然后,NN 找到一个通用函数,该函数捕获提供的输入/输出对,并希望也捕获许多其他以前未见过的输入/输出对。
在您的问题中,您正在解决特定的优化问题,因此无需进行太多培训。只有一个(或多个)正确答案。因此,NN 并不是真正为此类问题而设计的。
请注意,没有总和/乘积的概念不一定会伤害 NN。您只需要创建自己的输入层,该层具有总和和乘积特征,这样 NN 就可以直接从这些特征中学习。但是,在这个问题上它不会有太大帮助。
另请注意,您的问题是如此之小,以至于即使是对所有数字组合 (10! = 3,628,800) 的简单枚举也最多可以在几秒钟内完成。