国际象棋二年级小学生都能下,但是所有网站都没有一个练习软件。为什么,做软件的人不懂数学?

小学也玩过国际象棋,目前是OIer(信息学奥林匹克选手),所以对国际象棋和编程略知一二。下面我谈谈我的看法:

首先,国际号码棋发明较晚,目前普及率很低。有可能软件开发者并不知道这种棋的存在。

就算你想做这样一个软件,也不容易。

如果两个人在线玩,那就有问题了——玩家太少,有可能几分钟甚至几十分钟都比不上对手。

如果是人机游戏,软件制作并没有想象中那么简单,每一个小细节都完全可以出一个高质量的算法问题:

验证玩家给出的公式是否正确。这个的难度在“普及/提高-”的范围内。

(难度我真的描述不出来,只能用不同阶段算法竞赛的难度来打个比方。“普及”是指初中联赛最后两道题的难度,“提高”是指高中联赛的整体难度,“省选”是指强省选队的整体难度,“NOI”是指全国比赛的整体难度。

计算机算出了一个方程式。如果对效率的要求低,这个的难度在“普及/提高-”的范围内。但现实需要高效率。我在网上找不到解决类似问题的快速算法(通常六个数凑成1需要1秒左右,计算机做决定可能需要几千次甚至几千万次,这与搜索树的深度有关),难度可能达到“保存选择/NOI-”的难度(我不确定)。

计算机列举了每一种可能的方法。如果不判断能否算出数字,难度在“普及/提高-”的范围内。但计算机仍需尝试解出公式,难度可能达到“省略+/NOI”的难度(我不确定)。用6个数”四舍五入出1大约需要1秒,每次枚举可能需要几十秒。

电脑做决定。这个通常用MinMaxTree,因为算法竞赛基本不涉及这方面,难度难以估计。一个普通的MinMaxTree+AlphaBeta优化应该是“提高+/省略-”难度。电脑的“力度”和树的深度有关。随着深度的增加,“力度”会增加,但运算量会成倍增加。如果说计算机的决策是要有一点水平的话,我感觉(毕竟没试过,只能靠感觉)一台普通的计算机在春晚开始前就开始计算了,唱不完《难忘今宵》。(这个估计是基于前面提到的“六个数凑成1大约需要1秒”的算法。

为了提高效率,有必要改进算法——要么改进算法来解出方程,要么改变计算机的决策方式。第一种比较好,主要是拼脑子;第二种涉及到更高层次上的一些人工智能相关的算法。虽然游戏中的计算量不是很大,效果也很好,但是训练过程中的计算量却很大,几乎相当于拿一整个机房来训练(但是训练是一次性的,训练时间可长可短,训练时间越长效果越好)。作为一个OIer,当然对人工智能领域一无所知,不敢再展开。

综上所述,开发一款国际象棋游戏,涉及到很多复杂的算法,开发出来的市场很小。不如把其他棋牌游戏做得简单方便快捷,玩的人多。