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