當前位置:編程學習大全網 - 編程語言 - 國際數棋,二年級的小學生就能下,但是所有網站卻沒有壹個練習軟件,這是為什麽,做軟件的人不懂數學?

國際數棋,二年級的小學生就能下,但是所有網站卻沒有壹個練習軟件,這是為什麽,做軟件的人不懂數學?

我小學時也下過國際數棋,目前是壹名OIer(信息學競賽選手),所以對於國際數棋以及編程兩方面都略知壹二,下面說壹下我的看法:

首先,國際數棋發明時間較晚,目前普及率很低,有可能軟件開發方都不知道這種棋類的存在。

就算要做壹個這樣的軟件,也不簡單。

假如是兩名玩家在線對弈,有壹個問題就是——玩家太少,有可能幾分鐘甚至幾十分鐘都匹配不到對手。

假如是人機對弈,在軟件制作上也沒有想象的那麽簡單,每壹個小的細節都完全可以出壹道高質量的算法題:

驗證玩家給出的算式是否正確。這個的難度在“普及/提高-”的範圍之內。

(我實在不好描述難度,只能用不同階段算法競賽的難度來類比。“普及”指初中聯賽後兩題的難度,“提高”指高中聯賽的總體難度,“省選”指強省省隊選拔的總體難度,“NOI”是全國競賽的總體難度)

電腦湊出壹個算式。假如對於效率要求較低,這個的難度在“普及/提高-”的範圍之內。但是現實情況是需要較高的效率的,我在網上找不到解決類似問題的較快的算法(通常6個數湊出1個數要1秒左右,而電腦做出壹步決定可能要湊上千甚至上千萬次,這與搜索樹的深度有關),難度可能達到“省選/NOI-”的難度(我也不敢確定)。

電腦枚舉每壹種可能的走法。假如不判斷是否可以湊出數來這個難度在“普及/提高-”的範圍之內。但是電腦還需要嘗試湊出算式,難度可能達到“省選+/NOI”的難度(我也不敢確定)。以6個數湊出1個數要1秒左右”的算法,每枚舉壹次就可能需要幾十秒。

電腦做出決策。這個通常是使用MinMaxTree,由於算法競賽基本不會涉及這方面,難度不好估計,壹個普通的MinMaxTree+AlphaBeta優化應該是“提高+/省選-”的難度。電腦的“實力”與樹的深度有關,深度增加“實力”就提高,但是運算量會指數級地上升。假如電腦的決策要有壹點水平,我感覺(畢竟沒試過,只能靠感覺)壹臺普通的電腦在春晚開始前開始運算,唱完《難忘今宵》都算不完。(這個估計是以前面提到的“6個數湊出1個數要1秒左右”的算法為標準的)。

為了增加效率,就必須改良算法——要麽改良湊出壹個算式的算法,要麽改變電腦做決定的方式。第壹種還好壹些,主要是拼腦力;而第二種就要涉及到更高大上的壹些人工智能相關的算法,盡管在遊戲時運算量不會很大且出來的效果很好,但是訓練過程中的計算量很大,拿壹整個機房的電腦訓練差不多吧(不過訓練是壹次性的,並且訓練時間可長可短,訓練越久效果越好)。作為壹名OIer,當然是對人工智能領域壹竅不通的,我就不敢再展開了。

綜上所述,開發壹個國際數棋的遊戲所涉及的算法很多、很繁雜,開發出來市場也很小,還不如做別的棋類遊戲來的簡單方便快捷,玩的人也很多。

  • 上一篇:科學家發明時遇險的故事
  • 下一篇:職場中的局部最大值
  • copyright 2024編程學習大全網