原创发表于 DavidZ Blog,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。

敬告

本博客仅供参考,请不要抄袭。

前言

这是 ANU COMP2310的第一次大作业,历时一个月左右,也是这个学期我写的最认真的一次作业,所以在博客搭建伊始,我先把这个记录下来。

问题

根据Assignment 1 PDF中的描述,大概的意思就是在三维空间中有许多的,具有速度和加速度(都是三维向量),而且不管是否加速,都会消耗一定的能量,当然加速也会加快能量的消耗。然后就是有一个或多个能量球,当然也是在运动中的,同样具有速度和加速度。当能量球靠近的时候,能够获取到能量球的信息(加速度,速度,位置),并且加满能量,而当靠近的时候,能够互相交换一次信息,这个信息的内容是自己定义的。在能量耗尽后就消失了,而我们需要做的就是在一定的时间内,保证尽可能多的存活。

分析

其实这个问题最关键的地方在于,没有一个中央的控制节点,也就是说对于每一个来说都是完全平等且独立的。所以我们需要他们能够尽可能的一直处在能够交流的状态,并且都能知道能量球在哪里。

注意
这个问题在没有中央控制时不存在最优解,我们只能无线接近最优解。
我采用的是球形模型,这个模型参考于这次作业的 Examples。
在和我的同学互相交流时,这个模型是最普遍的,解决方案是最多的,效果也是相对最好的。


球形模型设计的两大重点是:

  1. 所有的都均匀平等地分布在球面上(球面是个相对概念,可以是球壳???)。
  2. 所有的都能随时交流,也就是说大家形成一个通讯网络。

实现

注意
所有的 Ada 代码都是示意性的,有可能不能直接在项目中使用。

Stage A&B

这个阶段中,能量球只有一个,我们让所有的都围绕这个能量球运动来实现一个基本的球形模型。

基本程序结构(Basic Program Structure)

程序基本的结构是一个死循环,每次循环分为 4 个步骤:

  1. 判断能量球信息
  2. 发送信息
  3. 接受信息
  4. 设置目的地和油门

消息结构(Message Structure)

最基础的消息需要包括:

  1. 能量球的信息
  2. 获得能量球信息的时间戳

中央控制(Central Control)

允许中央控制是 Stage 1 中的条件,我在作业中跳过了这一部分,因为

  1. 在允许中央控制时,该问题存在最优解,该最优解应该是一个数学问题,对我来说难度过大。
  2. 后面的 Stage 2,3,4 均不允许中央控制。

能量球位置估计(Energy Globe Position Estimation)

这个问题类似于一个追击问题(红球是一个匀速导弹,蓝球是拦截导弹),我们需要求的是预计追击时间TeT_eTe​。

能量球到追击点PmP_mPm​,两个坐标相同,所以,

Pm=VeTtotal+PeP_m=VeT_{total}+P_e Pm​=VeTtotal​+Pe​

易得总时间,

Ttotal=Tf−Tn+TeT_{total}=T_f-T_n+T_e Ttotal​=Tf​−Tn​+Te​

通过边相等得,

Pe+(Tf−Tn+Te)Ve=VvTe+12AvTe2+PvP_e+(T_f-T_n+T_e)V_e=V_vT_e+\frac{1}{2}A_vT_e^2+P_v Pe​+(Tf​−Tn​+Te​)Ve​=Vv​Te​+21​Av​Te2​+Pv​

即可解出TeT_eTe​。

注意
存在无法追击的情况,即(Δ<0\Delta<0Δ<0),因为我们这里是严格的计算,实际上整个追击过程只有 1-2 秒,并且在不断地更新能量球的信息,所以预计的那一段时间TeT_eTe​通常可以忽略不计。但是在可以计算时,能够提供更加准确的预计到达时间,从而让能够更加精准的决策何时去充电。

充电决策(Charge Determination)

当同时满足以下两个条件时:

  1. 知道能量球的信息
  2. 的预计剩余能量小于等于警戒能量

预计剩余能量:

Left_Charge := Current_Charge - Current_Discharge_Per_Sec * Estimated_Time;

半径决策(Radius Determination)

半径向量:

Radius_Vector := Radius_Distance * Norm (Position - Vehicle_Message.EG.Position);

的位置:

Destination := Vehicle_Message.EG.Position + Radius_Vector;

其中有些变量的值或初始值是由经验确定的

  1. Radius_Distance的值是0.3,是因为多次实验发现在 64 个,128 个,256 个的情况下0.3表现均衡。
  2. Destination的初始值是(0, 0, 0),这样能够避免一开始时四散,导致失去联系,不能构成球形。

使用当前能量优化半径(Radius Optimization With Current Charge)

Radius_Vector = (0.75 + 0.25 * Current_Charge) * Radius_Vector;

0.750.25都是人为确定的,没什么依据

ANU COMP2310(2019) Assignment 1相关推荐

  1. COSC 1047 – Winter 2019 – Assignment

    COSC 1047 – Winter 2019 – Assignment 4 See D2L For Due Date This assignment is designed to give you ...

  2. CS224N 2019 Assignment 2

    Written: Understanding word2vec Let's have a quick refresher on the word2vec algorithm. The key insi ...

  3. COMP0037 Coursework Investigating Path Planning Algorithms

    COMP0037 Coursework 1 Term 2, 2019 "Path Planning in a Known World" Investigating Path Pla ...

  4. Economics 345 “Applied Econometrics”

    Department of Economics – University of Victoria Economics 345 "Applied Econometrics" (Sum ...

  5. COMP0037 Coursework

    COMP0037 Coursework 1 Term 2, 2019 "Path Planning in a Known World" Investigating Path Pla ...

  6. matlab留学生作业代做,25877留学生作业代做、代写MATLAB,R编程设计作业、代做MATLAB/R课程作业、代写portfolio作业...

    25877留学生作业代做.代写MATLAB,R编程设计作业.代做MATLAB/R课程作业.代写portfolio作业 日期:2019-06-10 09:48 Financial Markets Ins ...

  7. 2019 CS224N Assignment 1: Exploring Word Vectors

    文章目录 包的导入 Part 1: Count-Based Word Vectors Question 1.1: Implement distinct_words Question 1.2: Impl ...

  8. MATH6005 Final Assignment MATH6005 2018-19

    MATH6005 2018-19 MATH6005 Final Assignment 1. Instructions Your Assignment 3 should consist of three ...

  9. 谷歌2019博士生奖研金名单:清华、上交大、港中文入选最多

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 谷歌的博士生奖研金项目(Google Ph.D Fellowship Progra ...

最新文章

  1. 产品经理和项目经理的区别
  2. Java开源搜索引擎
  3. 几款优秀的jQuery 插件
  4. python编译原理_编译原理实战课 带你吃透编译技术核心概念与算法
  5. C语言中编译、生成、调试、运行的区别
  6. 【新书速递】你想知道的通信“灵魂三问”都在这里……(福利再现)
  7. 神经网络中常用激活函数总结【Python实现激活函数与导函数,曲线可视化分析】
  8. logback日志配置教程
  9. 自然语言处理的学习心得
  10. 京东优惠价格策略助手
  11. Atitit 三论”(系统论、控制论、信息论
  12. Android实现中英文切换
  13. 矩阵求逆 —— 初等变换法(高斯-约旦消元)
  14. 王者荣耀微信一区的服务器没了,为什么王者荣耀微信区和QQ区玩起来像两个游戏?...
  15. python-opencv下读取影像释放内存
  16. java大鱼吃小鱼实验报告摘要_java 大鱼吃小鱼游戏总结
  17. 西邮校园网路由器教程
  18. 如何高效的寻找Github项目
  19. 【GANs学习笔记】(二)GANs大家族分类
  20. mac安装使用xampp

热门文章

  1. 功率MOS管烧毁的原因(米勒效应)
  2. 读《哥德尔、艾舍尔、巴赫——集异壁之大成》
  3. 修改VMware虚拟机里面的显卡名称
  4. python如何利用scrapy爬取纵横小说三级链接内容并存储到数据库
  5. python手撸桌面计算器
  6. 淘宝 TOP 平台Open API入门篇
  7. el-table表格合并行、合并列
  8. HEVC测试序列下载
  9. Android 消息推送OnePush
  10. C 基于UDP实现一个简易的聊天室