chriscca 发表于 2016-12-9 22:15:04

探討一下如何讓AI判斷自己在TEAM中處於邊界

正常情況下對手都會進攻邊界的隊友
所以邊界的隊友其實更適合及早進行防守而不是直城
我希望能讓AI處於邊界時(判斷自己位於邊界時)及早進行防守
而處於內部的其他隊友AI可以考慮直城
地圖版圖大一點使用ENEMY BUILDING IN TOWN似乎沒甚麼意義

狂~劇情狂 发表于 2016-12-9 23:01:41

AI玩家之間無法交流, 感覺很難, 特別是不同地圖各玩家城鎮中心距離可以相差很遠, 更不用說多TC或無TC的情況了

不過針對官方地圖倒是有可能

chriscca 发表于 2016-12-9 23:39:56

目前構想的一個臨時性方法是

在特定時間內(例如封建時代)
模仿TSA 進行TOWN-SIZE擴大
根據地圖尺寸擴大的數值不一樣,例如只擴大30
如果在30點內檢測到敵方建築就判斷自己是處於邊界
此時按實際情況取消直城,轉為封建防守

狂~劇情狂 发表于 2016-12-10 01:32:47

這樣不算是好方法, 特別是對方中路前置軍事建築時肯定會誤判

mxzwt2 发表于 2016-12-10 13:05:19

这个很好办,先输入自己和盟友的城镇中心坐标然后两两计算距离,距离最长的两个为边

chriscca 发表于 2016-12-10 13:44:04

樓上的兄弟說法是有用
可惜只適用於高階的USERPATCH
HD版並不支援 座標的功能

狂~劇情狂 发表于 2016-12-10 19:34:26

五樓的說法UP也做不到,我在二樓已經說了不同玩家之間的goal無法直接進行比較

交流基本必須透過up-chat-data-to-player 再窮舉各距離的 taunt-detected

mxzwt2 发表于 2016-12-11 11:48:36

狂~劇情狂 发表于 2016-12-10 19:34
五樓的說法UP也做不到,我在二樓已經說了不同玩家之間的goal無法直接進行比較

交流基本必須透過up-chat- ...

可以获得坐标点位置的不信我写给你看
(defconst gl-point-x 100)
(defconst gl-point-y 101)

(defrule
       (true)
      
=>
      (set-strategic-number sn-focus-player-number 2)
)
(defrule
   (up-find-remote c: 109 c: 1)
=>
   (up-set-target-object 1 c: 0)
   (up-get-point position-object gl-point-x)
)
   

mxzwt2 发表于 2016-12-11 11:55:46

狂~劇情狂 发表于 2016-12-10 19:34
五樓的說法UP也做不到,我在二樓已經說了不同玩家之間的goal無法直接進行比較

交流基本必須透過up-chat- ...

坐标都弄成两个独立的变量了还不能比较吗

狂~劇情狂 发表于 2016-12-11 17:27:25

這裡再說一次:不同玩家之間的 goal (變量)沒法直接比較,重點根本不是能否獲取坐標,這論壇上與 UP 相關的 AI 有一半是我擴寫或漢化的,請你別再班門弄斧了。

先討論你所說的計算「自己和盟友的城镇中心」坐標和距離的方法,假設一隊有四個玩家 A 、B 、C、D 依序排列, A 與 D 在邊界,你確實可以用一個玩家的 goal 檢測 A 與其他玩家之間的距離誰最長,玩家 A 知道自己與 D 之間距離最長,玩家 B 知道自己與玩家 D 之間距離最長,玩家 C 知道自己與玩家 A 之間距離最長,玩家 D 知道自己與玩家 A 之間距離最長。但之後又如何?四名玩家彼此之間仍然必須設法透過 taunt 或其他方法來交流確切距離,才能肯定哪一玩家是邊界。

相比之下,單純計算各同隊玩家城鎮中心(而非限於自己和間友之間)距離會更有效,但是仍有一些問題:一來 up-compare-goal 僅用於兩個指定變量之間的比較,在同隊玩家數量不可知的情況下,實際操作將需要複雜的規則代碼;二來佔用 goal 的位置會太多,為了確保代碼執行起碼要八名玩家 TC 之間距離加坐標的儲存位置;三來一些自訂地圖會將同隊玩家均距分佈,此情況下透過 TC 距離計算反而可能誤判戰術。

另外計算 TC 距離此一作法的其他破綻在上面我也提過了: up-find-remote 要求玩家視野先看到對方的物件,並且不能預估建造中的位置,因此不太適用於開局無 TC 的地圖;而多 TC 的情況也會因為無法確定單一 TC 而出現誤判。

關於計算單位距離,參見https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=118721及https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=136622

最後補充一下, up-compare-goal 可以用於 HD 版 AI 。

mxzwt2 发表于 2016-12-11 18:33:27

狂~劇情狂 发表于 2016-12-11 17:27
這裡再說一次:不同玩家之間的 goal (變量)沒法直接比較,重點根本不是能否獲取坐標,這論壇上與 UP 相關 ...

为什么必须要看到,探索到的就不行吗

mxzwt2 发表于 2016-12-11 18:37:12

狂~劇情狂 发表于 2016-12-11 17:27
這裡再說一次:不同玩家之間的 goal (變量)沒法直接比較,重點根本不是能否獲取坐標,這論壇上與 UP 相關 ...

楼主所说的做边当然是那种规规矩矩的竞赛似的地图,那些不规矩的地图又何来做边一说,ai当然能知道自己是什么样的地图了,只要通过检测系统定义的常数就知道了,再说难道电脑还不能通过检测系统常数知道自己到底有几个同盟吗

mxzwt2 发表于 2016-12-11 18:39:57

本帖最后由 mxzwt2 于 2016-12-11 18:42 编辑

狂~劇情狂 发表于 2016-12-11 17:27
這裡再說一次:不同玩家之間的 goal (變量)沒法直接比較,重點根本不是能否獲取坐標,這論壇上與 UP 相關 ...
再说,如果up-find-remote真的只能找到视野看到的,而不能检测到已经探索到的建筑物,那ai代码要这个动作有什么用,敌人的一切都检测不到了

狂~劇情狂 发表于 2016-12-11 19:46:51

o

你先學好基本的設計原理:一個好的 AI 設計是不應該作弊的,而檢測視野可見以外的物件就是作弊的一種, UP AI 之前官方 AI 就已經透過 cc-players-building/unit-count 及 players-building/unit-type-count 兩種事實區分了視野可見與不可見,過去一些 AI 腳本設計比賽甚至特別明文禁止 cc- 系列代碼。當然,從你在其他帖子的提問(如https://www.hawkaoe.net/bbs/thread-138532-1-1.html),可以看出你連官方教程都沒細看。

接著,你上面的代碼也有大量錯誤,例如 up-find-remote 在你的寫法下單獨作為事實不會觸發、up-set-target-object 給出 1 代表 search-local 而非 search-remote (2) ,up-get-point 的 position-object (12) 並非系統定義常數而會報錯,此外搜索前應先執行 up-reset-filters 、 up-reset-search 否則很有可能查找不到。

還有,你在十一樓與十三樓所說代表你根本沒理解 up-find-remote 背後原理,開局視野「看到」與「探索到」對於 AI 玩家是一樣的(我說不適用於無 TC 地圖的原因也與這點沒有關連),這裡需要分開同盟、敵對物件加以說明:


[*]雖然 Userpatch 相關文件與一些發展 AI 設計者聲稱同盟單位物件列入 up-find-remote 的判定條件受 AI 玩家視野影響,但實際它是基於 AI 玩家本身的外交態度是否視對方為同盟來決定,並且無視對方是否亦為盟友(它在對局執行上與受玩家視野影響差別確實不大,這點只考慮打局發展的設計者是較難發現的,但戰役 AI 作者就會知道它探索同盟物件並不需要製圖學科技或雙方互為盟友)。
[*]至於敵對單位方面,或者嚴格來說是被 AI 玩家視為敵對的物件(就算對方是盟友),則是 AI 玩家看過一次就會加入搜索範圍,這點與非 cc- 系列事實是相同的,同時也要注意間諜科技不能克服此一限制。

至於多 TC 與無 TC 兩種設定都有出現在 ES 官方設計的地圖,而現在國外流行用於比賽對戰的 MegaRandom 等自訂地圖亦有出現這兩種設定及均距開局。



AI2015 发表于 2016-12-11 22:32:40

话说UP不是能定义坐中吗?#load-if-defined UP-POCKET-POSITION

还有mxzwt2 你上个帖子关了 但是我得说taunt-detected my-player-number亲测有效 请不要乱下“根本检测不到”这样的评论噢

狂~劇情狂 发表于 2016-12-11 22:59:52

AI2015 发表于 2016-12-11 22:32
话说UP不是能定义坐中吗?#load-if-defined UP-POCKET-POSITION

还有mxzwt2 你上个帖子关了 但是我得说t ...
完全忘了這個,確實反向思考不在中路就是邊界,而且 HD 版也能使用,那用load-if-not-defined就行了……

mxzwt2 发表于 2016-12-12 11:47:10

AI2015 发表于 2016-12-11 22:32
话说UP不是能定义坐中吗?#load-if-defined UP-POCKET-POSITION

还有mxzwt2 你上个帖子关了 但是我得说t ...

为什么用(taunt-detected my-player-number 1)就有效,我用(taunt-detected 1 1)就没有效呢

AI2015 发表于 2016-12-12 13:11:12

狂~劇情狂 发表于 2016-12-11 22:59
完全忘了這個,確實反向思考不在中路就是邊界,而且 HD 版也能使用,那用load-if-not-defined就行了……

嗯嗯 之前测试多人局 发现新ai总是坐边打封快 坐中直城 因此特地留意了下2333

AI2015 发表于 2016-12-12 13:12:10

mxzwt2 发表于 2016-12-12 11:47
为什么用(taunt-detected my-player-number 1)就有效,我用(taunt-detected 1 1)就没有效呢

这个。。不太了解啊

chriscca 发表于 2016-12-12 16:13:35

UP-POCKET-POSITION 這個不太理解
請各位前輩多說明一下這個
页: [1] 2
查看完整版本: 探討一下如何讓AI判斷自己在TEAM中處於邊界