ANU COMP2310(2019) Assignment 1
原创发表于 DavidZ Blog,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
敬告
本博客仅供参考,请不要抄袭。
前言
这是 ANU COMP2310的第一次大作业,历时一个月左右,也是这个学期我写的最认真的一次作业,所以在博客搭建伊始,我先把这个记录下来。
问题
根据Assignment 1 PDF中的描述,大概的意思就是在三维空间中有许多的车
,具有速度和加速度(都是三维向量),而且不管是否加速,都会消耗一定的能量,当然加速也会加快能量的消耗。然后就是有一个或多个能量球
,当然也是在运动中的,同样具有速度和加速度。当车
和能量球
靠近的时候,车
能够获取到能量球
的信息(加速度,速度,位置),并且加满能量,而当车
与车
靠近的时候,能够互相交换一次信息,这个信息的内容是自己定义的。车
在能量耗尽后就消失了,而我们需要做的就是在一定的时间内,保证尽可能多的车
存活。
分析
其实这个问题最关键的地方在于,没有一个中央的控制节点,也就是说对于每一个车
来说都是完全平等且独立的。所以我们需要他们能够尽可能的一直处在能够交流的状态,并且都能知道能量球
在哪里。
注意
这个问题在没有中央控制时不存在最优解,我们只能无线接近最优解。
我采用的是球形模型,这个模型参考于这次作业的 Examples。
在和我的同学互相交流时,这个模型是最普遍的,解决方案是最多的,效果也是相对最好的。
球形模型设计的两大重点是:
- 所有的
车
都均匀平等地分布在球面上(球面是个相对概念,可以是球壳???)。 - 所有的
车
都能随时交流,也就是说大家形成一个通讯网络。
实现
注意
所有的 Ada 代码都是示意性的,有可能不能直接在项目中使用。
Stage A&B
这个阶段中,能量球只有一个,我们让所有的车
都围绕这个能量球运动来实现一个基本的球形模型。
基本程序结构(Basic Program Structure)
程序基本的结构是一个死循环,每次循环分为 4 个步骤:
- 判断
能量球
信息 - 发送信息
- 接受信息
- 设置目的地和油门
消息结构(Message Structure)
最基础的消息需要包括:
能量球
的信息- 获得
能量球
信息的时间戳
中央控制(Central Control)
允许中央控制是 Stage 1 中的条件,我在作业中跳过了这一部分,因为
- 在允许中央控制时,该问题存在最优解,该最优解应该是一个数学问题,对我来说难度过大。
- 后面的 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=VvTe+21AvTe2+Pv
即可解出TeT_eTe。
注意
存在无法追击的情况,即(Δ<0\Delta<0Δ<0),因为我们这里是严格的计算,实际上整个追击过程只有 1-2 秒,并且在不断地更新能量球
的信息,所以预计的那一段时间TeT_eTe通常可以忽略不计。但是在可以计算时,能够提供更加准确的预计到达时间,从而让车
能够更加精准的决策何时去充电。
充电决策(Charge Determination)
当同时满足以下两个条件时:
车
知道能量球
的信息车
的预计剩余能量小于等于警戒能量
预计剩余能量:
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;
其中有些变量的值或初始值是由经验确定的
Radius_Distance
的值是0.3
,是因为多次实验发现在 64 个,128 个,256 个车
的情况下0.3
表现均衡。Destination
的初始值是(0, 0, 0)
,这样能够避免一开始时车
四散,导致失去联系,不能构成球形。
使用当前能量优化半径(Radius Optimization With Current Charge)
Radius_Vector = (0.75 + 0.25 * Current_Charge) * Radius_Vector;
0.75
和0.25
都是人为确定的,没什么依据
ANU COMP2310(2019) Assignment 1相关推荐
- COSC 1047 – Winter 2019 – Assignment
COSC 1047 – Winter 2019 – Assignment 4 See D2L For Due Date This assignment is designed to give you ...
- CS224N 2019 Assignment 2
Written: Understanding word2vec Let's have a quick refresher on the word2vec algorithm. The key insi ...
- COMP0037 Coursework Investigating Path Planning Algorithms
COMP0037 Coursework 1 Term 2, 2019 "Path Planning in a Known World" Investigating Path Pla ...
- Economics 345 “Applied Econometrics”
Department of Economics – University of Victoria Economics 345 "Applied Econometrics" (Sum ...
- COMP0037 Coursework
COMP0037 Coursework 1 Term 2, 2019 "Path Planning in a Known World" Investigating Path Pla ...
- matlab留学生作业代做,25877留学生作业代做、代写MATLAB,R编程设计作业、代做MATLAB/R课程作业、代写portfolio作业...
25877留学生作业代做.代写MATLAB,R编程设计作业.代做MATLAB/R课程作业.代写portfolio作业 日期:2019-06-10 09:48 Financial Markets Ins ...
- 2019 CS224N Assignment 1: Exploring Word Vectors
文章目录 包的导入 Part 1: Count-Based Word Vectors Question 1.1: Implement distinct_words Question 1.2: Impl ...
- MATH6005 Final Assignment MATH6005 2018-19
MATH6005 2018-19 MATH6005 Final Assignment 1. Instructions Your Assignment 3 should consist of three ...
- 谷歌2019博士生奖研金名单:清华、上交大、港中文入选最多
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 谷歌的博士生奖研金项目(Google Ph.D Fellowship Progra ...
最新文章
- 产品经理和项目经理的区别
- Java开源搜索引擎
- 几款优秀的jQuery 插件
- python编译原理_编译原理实战课 带你吃透编译技术核心概念与算法
- C语言中编译、生成、调试、运行的区别
- 【新书速递】你想知道的通信“灵魂三问”都在这里……(福利再现)
- 神经网络中常用激活函数总结【Python实现激活函数与导函数,曲线可视化分析】
- logback日志配置教程
- 自然语言处理的学习心得
- 京东优惠价格策略助手
- Atitit 三论”(系统论、控制论、信息论
- Android实现中英文切换
- 矩阵求逆 —— 初等变换法(高斯-约旦消元)
- 王者荣耀微信一区的服务器没了,为什么王者荣耀微信区和QQ区玩起来像两个游戏?...
- python-opencv下读取影像释放内存
- java大鱼吃小鱼实验报告摘要_java 大鱼吃小鱼游戏总结
- 西邮校园网路由器教程
- 如何高效的寻找Github项目
- 【GANs学习笔记】(二)GANs大家族分类
- mac安装使用xampp