Pgeorge13Z / CodeCraft

华为普朗克计划记录

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

华为软挑代码记录

一个机器人调度代码(SDK/python/main.py,在软挑中跑分180W左右,排名120/500,速度落后于官方给出的simpledemo(SDK/C++/main.cpp)。

  • 优点:

    1. 机器人调度的整体逻辑没有问题
    2. 具有一定的避障功能
    3. 具有动态调度的能力,能在任务执行途中,自动选择设置的优先级更高的任务去完成
  • 缺点:

    1. 由于时间原因,调度策略并没有并完善的很好,目前已知的一个调度的漏洞是:由于我们之前的调度为了避免冲突,让机器人更多的去使用工作台,导致到最后很多工作台的原材料格都是被填充了一半,而造成了浪费。正确解应该是让机器人尽可能先完成填了一半原材料的工作台,再去开发新的工作台。
    2. 代码写的太丑陋了,由于最开始想的太简单,代码耦合度太高,后期再更改时间成本太大,没更改。
  • 核心的调度策略:

    1. 本文从工作台的角度出发,从后往前寻找原材料。最开始拿生产好的7号产品,若没有,则去找原材料4,5,6号产品,若再没有则继续往前找。
    2. 举例:工作台7缺6应该执行的操作:先找六号小车有没有携带产品,再找6号工作台是否有生成好的物品,若都没有,则去找六号的原材料。
    3. 任务调度是单方向的,如7号工作台想取6号工作台生产好的货,只会派小车过去,因为按流程2,只要小车取到了货,下一帧自动会让小车的货送来。
    4. 寻找小车和工作台都是贪心的,每次都只找最近的小车或者工作台。但为了避免工作台在多个帧内召唤太多的工作台来寻找一个原材料这类的问题,本文给工作台上锁,有车去取对应的材料格,则不再运行小车过去取。
    5. 动态调度的能力:在调度设置后,会再按顺序检查7/6/5/4工作台,若有生产好的物品,会强行阻止正在工作中的且未携带物品的小车来取货。

运行:

  • GUI运行:./Robot_gui -m maps/1.txt -c ./SDK/python/ "python main.py"

  • ./Robot_gui -m maps/2.txt -c ./SDK/c++/ main

    快速运行: -f

  • 非GUI:./Robot -m maps/1.txt -c ./SDK/python/ "python main.py"

About

华为普朗克计划记录


Languages

Language:Shell 65.4%Language:C++ 17.4%Language:C 7.4%Language:CMake 5.0%Language:Makefile 3.9%Language:Python 0.9%