全局控制程度
全局控制程度與難度分有著密切的關係。
黑色圓框+綠色圓框=黑方的難度分/(黑方的難度分+白方的難度分)x100%
紅色圓框+白色圓框=白色的難度分/(黑方的難度分+白方的難度分)x100%
難度分是根據AI的一選推薦而計算,而全局控制程度就是根據自己每一手棋的POLICY的滿意度而計算。假設AI一選位置的POLICY為0.2,而自己下的位置的POLICY為0.1,則在這一手中只能獲得0.5分。而如果自己下的位置的POLICY高於一選位置的POLICY,或直接下出一選,則該手數會獲得滿分。
因此,綠色部分是黑方的不滿意度,紅色部分是白方的不滿意度。
如圖,雙方的不滿意度十分接近,但黑方的全局控制程度達到43.3%,是屬於給予了對手很大難度,同時自身與AI有著接近思想和方向的表現。
評級系統
以3大統計指標(POL,CAL,DIR)為分數核心,並配合雙方難度分,全局激烈對抗指數,全局控制程度,於指定手數前的目差標準差最大值及指定手數前的最大目數跌幅計算出該對局中對局者的水準發揮。
注意:評級只是用作簡單檢視單一對局的水準作出評定。
在評級系統中,激烈對抗指數會影響5大統計指標的計算方式。當激烈對抗指數越高時,每個命中或失誤被分配較高的權重。對於毫無激烈對抗或局面變化細的情況,比如對弈中段,一方犯下大錯,從而出現一面倒的情況,導致棋局進入所謂的垃圾時間,那麽後續時間的命中或失誤的影響相對較不重要,因此分配更低的分數。
int weight = 1;
if (nodeEntropy > 20) {
weight = 9;
} else if (nodeEntropy > 14) {
weight = 7;
} else if (nodeEntropy > 6) {
weight = 5;
} else if (nodeEntropy > 3) {
weight = 3;
}
交換神器
在實戰中,判斷每2手棋的交換是賺還是虧是非常重要。盡管AI無法給出交換後賺或虧的原因,但通過快捷鍵來快速切換交換前後的局面,以及提供交換前後的目數改變,可以顯著提升用家對交換的感覺和理解。
首先,快捷鍵“1”,“2”,“3”,“4”,“5”可以調整顯示最後的n手棋。
舉例,如果棋盤現在是顯示過去2手棋,如果我們想改爲顯示過去4手棋,那麽按一次“4”就可以改變了。
當畫面上已經顯示了你想要的手數後,假設為2手。那麽現在再按一次“2”,便會跳到2步之前的畫面,同時隱藏手數及目數改變,以清晰表示這是原先的畫面。
當我們看到原先的畫面後,現在只需要再按一次“2”,就會跳回交換後的畫面,此時手數及交換後的目數變化亦會顯示。
在同一個局面中,我們可以多次重複以上動作,慢慢感受交換後所帶來的改變,到底是好還是壞,或者是變化不大。而這正正是很多人忽略用AI學棋的一個重要方法。
多種已排版的視窗比例
在任何比例的視窗環境中,我們都精心設計了最適合的佈局,讓您盡享最佳圍棋體驗。
無論您使用的場景是寬比例、窄比例,我們的介面都能完美適應,為您提供清晰的資訊。
ratio = (widthwidth / heightheight) * 1000;
if (ratio >= 2000) {......}
else if (ratio >= 1880 && ratio < 2000) {......}
else if (ratio >= 1800 && ratio < 1880) {......}
else if (ratio >= 1740 && ratio < 1800) {......}
else if (ratio >= 1400 && ratio < 1550) {......}
else if (ratio >= 1250 && ratio < 1400) {......}
else if (ratio >= 1000 && ratio < 1250) {......}
else if (ratio >= 880 && ratio < 1000) {......}
else if (ratio >= 820 && ratio < 880) {......}
else if (ratio >= 745 && ratio < 820) {......}
else if (ratio >= 670 && ratio < 745) {......}
else if (ratio < 670) {......}
先快後慢刷新率
在絕大部分改變棋盤狀況的操作下均會執行autorefreshrate(),
提供一個更即時又舒服的使用體驗。
public void autorefreshrate() {
yspro.wannabe.sendCommand("kata-analyze 1 ownership true");
Timer timer = new Timer();
timer.schedule(
new TimerTask() {
public void run() {
yspro.wannabe.sendCommand("kata-analyze 5 ownership true");
}
},
100);
Timer timer2 = new Timer();
timer2.schedule(
new TimerTask() {
public void run() {
yspro.wannabe.sendCommand("kata-analyze 10 ownership true");
}
},
1000);
isRedo = false;
}