Replace existing campaign planner with an HTN.

An HTN (https://en.wikipedia.org/wiki/Hierarchical_task_network) is
similar to a decision tree, but it is able to reset to an earlier stage
if a subtask fails and tasks are able to account for the changes in
world state caused by earlier tasks.

Currently this just uses exactly the same strategy as before so we can
prove the system, but it should make it simpler to improve on task
planning.
This commit is contained in:
Dan Albert
2021-06-21 01:25:48 -07:00
parent 81c8052449
commit 783ac18222
33 changed files with 1283 additions and 610 deletions

View File

@@ -1,9 +1,8 @@
from dataclasses import dataclass
from dataclasses import dataclass, field
from datetime import timedelta
from dcs.task import Reconnaissance
from game.utils import Distance, feet, nautical_miles
from game.data.groundunitclass import GroundUnitClass
from game.utils import Distance, feet, nautical_miles
@dataclass
@@ -17,6 +16,15 @@ class GroundUnitProcurementRatios:
return 0.0
@dataclass(frozen=True)
class MissionPlannerMaxRanges:
cap: Distance = field(default=nautical_miles(100))
cas: Distance = field(default=nautical_miles(50))
offensive: Distance = field(default=nautical_miles(150))
aewc: Distance = field(default=Distance.inf())
refueling: Distance = field(default=nautical_miles(200))
@dataclass(frozen=True)
class Doctrine:
cas: bool
@@ -65,6 +73,8 @@ class Doctrine:
ground_unit_procurement_ratios: GroundUnitProcurementRatios
mission_ranges: MissionPlannerMaxRanges = field(default=MissionPlannerMaxRanges())
MODERN_DOCTRINE = Doctrine(
cap=True,