Loren关于MATLAB的艺术

将想法转化为MATLAB

如何赢得所有的大理石在曼卡拉你的第一步,与MATLAB!

今天的客座博主是Anoush Najarian,他在MathWorks领导MATLAB性能团队。虽然她主要致力于帮助MATLAB快速运行,但在她的业余时间,她喜欢使用MATLAB进行机器人、数学和游戏方面的业余项目。

内容

赢在Mancala

让我告诉你当我厌倦了失败时发生了什么Mancala他决定写一些MATLAB代码来播放它。感谢我六年级的女儿娜塔莉,是她把我介绍给了这个游戏,并让我成为了这个实验的伙伴。

规则

现在,在曼卡拉家族里有很多玩游戏的方式。我们编写代码的规则集是:你从任何一个洞里捡石头,然后以逆时针的方式绕着木板转,每次扔一个石头,当你穿过它时,扔一个石头到你的家里。如果你把最后一块石头扔到家里,你就可以“免费”一次。如果你把最后一块石头扔进一个非空的洞里,你就可以继续我所说的“自动”移动,从洞里捡起所有的石头。在最初的位置,每个洞有四个石头。

是否存在第一玩家优势?(当然!)

你知道有些游戏有第一玩家优势吗?结果是,在Mancala,你不仅可以找到一种方法赢得(这很好),而且可以赢得所有的弹珠(太棒了),并且在你的第一步就做到了!

%这里是需要查找的驱动程序代码(众多驱动程序之一!)%所有48个弹珠先下手为强的解决方案,在我的游戏中运行20秒左右金宝搏官方网站%的笔记本电脑!Gametrees = {0 [4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4] []};nummoves = 0;Nummoves < 50个新游戏树= {};L =大小(游戏树,1);[maxscore, ind] = max(cell2mat(gametrees(:, 1)));[totalscore, board, winningstreak] = gametrees{ind,:};%显示一个最高得分条目g = 1:L [totalscore, board, winningstreak] = gametrees{g,:};t = 1:12如果董事会(t) = = 0,继续结束[score, freemove, newboard] = mancalafirstmove (t, board);如果freemove如果Nummoves <9 || totalscore + score > maxscore * 0.75%优化来修剪搜索树Newwinningstreak = [winningstreak, t];新游戏树(结束+1,:)= {totalscore+score, newboard, newwinningstreak};结束结束如果总分数+分数== 48 disp(“找到了48颗获胜弹珠!”);disp (newwinningstreak);返回结束结束结束gametrees = newgametrees;Nummoves = Nummoves + 1;结束%驱动程序代码调用了一个move函数,这个函数将通过'automatic'运行%递归地移动。我们的代码生成了一个长达30步的游戏序列%在你的第一步就横扫48个弹珠获胜!函数[score, freemove, board] = mancalafirstmove (pick, board) score = 0;移动=眼(12);pickspot = apick;freemove = mancalamove (pickspot);函数numpieces = board(pickspot);委员会(pickspot) = 0;addeach = move (pickspot,:);获得=地板((numpieces-pickspot) / 12) + 1;分数=分数+收益;freeremove = (pickspot == mod(numpieces, 12));Numpieces = Numpieces -增益;I =1:numpieces board = circshift(addeach, -1* I) + board;结束如果(not(fremove)) newpickspot = mod(pickspot-numpieces, 12);如果newpickspot = = 0, newpickspot = 12;结束如果棋盘(newpickspot) > 1 freemove = mancalamove(newpickspot);结束结束结束结束
发现48颗弹珠获胜序列!列1 ~ 13 8 5 4 2 9 5 7 11 9 5 3 9 5 5 14 ~ 26列12 1 12 1 10 13 1 8 1 6 1列27 ~ 30 4 12 1

让第一步之战结束吧!

选择规则集

其他一些Mancala规则包括:没有“自由”移动,没有“自动”移动,只从你坐在旁边的板的一边挑选,不同数量的洞,弹珠!

例如,假设允许“自动”移动和自由移动,但你只能将其放置在棋盘的自己一侧。然后你仍然可以在你的第一步就获得一个令人印象深刻的42颗弹珠!第18行驱动代码的微小变化(循环1:6而不是1:12)将为您提供用于这种变化的播放序列!

接下来是什么?

我们真正想做的是使用游戏代码来训练AI。我们最近看了一些激动人心的视频,比如深度学习的11行MATLAB代码他们渴望在游戏中尝试深度强化学习。

让我们知道你在编程和建模游戏方面的经验在这里




MATLAB®R2017a发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里以登录您的MathWorks帐户或创建一个新的帐户。