我想编写一个国际象棋引擎,学习如何做出好的动作并赢得其他玩家.我已经编写了国际象棋棋盘的代表和一个输出所有可能动作的函数.所以我只需要一个评估功能,它可以说明董事会的特定情况有多好.因此,我想使用人工神经网络,然后应该评估给定的位置.输出应该是一个数值.值越高,白人玩家的位置越好.
我的方法是建立一个由385个神经元构成的网络:棋盘上有六个独特的棋子和64个场.因此,对于每个场,我们采取6个神经元(每个1个).如果有白色片段,则输入值为1.如果有黑色片段,则值为-1.如果那个场上没有那种,那么值就是0.除此之外,玩家应该有1个神经元移动.如果是白色,则输入值为1,如果是黑色,则值为-1.
我认为神经网络的配置非常好.但缺少主要部分:如何将这种神经网络实现为编码语言(例如Delphi)?我认为每个神经元的权重在开始时应该是相同的.根据匹配的结果,然后应调整权重.但是怎么样?我想我应该让两个电脑玩家(都使用我的引擎)互相对抗.如果White获胜,Black会得到其权重不佳的反馈.
因此,如果您可以帮助我将神经网络实现为编码语言(最好的是Delphi,否则是伪代码)会很棒.提前致谢!
我正在设计一个实时策略战争游戏,AI将负责控制大型六边形地图上的大量单位(可能是1000多个).
一个单位有许多行动点,可以用于移动,攻击敌方单位或各种特殊行动(例如建造新单位).例如,一个有5个动作点的坦克可以在移动中花费3,然后在范围内向敌人射击2.不同的单位对不同的行动等有不同的成本
一些额外的说明:
对于能够在效率和合理智能行为之间取得适当平衡的特定算法/方法,您能推荐什么?
我正在构建一个基于网络的编程语言,部分受到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
在 fastai 编码人员的前沿深度学习课程第 7 课中。
self.conv1 = nn.Conv2d(3,10,kernel_size = 5,stride=1,padding=2)
Run Code Online (Sandbox Code Playgroud)
10 是否意味着过滤器的数量或过滤器将提供的激活数量?
甚至在我学习编程之前,我一直对机器人如何工作着迷.现在我知道如何编写底层编程指令,但我不明白的是机器人如何遵循这些指令.
例如,如果我写了这段代码:
object=Robot.ScanSurroundings(300,400);
if (Objects.isEatable(object))
{
Robot.moveLeftArm(300,400);
Robot.pickObject(object);
}
Run Code Online (Sandbox Code Playgroud)
CPU如何以一种能让机器人向左侧移动,移动手臂等物理动作的方式跟随该程序?它主要是用二进制语言/ ASM完成的吗?
最后,如果我想学习如何创建一个机器人,我会去哪里?
对于一个ai级项目,我需要实现一个强化学习算法,该算法击败了一个简单的俄罗斯方块游戏.游戏是用Java编写的,我们有源代码.我知道强化学习理论的基础知识,但是想知道SO社区中是否有人亲身体验过这类事情.
编辑:越具体越好,但欢迎关于该主题的一般资源.
跟进:
我觉得如果我发布一个后续内容会很好.
这是我为任何未来的学生最终得到的解决方案(代码和写作):).
language-agnostic artificial-intelligence machine-learning reinforcement-learning
我想实现以下目标:
我希望用户能够使用陀螺仪"记录"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
我正在制作一款游戏有问题.我想我知道解决方案(或者应用什么解决方案),但不确定所有"碎片"是如何组合在一起的.
游戏如何运作:
将为用户提供具有值的项目(值每天更改,并且程序知道价格的变化).例如
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模型),直到概率稳定(并且应该从用户获得更多转弯时变得更好).隐藏马尔可夫模型的方式能够检查拼写或手写并在出错时进行改进(在这种情况下的错误是选择在下一回合被删除的篮子是不可能的).
两个问题:
如果所有状态首先相等,我如何计算过渡和发射矩阵?例如,由于所有州都同样可能必须使用某些东西来专门改变状态的概率.我正在考虑使用我所做的图来对具有最大边数的节点进行加权,作为过渡/发射状态计算的一部分?这有意义还是有更好的方法?
如何跟踪各州的所有变化?随着新的篮子被添加并且旧的篮子被移除,存在跟踪篮子的问题.我虽然一个Hierarchical Dirichlet过程隐藏马尔可夫模型(hdp-hmm)将是我需要的但不完全确定如何应用它.
(对不起,如果我听起来有点沮丧..有点难以知道问题是可解决的但是无法在概念上掌握需要做的事情).
一如既往,感谢您的时间,任何意见/建议将不胜感激.
我正在学习强化学习和阅读萨顿的大学课程.除了经典的PD,MC,TD和Q-Learning算法之外,我还在阅读有关决策问题解决的政策梯度方法和遗传算法.我之前从未有过这个主题的经验,而且我很难理解何时应该优先选择一种技术.我有一些想法,但我不确定.有人可以简单解释或告诉我一个来源,我可以找到一些应该使用某些方法的典型情况吗?据我所理解:
更准确地说,我认为选择一种学习方法,程序员应该问自己以下问题:
但我不知道问题的这些细节如何影响学习方法的选择.我希望有些程序员已经对RL方法有一些经验,可以帮助我更好地理解他们的应用程序.
algorithm artificial-intelligence machine-learning markov-chains reinforcement-learning
贪心最佳优先搜索算法是否与最佳优先搜索算法不同?
该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)