标签: artificial-intelligence

如何为国际象棋编程神经网络?

我想编写一个国际象棋引擎,学习如何做出好的动作并赢得其他玩家.我已经编写了国际象棋棋盘的代表和一个输出所有可能动作的函数.所以我只需要一个评估功能,它可以说明董事会的特定情况有多好.因此,我想使用人工神经网络,然后应该评估给定的位置.输出应该是一个数值.值越高,白人玩家的位置越好.

我的方法是建立一个由385个神经元构成的网络:棋盘上有六个独特的棋子和64个场.因此,对于每个场,我们采取6个神经元(每个1个).如果有白色片段,则输入值为1.如果有黑色片段,则值为-1.如果那个场上没有那种,那么值就是0.除此之外,玩家应该有1个神经元移动.如果是白色,则输入值为1,如果是黑色,则值为-1.

我认为神经网络的配置非常好.但缺少主要部分:如何将这种神经网络实现为编码语言(例如Delphi)?我认为每个神经元的权重在开始时应该是相同的.根据匹配的结果,然后应调整权重.但是怎么样?我想我应该让两个电脑玩家(都使用我的引擎)互相对抗.如果White获胜,Black会得到其权重不佳的反馈.

因此,如果您可以帮助我将神经网络实现为编码语言(最好的是Delphi,否则是伪代码)会很棒.提前致谢!

chess artificial-intelligence neural-network

23
推荐指数
4
解决办法
3万
查看次数

用于实时战略战争AI的算法

我正在设计一个实时策略战争游戏,AI将负责控制大型六边形地图上的大量单位(可能是1000多个).

一个单位有许多行动点,可以用于移动,攻击敌方单位或各种特殊行动(例如建造新单位).例如,一个有5个动作点的坦克可以在移动中花费3,然后在范围内向敌人射击2.不同的单位对不同的行动等有不同的成本

一些额外的说明:

  • AI的输出是任何给定单位的"命令"
  • 动作点在一段时间的开始时分配,但可以在该时间段内的任何时间点使用(这是为了允许实时多人游戏).因此,"什么也不做,以后再保存动作点"是一种潜在有效的策略(例如,炮塔无法移动等待敌人进入射程范围内)
  • 游戏实时更新,但AI可以随时获得游戏状态的一致快照(感谢游戏状态是Clojure的持久性数据结构之一)
  • 我并不期待"最佳"的行为,只是一些不明显愚蠢的事情,并提供合理的乐趣/挑战

对于能够在效率和合理智能行为之间取得适当平衡的特定算法/方法,您能推荐什么?

algorithm artificial-intelligence

23
推荐指数
4
解决办法
1万
查看次数

像Wolfram Alpha或Mathematica这样的系统如何解决方程?

我正在构建一个基于网络的编程语言,部分受到Prolog和Haskell的启发(不要笑).

它已经具有相当多的功能,您可以在http://www.lastcalc.com/上查看原型.您可以在此处查看源代码并在此处阅读有关架构的信息.记住它是原型.

目前,LastCalc无法简化表达式或求解方程式.我不想在Java中对其进行硬编码,而是希望增强基本语言,以便可以使用语言本身来扩展它来执行这些操作(与Prolog一样).与Prolog不同,LastCalc具有更强大的搜索算法,Prolog是"具有回溯的深度优先搜索",LastCalc目前使用启发式最佳优先搜索.

在深入研究之前,我想更多地了解其他系统如何解决这个问题,特别是Mathematica/Wolfram Alpha.

我认为这个想法,至少在一般情况下,是你给系统一套规则来操纵方程(比如a*(b+c) = a*b + a+c)指定目标(例如,隔离变量x),然后让它松散.

所以,我的问题是:

  • 我的假设是否正确?
  • 应用规则的搜索策略是什么?例如.深度优先,广度优先,深度优先,迭代深化,某种最好的第一?
  • 如果它是"最好的第一",那么使用什么启发法来确定特定规则应用程序是否可能让我们更接近我们的目标?

我还要感谢任何其他的建议(除了"放弃" - 我经常忽略这条建议,这样做对我有好处;).

algorithm wolfram-mathematica artificial-intelligence algebra

23
推荐指数
1
解决办法
3350
查看次数

torch.nn.conv2d 中参数的含义

在 fastai 编码人员的前沿深度学习课程第 7 课中。

 self.conv1 = nn.Conv2d(3,10,kernel_size = 5,stride=1,padding=2)
Run Code Online (Sandbox Code Playgroud)

10 是否意味着过滤器的数量或过滤器将提供的激活数量?

python artificial-intelligence machine-learning pytorch

23
推荐指数
2
解决办法
3万
查看次数

如何创造真实的机器人?

甚至在我学习编程之前,我一直对机器人如何工作着迷.现在我知道如何编写底层编程指令,但我不明白的是机器人如何遵循这些指令.

例如,如果我写了这段代码:

object=Robot.ScanSurroundings(300,400);
if (Objects.isEatable(object))
{
   Robot.moveLeftArm(300,400);
   Robot.pickObject(object);
}
Run Code Online (Sandbox Code Playgroud)

CPU如何以一种能让机器人向左侧移动,移动手臂等物理动作的方式跟随该程序?它主要是用二进制语言/ ASM完成的吗?

最后,如果我想学习如何创建一个机器人,我会去哪里?

robotics artificial-intelligence

22
推荐指数
3
解决办法
2840
查看次数

强化学习的良好实施?

对于一个ai级项目,我需要实现一个强化学习算法,该算法击败了一个简单的俄罗斯方块游戏.游戏是用Java编写的,我们有源代码.我知道强化学习理论的基础知识,但是想知道SO社区中是否有人亲身体验过这类事情.

  1. 对于在俄罗斯方块游戏中实施强化学习,您的推荐读数是什么?
  2. 是否有任何良好的开源项目可以完成类似的事情,值得一试?

编辑:越具体越好,但欢迎关于该主题的一般资源.

跟进:

我觉得如果我发布一个后续内容会很好.

这是我为任何未来的学生最终得到的解决方案(代码和写作):).

/代码

language-agnostic artificial-intelligence machine-learning reinforcement-learning

22
推荐指数
1
解决办法
5770
查看次数

将方向存储到数组 - 并进行比较

我想实现以下目标:

我希望用户能够使用陀螺仪"记录"iPhone的运动.之后,用户应该能够复制相同的动作.我使用以下方法提取俯仰,滚转和偏航:

 [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
                                       withHandler: ^(CMDeviceMotion *motion, NSError *error)
     {
         CMAttitude *attitude = motion.attitude;
         NSLog(@"pitch: %f, roll: %f, yaw: %f]", attitude.pitch, attitude.roll, attitude.yaw);
     }];
Run Code Online (Sandbox Code Playgroud)

我想如果用户处于记录模式,我可以将这些值存储到数组中.当用户尝试复制该移动时,我可以将复制的移动阵列与录制的移动阵列进行比较.问题是,如何以智能方式比较两个阵列?它们永远不会具有完全相同的值,但它们可能有些相同.

我在这里走在正确的轨道上吗?

更新:我想也许Alis回答有关使用DTW的方法对我来说可能是正确的方法.但是我并不那么聪明(显然),所以如果有人能帮助我完成与阵列比较的第一步,我会是一个快乐的人!

谢谢!

iphone math android artificial-intelligence gesture-recognition

22
推荐指数
2
解决办法
1万
查看次数

将机器学习应用于猜谜游戏?

我正在制作一款游戏有问题.我想我知道解决方案(或者应用什么解决方案),但不确定所有"碎片"是如何组合在一起的.

游戏如何运作:

(从如何处理数字猜谜游戏(带扭曲)算法?)

将为用户提供具有值的项目(值每天更改,并且程序知道价格的变化).例如

Apple = 1
Pears = 2
Oranges  = 3
Run Code Online (Sandbox Code Playgroud)

然后他们将有机会选择他们喜欢的任何组合(即100个苹果,20个梨和1个橙子).计算机获得的唯一输出是总值(在此示例中,其当前为143美元).电脑会试着猜猜他们有什么.显然,第一回合无法正确使用.

         Value  quantity(day1)  value(day1)
Apple    1      100             100
Pears    2      20              40
Orange   3      1               3
Total           121             143
Run Code Online (Sandbox Code Playgroud)

下一轮用户可以修改他们的数量但不超过总数量的5%(或者我们可能选择的其他百分比.例如,我将使用5%).水果价格可以随意变化,因此总价值也可能因此而变化(为简单起见,本例中我没有改变水果价格).使用上面的例子,在游戏的第2天,用户在第3天返回$ 152和$ 164的值.这是一个例子.

quantity(day2)  %change(day2)   value(day2) quantity(day3)  %change(day3)   value(day3)
104                             104         106                             106
21                              42          23                              46
2                               6           4                               12
127             4.96%           152         133             4.72%           164
Run Code Online (Sandbox Code Playgroud)

*(我希望表格显示正确,我不得不手动分隔它们,所以希望它不仅仅是在我的屏幕上做,如果它不起作用让我知道,我会尝试上传截图).

我试图看看我是否可以计算出一段时间内的数量(假设用户有耐心继续输入数字).我现在知道我唯一的限制是总价值不能超过5%所以我现在不能达到5%的准确度,所以用户将永远进入它.

到目前为止我做了什么:

我已经采用了水果篮的所有价值和水果篮的总价值,并创造了一个包含所有可能性的大表.一旦我列出了所有可能性,我就使用了图论并为每个可能的解决方案创建了节点.然后,如果它在5%的变化范围内,我会在每天的节点之间创建边(链接)(例如day1到day2).然后我删除所有没有边缘的节点(链接到其他节点),并且当用户继续播放时,我也会在路径变为死路时删除整个路径.这很好,因为它缩小了选择范围,但现在我被卡住了,因为我想缩小这些选择范围.我被告知这是一个隐藏的马尔可夫问题,但是一个棘手的版本,因为状态正在改变(正如你可以看到上面的每个回合都添加了新节点,旧的/不可能的节点被删除).

**如果它有帮助,我在baum-welch模型(用于训练数据)的python实现上得到了一个惊人的答案(带有示例代码):Baum-Welch的实现示例**

我认为需要做什么(这可能是错的):

现在我缩小了结果范围,我基本上试图让程序尝试根据缩小的结果基础来预测正确的结果.我认为这是不可能的,但有几个人建议这可以通过隐藏的马尔可夫模型来解决.我想我可以对数据进行多次迭代(使用Baum-Welch模型),直到概率稳定(并且应该从用户获得更多转弯时变得更好).隐藏马尔可夫模型的方式能够检查拼写或手写并在出错时进行改进(在这种情况下的错误是选择在下一回合被删除的篮子是不可能的).

两个问题:

  1. 如果所有状态首先相等,我如何计算过渡和发射矩阵?例如,由于所有州都同样可能必须使用某些东西来专门改变状态的概率.我正在考虑使用我所做的图来对具有最大边数的节点进行加权,作为过渡/发射状态计算的一部分?这有意义还是有更好的方法?

  2. 如何跟踪各州的所有变化?随着新的篮子被添加并且旧的篮子被移除,存在跟踪篮子的问题.我虽然一个Hierarchical Dirichlet过程隐藏马尔可夫模型(hdp-hmm)将是我需要的但不完全确定如何应用它.

(对不起,如果我听起来有点沮丧..有点难以知道问题是可解决的但是无法在概念上掌握需要做的事情).

一如既往,感谢您的时间,任何意见/建议将不胜感激.

python artificial-intelligence machine-learning

22
推荐指数
1
解决办法
2507
查看次数

何时使用某种强化学习算法?

我正在学习强化学习和阅读萨顿的大学课程.除了经典的PD,MC,TD和Q-Learning算法之外,我还在阅读有关决策问题解决的政策梯度方法和遗传算法.我之前从未有过这个主题的经验,而且我很难理解何时应该优先选择一种技术.我有一些想法,但我不确定.有人可以简单解释或告诉我一个来源,我可以找到一些应该使用某些方法的典型情况吗?据我所理解:

  • 仅当MDP具有很少的动作和状态并且模型已知时才应使用动态编程和线性编程,因为它非常昂贵.但是当DP比LP好?
  • 当我没有问题模型但我可以生成样本时使用蒙特卡罗方法.它没有偏见,但有很大的差异.
  • 当MC方法需要太多样本以具有低方差时,应使用时间差异方法.但是什么时候我应该使用TD和Q-Learning?
  • Policy Gradient和Genetic算法适用于连续MDP.但是当一个比另一个更好?

更准确地说,我认为选择一种学习方法,程序员应该问自己以下问题:

  • 代理人在线或离线学习吗?
  • 我们可以分开探索和开发阶段吗?
  • 我们可以进行足够的探索吗
  • MDP的地平线是有限的还是无限的?
  • 国家和行动是否连续?

但我不知道问题的这些细节如何影响学习方法的选择.我希望有些程序员已经对RL方法有一些经验,可以帮助我更好地理解他们的应用程序.

algorithm artificial-intelligence machine-learning markov-chains reinforcement-learning

22
推荐指数
1
解决办法
3344
查看次数

贪心最佳优先搜索算法是否与最佳优先搜索算法不同?

贪心最佳优先搜索算法是否与最佳优先搜索算法不同?

wiki页面大约有贪婪的BFS一个单独的段落,但它是一个有点不清楚.

我的理解是,Greedy BFS只是BFS,其中维基百科算法中的"OPEN最佳节点"是一个为节点计算的启发式函数.所以实现这个:

OPEN = [initial state]
CLOSED = []
while OPEN is not empty
do
 1. Remove the best node from OPEN, call it n, add it to CLOSED.
 2. If n is the goal state, backtrace path to n (through recorded parents) and return path.
 3. Create n's successors.
 4. For each successor do:
   a. If it is not in CLOSED: evaluate it, add it to OPEN, and record its parent.
   b. Otherwise: change …
Run Code Online (Sandbox Code Playgroud)

algorithm search artificial-intelligence best-first-search

21
推荐指数
3
解决办法
4万
查看次数