我有一组变量X, Y, ..., Z
。我的工作是设计一个函数,它接受这组变量并产生一个整数。我有一个健身功能来测试这个。
我对此问题的第一个尝试是假设我可以将f
建模为线性函数:
f(X, Y, ..., Z) -> aX + bY ... cZ
我的第一个想法是使用PSO(粒子群优化)或遗传算法来解析f
的{{1}},我相信它们肯定会产生良好的效果。
另一方面,我觉得可能并不真正需要那种进化算法。首先,我可以想到a, b, .., c
的几个好的“起点”。如果a,b, .., c
是一个线性函数,那么尝试几个点然后对它们进行线性回归这样的事情应该不容易吗?在线性回归之后,尝试了几个点,这次接近看起来像一个好的“点”,再次对它们进行线性回归?
它的缺点是什么?有这些问题经验的人吗?我能想到的最大的一点是,我认为f
的良好起始值可能是“局部最优”,并且使用某种进化算法会让我产生全局性。
a,b, .., c
应该是类似国际象棋游戏的Minimax算法的近似函数。
由于
答案 0 :(得分:3)
您正在描述回归问题,这是一个经典的机器学习问题。有成千上万的科学论文和整本教科书只是关于这个主题。我建议在线查看一些机器学习课程或查看standard machine learning text。
一般方法类似于您提到的方法,求解变量上的线性系数,以最小化一些损失,通常是平方误差之和(L2损失)。这是理想的,因为它是凸函数,因此包含单个最小值,并且可以在多项式时间内求解权重。但是,就像你提到的那样,真正的函数可能不在于这个函数类,你估计得很差。在这种情况下的方法是不尝试使用一些模糊的粒子群方法或遗传算法或任何其他全局优化技术进行某种非凸优化。你的陈述“......可能是一个”局部最优“,并且拥有某种进化算法将使我成为一个全球性的算法。”是一个天真的。全局优化是NP-Hard,这些技术只是近似值,绝对不能保证运行时间或最优性,它们几乎不起作用。
更常被接受的方法是使用“特征扩展”来获取变量X, Y, ..., Z
并将非线性变换应用于某个新集合phi(X), phi(Y), ..., phi(Z)
。此时,您可以找到具有最小二乘(如果使用L2)或其他任何特征的每个要素的最佳线性加权。如何找到好的功能是机器学习中的一个悬而未决的问题,但是有大量的想法和免费的算法可以做到这一点。
答案 1 :(得分:1)
鉴于你正在开发一款游戏,首先想到的是一个古老的跳棋程序,由Arthur Samuel在20世纪50年代开发,Russell and Norvig在他们的章节中提到过。游戏(除其他之外;它仍然是无人监督/半监督机器学习的经典之作)。
该程序假设棋盘的值是棋盘位置的线性函数。我不知道细节,但是我假设每个玩家的棋子都值+1,对手的棋子是-1,空的是0。每个方格都有一个与之相关的权重,这是通过让节目对战来学习的。本身有些(大)次,在每场比赛后评估比赛。
这种策略称为自我训练,也应用于经典的步步高软件TD-Gammon,该软件基于神经网络(多层/非线性网络)。关于该程序的维基百科页面有一些可能有趣的参考文献。
这个答案正在变成一篇关于我不是专家的文章。请参阅相关文献。
答案 2 :(得分:1)
如果我理解你的问题,你有一个接受输入的函数,然后提供一些输出,这应该与象棋式游戏的近似函数有关,你应该猜测它是如何计算输出的
你没有说明输入变量是什么,所以我无法告诉每个域的内容是什么,但一般的策略是保持所有输入相同,并迭代所有的输入变量。正好一个变量的域。对所有输入重复此操作,并使用结果数据集指导下一组测试。很有可能函数使用的实际方法绝对是asinine,如果不将每个输入都映射到每个输出,就无法合理地再现。