Tag: 人工智能

使用带有Alpha-Beta修剪的MinMax找到最佳移动

我正在为游戏开发AI,我想使用MinMax算法和Alpha-Beta修剪 。 我对它是如何工作有一个粗略的想法,但我仍然无法从头开始编写代码,因此我花了最近两天在网上寻找某种伪代码。 我的问题是,我在网上找到的每个伪代码似乎都是基于找到最佳移动的价值,而我需要返回最佳移动而不是数字。 我当前的代码基于这个伪代码( 源代码 ) minimax(level, player, alpha, beta){ // player may be “computer” or “opponent” if (gameover || level == 0) return score children = all valid moves for this “player” if (player is computer, ie, max’s turn){ // Find max and store in alpha for each child { score = minimax(level […]

我应该使用哪种语言进行Web项目的人工智能

我必须为我的论文做一个涉及人工智能,协同过滤和机器学习方法的项目。 我只知道PHP / mysq / JS,并且在PHP中没有太多的AI内容示例。 互联网上有一些人工智能的书,但他们使用的是Java,Python。 现在我必须在Web应用程序上应用AI技术。 我应该选择哪种语言java或python。 我在互联网上搜索,我可以在我的PHP内部调用java类,这样可以帮助我,因为我非常擅长PHP 我也看到python也可以和php一起使用 那么我应该走哪条路,大概要花多少钱来学习java 我已经完成了java基础知识,但那是在6年前

帮助Neuroph神经网络

对于我的研究生研究,我正在创建一个训练识别图像的神经网络。 我要做的不仅仅是采用RGB值网格,下采样,并将它们发送到网络的输入,就像许多例子一样。 我实际上使用了超过100个独立训练的神经网络来检测线条,阴影图案等特征。更像是人眼,它到目前为止工作得非常好! 问题是我有相当多的训练数据。 我展示了超过100个汽车外观的例子。 然后是100个人的样子。 然后超过100个狗的样子,等等。这是相当多的训练数据! 目前我在大约一周的时间内开始训练网络。 由于我需要调整和重新训练,这有点像我的进步。 我使用的是Neuroph ,作为低级神经网络API。 我正在运行双四核机器(16核超线程),所以这应该很快。 我的处理器百分比仅为5%。 Neuroph表现有什么技巧吗? 还是Java性能一般? 建议? 我是一名认知心理学博士生,作为一名程序员,我态度不错,但对性能编程知之甚少。

支持Java的矢量机?

我想在Java中编写一个“智能监视器”,它会在检测到即将发生的性能问题时发出警报。 我的Java应用程序将结构化格式的数据写入日志文件: | | 因此,例如,如果我有一个Widget#doSomething(String)方法需要812ms来执行,它将被记录为: 2013-03-24 11:39:21 | Widget#doSomething(String) | 812 随着性能开始下降(例如在主要收集期间,在峰值负载期间,或者如果系统正在慢慢爬行),方法执行时间开始减慢; 所以最右边的列开始看到很大的数字(有时候执行单个方法需要20到40秒)。 在大学 – 进行机器学习练习 – 我写了我的教授所谓的线性二分法 ,它采用简单的测试数据(一个人的身高,体重和性别)并“学会”如何根据他们的人将男性或女性分类身高体重。 然后,一旦它掌握了所有的训练数据,我们就会向它提供新的数据,以确定它可以准确地确定性别。 我认为 线性二分法的多变量版本称为支持向量机 (SVM) 。 如果我错了,请澄清,我会将问题的标题更改为更合适的名称。 无论如何 ,我需要这个应用程序来做以下事情: 以“测试模式”运行,我从我的主Java应用程序(我希望监视的那个)提供结构化日志文件,并获取每个日志条目(如上所示)并将其用于测试数据 只有java-method和seconds-to-execute列作为输入/测试数据很重要; 我不关心日期时间 在“监控模式”下运行,它正在从日志文件中主动读取新的日志数据,并使用类似的“机器学习”技术来确定性能下降是否迫在眉睫 重要的是要注意,执行seconds-to-execute列不是这里唯一重要的因素,因为我已经看到了某些方法在令人敬畏的性能期间的可怕时序,并且在服务器看起来像其他方法的时候真的很棒。它即将死去并推动雏菊。 因此,显然某些方法比其他方法“加权”/对性能更重要。 我的问题 谷歌搜索“线性二分法”或“支持向量机”出现了一些非常可怕,高度学术,超脑白皮书,我只是没有精神能量(也没有时间)消费 – 除非他们真的是我唯一的选择; 所以我问是否有一个外行人对这些东西的介绍,或者是用Java构建这样一个系统的优秀网站/文章/教程 ? 有没有稳固/稳定的开源Java库? 我只能找到jlibsvm和svmlearn但前者看起来处于纯beta状态,而后者似乎只支持二元决策(就像我的旧线性二分法)。 我知道有Mahout,但它位于Hadoop之上,我认为我没有足够的数据来保证建立我自己的Hadoop集群所需的时间和精力。 提前致谢!

2D航路点寻路:WP的组合从curLocation到targetLocation

请花点时间了解我的情况。 如果不可理解,请在评论中告诉我。 我有一个Waypoints的ArrayList。 这些航点不是任何顺序。 航点具有以下属性: {int type, float z, float y, float x, float rotation} 这适用于三维世界,但由于我的寻路不应该关心高度(因此将世界视为二维世界),因此忽略y值。 轮换对于这个问题并不重要。 在该二维世界中,x表示x轴,z表示y轴。 如果x增加,则世界中的物体向东移动。 如果x减小,则世界中的物体向西移动。 如果z增加,则世界中的物体向北移动。 如果z减小,则世界中的物体向南移动。 因此,这些“新”航路点可以简化为: waypoint = {float x, float y} 。 现在,这些航点表示物体的X轴(x)和Y轴(z)位置。 此外,还有一个当前位置: curLocation = {float x, float y}和目标位置: tarLocation = {float x, float y} 。 这就是我想要的: 在以下严格条件下从curLocation到tarLocation所有航路点组合(也称为:路径或路径) : 每个航路点之间的距离不得大于(float) maxInbetweenDistance 。 这包括从curLocation到第一个航点的初始距离以及从最后一个航点到tarLocation的距离。 如果不可能有这样的航点组合,则应返回null。 当在距离通往目标航点的航点的maxInbetweenDistance内找到多个航路点时,应选择最近的航点(如果距离稍远一点的替代航路maxInbetweenDistance导致距离maxInbetweenDistance的新航路点也更好回)。 返回航路点组合(路径)的顺序应该是从最短路径(最小距离)到最长路线(最大距离) […]

AI如何为战列舰建立遗传规划模型

我有一个关于遗传编程的问题。 我将为一款名为Battleships的游戏开发一种遗传算法。 我的问题是:我如何决定人工智能的“决策”模型? 这是如何工作的? 我已经阅读了多篇论文和多个答案,只是谈论使用不同的模型,但找不到具体的东西,不幸的是,我显然需要围绕这个问题。 我希望它能够在多次迭代中进化并“学习”最有效的方法,但不确定如何以一种好的方式保存这些“决定”(我知道一个文件,但“编码”如何?),所以它会学会采取先前行动的立场,并根据当前董事会状态的信息。 我一直在考虑为人工智能制定“树结构”,但我实际上并不知道如何开始。 如果有人可以指出我正确的方向(一个链接?一些伪代码?类似的东西),非常感谢,我尽可能地尝试谷歌,观看有关该主题的多个YouTubevideo,但我想我只需要朝着正确的方向微动一点。 我也可能只是不知道究竟要搜索什么,这就是为什么我对于实现此内容以及如何实现此结果的结果空白。

线检测| 使用Java进行角度检测

我正在处理一些我的UGV(Unmanned Ground Vehichle)捕获的图像,以使其在一条线上移动。 我想根据地平线得到该线的角度。 我将尝试用几个例子来解释: 上面的图像会使我的UGV保持笔直向前,角度约为90度。 但是下面会让它向左转,因为角度与地平线相比约为120。 我可以使用otsu成功地将这些图像转换为下面的图像进行阈值处理: 并且还使用边缘检测算法来获得: 但是我现在正试图找到一种算法来检测那些边缘/线和输出 – 或者帮助我输出 – 这样的线的角度..

如何将multithreading应用于反向传播神经网络训练?

对于我的大学项目,我正在创建一个神经网络,可以对信用卡交易是否具有欺诈性的可能性进行分类。 我正在接受反向传播训练。 我用Java写这个。 我想应用multithreading,因为我的电脑是四核i7。 这让我花了几个小时的训练,看到我的大部分核心闲置。 但是,我如何将multithreading应用于反向传播? Backprop通过网络向后调整错误来工作。 必须先完成一层,然后才能继续。 有什么方法可以修改我的程序来做多核背景吗?

8-Puzzle Solution无限执行

我正在寻找使用A* Algorithm 8-puzzle问题的解决方案。 我在互联网上找到了这个项目。 请参阅文件 – proj1和EightPuzzle 。 proj1包含程序的入口点( main()函数),EightPuzzle描述了拼图的特定状态。 每个州都是8拼图的对象。 我觉得逻辑没有错。 但它为我尝试的这两个输入永远循环: {8,2,7,5,1,6,3,0,4}和{3,1,6,8,4,5,7,2,0} 。 它们都是有效的输入状态。 代码有什么问题? 注意 为了更好地查看,请在Notepad ++或其他文本编辑器(具有识别java源文件的能力)中复制代码,因为代码中有很多注释。 由于A *需要启发式算法,因此他们提供了使用曼哈顿距离的选项以及计算错位图块数量的启发式算法。 为了确保首先执行最佳启发式,他们实现了PriorityQueue 。 compareTo()函数在EightPuzzle类中实现。 可以通过更改proj1类的main()函数中的p1d值来更改程序的输入。 我告诉我上述两个输入存在解决方案的原因是因为这里的applet解决了它们。 请确保您从小程序中的选项中选择8-puzzle。 EDIT1 我给出了这个输入{0,5,7,6,8,1,2,4,3} 。 花了大约10 seconds ,结果有26个动作 。 但是小程序用A*在0.0001 seconds进行了24 moves 。 EDIT2 调试时我注意到,随着节点的扩展,新节点在一段时间后都有一个启发式 – f_n为11或12 。 他们似乎永远不会减少。 因此,在一段时间之后, PriorityQueue(openset)中的所有状态都具有11或12的启发式。因此,没有太多可供选择的扩展节点。 最小的是11,最高的是12.这是正常的吗? EDIT3 这是无限循环发生的片段(在proj1-astar()中 )。 openset是包含未展开节点的PriorityQueue,而closedset是包含展开节点的LinkedList。 while(openset.size()> 0){ EightPuzzle […]

如何在eclipse java中重用从explorer(在weka中)创建的已保存分类器

我在WEKA中创建了一个分类器,我将它保存在我的硬盘上,现在我想在eclipse中使用weka api来使用该分类器。 我怎样才能做到这一点? 请指导我…谢谢