From 0879d1da0dcc3b648a13e3f10024d1d0d5ff4b04 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Tue, 18 May 2021 21:01:26 -0700 Subject: [PATCH] Use the best aircraft rather than first found. The priority list was guiding the purchase decision which largely meant that this was working correctly, but there were suboptimal cases where the list was being taken in FIFO order by purchased type. This fixes the search to be locally optimal, although this does still mean that a worse but closer aircraft will be chosen over a better but slightly farther away aircraft. We'd need to have a quality vs distance rating to do better. Fixes https://github.com/dcs-liberation/dcs_liberation/issues/755 --- game/game.py | 10 ++++++---- gen/flights/ai_flight_planner.py | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/game/game.py b/game/game.py index 4c250682..637c15b3 100644 --- a/game/game.py +++ b/game/game.py @@ -31,6 +31,7 @@ from .income import Income from .infos.information import Information from .navmesh import NavMesh from .procurement import AircraftProcurementRequest, ProcurementAi +from .profiling import logged_duration from .settings import Settings from .theater import ConflictTheater from .theater.transitnetwork import TransitNetwork, TransitNetworkBuilder @@ -361,11 +362,12 @@ class Game: self.transfers.order_airlift_assets() self.transfers.plan_transports() - blue_planner = CoalitionMissionPlanner(self, is_player=True) - blue_planner.plan_missions() + with logged_duration("Mission planning"): + blue_planner = CoalitionMissionPlanner(self, is_player=True) + blue_planner.plan_missions() - red_planner = CoalitionMissionPlanner(self, is_player=False) - red_planner.plan_missions() + red_planner = CoalitionMissionPlanner(self, is_player=False) + red_planner.plan_missions() for cp in self.theater.controlpoints: if cp.has_frontline: diff --git a/gen/flights/ai_flight_planner.py b/gen/flights/ai_flight_planner.py index 801a430a..2cd658d5 100644 --- a/gen/flights/ai_flight_planner.py +++ b/gen/flights/ai_flight_planner.py @@ -162,10 +162,10 @@ class AircraftAllocator: if not airfield.is_friendly(self.is_player): continue inventory = self.global_inventory.for_control_point(airfield) - for aircraft, available in inventory.all_aircraft: + for aircraft in types: if not airfield.can_operate(aircraft): continue - if aircraft in types and available >= flight.num_aircraft: + if inventory.available(aircraft) >= flight.num_aircraft: inventory.remove_aircraft(aircraft, flight.num_aircraft) return airfield, aircraft