git clone https://github.com/kaji-ou/LDRP.git
pip install -e ./src/main/LDRP
pip install -r ./src/main/LDRP/requirements.txt
src/config/default.yamlで1エピソードのステップ数や使用するマップやアルゴリズムなどを設定し,test.pyを実行
タスクありの環境で実行する場合はgym.makeの引数のtask_flagをTrueにする.
タスクリストを設定したい場合はgym.makeの引数のtask_listに用意したタスクリストを入れる.
いろんな条件をまとめて実験したい場合はrun.pyを実行.
src/policyで,経路計画をagents_action,タスク割り当てをtask_assignとして
joint_action = {"pass": agents_action, "task": task_assign}のようにする.
agents_actionは従来のDRPと同じ.長さがエージェント数となる配列で,各要素は各エージェントが進むノードを表す.
task_assignは長さがエージェント数となる配列で,各要素は各エージェントにタスクリストenv.current_tasklistの何番目のタスクを割当てるかを表す.
タスクを未実行状態のエージェントにのみ,新たにタスクを割当てることが可能. 割り当てを行わない場合は-1を入れる.
例)タスクリスト[[1,2],[5,3],[8,9]]が存在し,エージェントへの割り当てを[1,0,-1]とすると,エージェント0にタスク[5,3],エージェント1にタスク[1,2]を割当て,エージェント2にはタスクを割り当てない.
PolicyManagerは経路計画をTaskManagerはタスク割当てをまとめているため利用可能
- タスクに関する情報
env.current_tasklist:現在のすべての未実行状態のタスクのリスト
(例:タスク数3,[[1,2],[5,3],[8,9]])env.assigned_list:未実行のタスクがどのエージェントに割り当てられているかのリスト.割り当てられていない場合は-1
(例:タスク数3,タスク0はエージェント1に,タスク1はエージェント0に割り当てられており,タスク2は割り当てられていない.[1,0,-1])env.assigned_tasks:各エージェントに割り当てられたタスクの情報.実行中のものも含む
(例:エージェント数3,エージェント0,1はタスクを割当てられており,エージェント2はタスクを割り当てられていない.[[1,2],[3,4],[]])
タスクは各ステップでenv.current_tasklistに追加される.
いつ,どんなタスクが追加されるかはエピソード開始時に決定する.
タスクリストを設定したい場合はgym.makeの引数のtask_listに用意したタスクリストを入れる.
タスク割当て → エージェントがピックアップ場所へ向かう → タスクをピックアップする(実行開始) → タスクを配達場所まで届ける → 配達完了 → 次の割り当てを待つ
epymarlを利用して学習したモデルを利用可能
src/all_policy/policy.py内のMARLPolicyクラスでモデルのパスやファイル名を自身で指定することで利用可能
- pbsのために200行目を変更した点は強化学習の際に影響があるかもしれないため注意
- 継続型の問題の際には,エージェントが目的地についている状態でもエージェントの
avail_actionsがゴールノードに固定されないように変更
探索手法ですが,
- 順番に動かしてエージェントの動きを決めているため,他のエージェントが道を封鎖すること
- drpはエージェントの行動の自由度が低いこと
などの理由で,衝突しない経路が発見できないことがあります.