WE2009底层结构说明书 王宇航 yuhangw@mail.ustc.edu.cn.

Slides:



Advertisements
Similar presentations
19 《山岳的形成》. 褶皱山 常见形态:连绵的山体 代表:喜马拉雅山脉、阿尔卑斯山脉、 安第斯山脉.
Advertisements

電機電子群 培養學生具備電機與電子群共同核心能力,使具備電機與電子領域有關操作、維修、測試、應用等實用專 業技能。並為相關專業領域之學習或高一層級專業知能之進修奠定基礎。
當我已老 謹以此文獻給像我一樣流浪在外的子女們.
导 师:刘恒洋 答辩人:毛国平 专 业:计算机科学与技术
第12章 网络营销实施与控制.
近年来,出现了一些制作粗糙、违背史实甚至常理的“抗战雷剧”,社会上也出现了一股“戏说”抗战剧的不良风气。
2015年12月14日-2015年12月20日 缩略版.
指導老師:羅夏美 組別:第四組 組員: 車輛二甲 蔡中銘 車輛三甲 莊鵬彥 國企二甲 陳于甄 國企二甲 詹雯晴 資傳二乙 林怡芳
计算机网络高级工 梁绍宇.
21世纪全国高职高专 计算机系列实用规划教材 计算机网络技术基础 主 编: 杨瑞良 李 平 副主编: 邱 涛 李明龙.
公共部门人力资源管理课程导学 学习本课程的三步 3、利用网络 2、掌握方法 1、了解课程.
2.4 计算机网络基础 什么是计算机网络? 计算机网络有哪些功能? 计算机网络的发展历史? 计算机网络体系结构的内容? 计算机网络如何分类?
第1章 拒絕誘惑 <致命的吸引力>   全世界每十秒鐘,就有一人死於吸菸,大多數吸菸者是在青少年時期開始吸菸,在染上菸癮後就很難戒掉,有些人的菸齡會長達二十年以上。這些癮君子比不吸菸者平均約減少十年壽命。 「菸」是需強制標示有傷害身心警語的商品。
統昶行銷 碩士班儲備幹部培訓合作說明 報告者:資源整合部 蔡水上.
第七章 Internet 基础与应用 第一节 主机名字与域名服务 第二节 Internet的域名体系 第三节 主机名字的书写方法
目录 About Us Honors Team Resources Client 关于我们 荣和荣誉 荣和团队 荣和资源 荣和客户
網路犯罪 組別:第5組 組員:卓岳正,連樹勛,劉洛翔,劉博文,蔡宗憲,吳柏錞,程聖發 組長:卓岳正
我國公路事務的垂直分權設計 期末報告 湯儒彥 民國95年1月13日 交通部運輸研究所.
中学生社会适应问题及其调适.
审计案例研究 第一讲 辅导教师 周桂芝.
浪漫 碰撞 蜕变 专题八 19世纪以来的文学艺术.
德国波恩明斯特广场修建的贝多芬铜像( 1845年)
便利商店人員工作注意事項 成功工商建教組.
二十世纪外国文学专题 章丘电大 李颜.
思想品德 七年级(下册) 广东教育出版社.
有效的讀書方法 蔡彥欣 博士 鄭建立 整理.
EF少儿英语学习研究报告(北京).
自 然 探 索 圓周美語 My name is.
我們通常都會稱自己為香港人?還是中國人? 為甚麼回歸了,人們口頭上不說是中國人,而是香港人呢?
“网络问政”给九江新闻网 带来新的发展机遇 -- 九江新闻网 高立东 --.
第1章 概述.
第一篇 生命科学 第2课时 细胞.
樹人醫專 暑假原住民夏令營.
大众传播媒介的变迁 课标:了解报刊,影视发展的基本史实;了解近代不同时期具有代表性的报刊,及其对中国社会发展所起的作用;了解影视业发展的标志性事件,互联网逐渐普及的基本史实,及给人们生活方式带来的影响,认识大众传媒的力量。
领导力 和 团队建设.
网络游戏对大学生生活的影响 英本1班 鞠申镅 汪晨茹 沈秋云 元文杰 段祺琪.
----银行间的比较 论资本构成与充足率 淡 彩 的 黑 板 淡 彩 的 黑 板 金融73班 王艺霏 王 英
二十四節氣的飲食 HaPPy TeaM 林品卉 王佩鈴 王浩倫.
社会工作概论 个案工作 课程培训 深圳电大 赖小乐.
第四章 网络营销战略 战略计划是企业的生命线,是企业一切工作都必须遵循的总纲。我们经常说,做对的事情比把事情做对更重要,就是这个道理。美国一位总裁曾说:每天我总要花部分时间来思考的事情是企业未来10年的事情。在日本的一次调研中,90%的企业家认为:最占 时间、最为重要、最为困难的事情就是制定战略计划。可见,企业需要战略,没有战略计划指导的企业是很容易迷路的,迷了路的企业很难不误入歧途,误入歧途的企业,失败则是必然的。
大 纲 一、备案系统数据迁移方案 二、备案系统过程数据处理方案 三、备案系统内存量数据核验方案 四、新备案系统信息真实性核验方案※
省外实习分享报告会 深圳 上海.
北京汉邦高科数字技术股份有限公司 2015年年报交流.
面对经济全球化.
前言.
作文《适合就好》讲评.
這樣做 便便天天順.
海珠区第二次全国经济普查服务业培训 二〇〇八年十二月二十三日.
計中「多媒體與網路應用」短期訓練課程 FTP server 架設 (in Windows)
IPV6 DHCP Server 建置 陳家祿 楊世偉.
網路安全技術期末報告 Proxy Server
第 3 章 熟悉 SQL Server 的工作平台.
第 7 章 陣列 (Array).
Bigpipe 简化HTTP异步调用.
『四四角角,穩篤篤!』 四度空間靈性牧會與教會成長 右昌長老教會 陳見岳牧師.
Web Server 王宏瑾.
史忠植 王嘉 董明楷 张海俊 智能信息处理实验室 中国科学院计算技术研究所
如何將臺大圖書館館藏目錄 加入Connection File
课程建设汇报 方宝富 合肥工业大学
新地義工Team力量 新地致富兒童成長嚮導計劃
講員:游文志 排程系統教育訓練 後台管理系統 講員:游文志
目次检索 打印 下载 文字摘录 更换背景 多窗口阅读.
第三章 安裝 SQL Server 資料庫環境.
Dubbo介绍 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成.
超星电子图书.
指導老師:王偉德 老師 學生:賴政揚 林怡君 戴明宏
香港大學出版社電子書 操作手冊.
劉庠宏、林合治編著 國立高雄大學應用數學系 2005年3月1日
§2.2.1对数与对数运算.
「高級中等學校學生學習歷程資料庫」與學校自行建置 「校內學生學習歷程檔案紀錄模組」 資料串接全國說明會
Presentation transcript:

WE2009底层结构说明书 王宇航 yuhangw@mail.ustc.edu.cn

行为决策流程 普通球员这里主要返回行为(6种基本动作之一)。也可以返回 视觉或通讯决策。裁判主要作出通讯决策。 main()[main.cpp] 行为决策流程 Client::RunNormal()[Client.cpp] Client::MainLoop()[Client.cpp] Player::Run ()[Player.cpp] Coach::Run()[Coach.cpp] DecisionTree::Decision()[DecisionTree.cpp] DecisionTree::Search()[DecisionTree.cpp Coach::DoDecisionMaking()[Coach.cpp] 普通球员这里主要返回行为(6种基本动作之一)。也可以返回 视觉或通讯决策。裁判主要作出通讯决策。

视觉决策部分 视觉决策可以贯穿整个行为决策始终, 也可以单独建立一个文件来处理。 09Base中视觉决策为Player::Run()中 执行DecisionTree::Decision()后面的一 段代码。 相信打过CS的同学知道看不到对手位置的后果……

听觉处理接口 听觉信息的更新为 CommunicateSystem::Update() [CommunicateSystem.cpp] 代码中预留了几个空函数,仅做参考。大家可以根据自己球队的情况修改。 通讯部分虽然也很重要,不过如果没有精力处理,可以暂不考虑。 (一个良好的通讯系统是对有限视觉与感知的最佳扩充)

介绍一些常用类 PlayerState:[PlayerState.h]中定义 从属关系不再熬述,大家可以查看代码。一般的IDE都有很好的追踪能力。 该类为球员状态的虚拟,其中包括球员位置,速度,身体方向,脖子角度等信息。 WorldState:[WorldState.h]中定义 该类中包含server中的球、球员模型, 以及server发来的一些客观赛场信息如特殊模式,比赛时间等。 (这里客观表述比较含糊,而且事实上信息的分类 也很难使它们有明显的区分度,在这里找不到的信息,尝试到其他地方找找看吧)

Agent:[Agent.h]中定义 该类可理解为是对一个Client功能的虚拟。类中包含基本的 收发信息接口。函数名与功能是相关联的,大家查看代码应 该不难理解作用。 下面举个例子,比如在Agent作用域内增加代码: mAgent.Turn(90); 那么当程序运行到该处时,会拟定一条发给server的指令, 作用是右转90度。而何时如何发送,我们暂不关心。 而惯性的影响已在底层部分处理,所以这里可以直接传入 我们需要球员实际相对自身转动的角度。

Strategy:[Strategy.h]中定义 该类中含有一些通过简单计算后得到的(可能)常用的量。如谁是最快拿到球的队友、自己的截球点在哪等。不过请 大家不要过分依赖这些量,比如当你觉得这个类中提供的 信息已影响到部分决策判断时,不妨自己写些函数来算这 些量。 PositionInfo:[PositionInfo.h]中定义 该类中主要包含与位置相关的信息,如球员相对身体的角 度、球距某球员的距离等。

介绍一些常用的工具函数位置 较为常用的工具函数主要在Geometry和Utilities两个 文件中。例如对一个角度的标准化(把720度变换为0度)、 求某条直线与射线的交点等。 其中Geometry中的函数主要处理平面几何问题。 这里额外解释一个从名字不大容易猜出功能的函数 Line::GetProjectPoint,该函数传入一个点,返回直线上 距该点最近的点。

实例 下面结合一些例子来说明球队运作的整套流程。 下面举的例子将较为详细,主要目的是为大家回去后提 供些可能的帮助,在这里只做些口头的简要说明。 下面的流程可以在单步调试过程中慢慢熟悉。

我们从main()函数开始。 WE2009_Base的命令行参数: -team_name “队名” –host “server IP” Enter/–goalie on/-coach on 比如在WE2009_Base的binary目录下输入: ./WE2009_Base –team name “WE2009_E630” -host 192.168. 26.160 那么这个Client就会连接IP为192.168.26.160机器的server,通过 Logplayer看到的队名为WE2009_E630 如果在上述命令后面再加参数-goalie on,那么上场的这个队员将 成为守门员。 上述命令每执行一次只能使一个Client连接到server,如果要上 整支球队,需要启动12次。自动上队可以通过脚本来完成, WE2009_Base中已附带脚本,输入./startWE2009.sh即可。

接下来我们以一个球员自己为例。 进入main函数后,会陆续执行下面的代码。 其中, RegisterSignalHandler()函数为报错函数, 用于校验错误,大家可不必 理会。 而后的ServerParam::instance().init(argc, argv) 与PlayerParam::instance().init(argc, argv)是一些常量的 初始化。如球场宽度,球的最大速度,球员异构信息等。 下面我们可以直接看Player::Run()这个函数,在到它之前 的过程中程序在忙于等待server响应,回复server响应, 初始化一些类,根据server信息进行模型更新等准备工作。

随后我们可以直接看mpDecisionTree->Decision(*mpAgent) 这段代码。它前面的代码执行的是在比赛过程中对球场信息 队友信息的更新。该函数会执行至ActiveBehavior beh = Search(agent, 1),其中Search函数用来选取要执行的行为, 需要说的是,Search函数中使用了模版,大家如果理解起来 有困难,直接看MutexPlan的定义,后面尖括号内是哪个类, 就在MutexPlan中执行这个类的Plan()函数。执行过后传回的 是active_behavior_list。 而后回到DecisionTree::Decision(Agent & agent)函数, 执行return beh.Execute()。这里等于执行了behavior_list里面 第一个位置ActiveBehavior中BehaviorType对应的Behavior类 下的Execute()函数。

mpDecisionTree->Decision(*mpAgent)结束后, 执行至CommunicateSystem::instance().Decision(),该函数目 前为一空壳,(CommunicateSystem 类中的 ParseReceivedTeammateMsg(char *msg) 与ParseReceivedOurCoachMsg(char *msg)负责获取server 发来的通讯信息(say)。大家可以通过在这个类中增加 HearMessage类型的参数来保存信息。这些信息可以通过 WorldState::GetHearMessage()函数获得该类的实例来使用。 这里对信息的更新是CommunicateSystem::instance().Update() 函数实现的,该函数出现在Player::Run()函数前面几行) WE2009_Base中接下来是一个简单的视觉决策,最后记log并 向server发送命令。 本周期决策结束后,等待下周期的新视觉, 继续执行Client::MainLoop()中的while循环体。

附一:教练 Coach::Run()中首先进行更新, 随后执行DoDecisionMaking()函数。 WE2009_Base中教练为空壳,其中不做出任何决策。 教练信息获取自Observer,对球场的影响主要表现在与 球员间的通讯。 参考:教练可以统计几乎绝对准确的信息。

附二:异构 分异构由教练在上场时完成,执行部分在 Coach.cpp中Coach::SendOptionToServer()函数内。 其中, mpAgent->ChangePlayerType(i, j)函数 表示将i号球员分配为j(ID)异构。 参考:异构相克,很可能比水火相克来得厉害。

附三:几点说明 有关阵型的部分代码在Formation.cpp中, 由函数TeammateFormation::InitFormationInfo()配置。 有些文件中的函数较为繁杂(如Formation),大家参考使用。 对于底层代码中的注释,不可盲从,其中有部分注释存在问题。 未能及时整理,非常抱歉。 大部分函数的作用,要靠自己读代码来了解。 文件和类是可以创建和删除的,良好的代码风格是好习惯。 打击盗版,鼓励原创。