本文整理匯總了Python中FleetUtilsAI.get_empire_fleet_ids_by_role方法的典型用法代碼示例。如果您正苦於以下問題:Python FleetUtilsAI.get_empire_fleet_ids_by_role方法的具體用法?Python FleetUtilsAI.get_empire_fleet_ids_by_role怎麽用?Python FleetUtilsAI.get_empire_fleet_ids_by_role使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類FleetUtilsAI
的用法示例。
在下文中一共展示了FleetUtilsAI.get_empire_fleet_ids_by_role方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: assign_invasion_fleets_to_invade
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def assign_invasion_fleets_to_invade():
"""Assign fleet targets to invadable planets."""
assign_invasion_bases()
all_invasion_fleet_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.INVASION)
invasion_fleet_ids = FleetUtilsAI.extract_fleet_ids_without_mission_types(all_invasion_fleet_ids)
send_invasion_fleets(invasion_fleet_ids, AIstate.invasionTargets, MissionType.INVASION)
all_invasion_fleet_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.INVASION)
for fid in FleetUtilsAI.extract_fleet_ids_without_mission_types(all_invasion_fleet_ids):
this_mission = foAI.foAIstate.get_fleet_mission(fid)
this_mission.check_mergers(context="Post-send consolidation of unassigned troops")
示例2: cur_best_mil_ship_rating
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def cur_best_mil_ship_rating(include_designs=False):
"""Find the best military ship we have available in this turn and return its rating.
:param include_designs: toggles if available designs are considered or only existing ships
:return: float: rating of the best ship
"""
current_turn = fo.currentTurn()
if current_turn in best_ship_rating_cache:
best_rating = best_ship_rating_cache[current_turn]
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return best_rating
best_rating = 0.001
universe = fo.getUniverse()
for fleet_id in FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.MILITARY):
fleet = universe.getFleet(fleet_id)
for ship_id in fleet.shipIDs:
ship = universe.getShip(ship_id)
if ship:
ship_info = [(ship.id, ship.designID, ship.speciesName)]
ship_rating = foAI.foAIstate.rate_psuedo_fleet(ship_info=ship_info)['overall']
best_rating = max(best_rating, ship_rating)
best_ship_rating_cache[current_turn] = best_rating
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return max(best_rating, 0.001)
示例3: cur_best_mil_ship_rating
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def cur_best_mil_ship_rating(include_designs=False):
"""Find the best military ship we have available in this turn and return its rating.
:param include_designs: toggles if available designs are considered or only existing ships
:return: float: rating of the best ship
"""
current_turn = fo.currentTurn()
if current_turn in _best_ship_rating_cache:
best_rating = _best_ship_rating_cache[current_turn]
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return best_rating
best_rating = 0.001
universe = fo.getUniverse()
for fleet_id in FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.MILITARY):
fleet = universe.getFleet(fleet_id)
for ship_id in fleet.shipIDs:
ship_rating = CombatRatingsAI.ShipCombatStats(ship_id).get_rating(enemy_stats=foAI.foAIstate.get_standard_enemy())
best_rating = max(best_rating, ship_rating)
_best_ship_rating_cache[current_turn] = best_rating
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return max(best_rating, 0.001)
示例4: get_tot_mil_rating
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def get_tot_mil_rating():
"""
Give an assessment of total miltary rating considering all fleets as if distributed to separate systems.
:return: a military rating value
:rtype: float
"""
return sum(CombatRatingsAI.get_fleet_rating(fleet_id)
for fleet_id in FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.MILITARY))
示例5: get_concentrated_tot_mil_rating
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def get_concentrated_tot_mil_rating():
"""
Give an assessment of total miltary rating as if all fleets were merged into a single mega-fleet.
:return: a military rating value
:rtype: float
"""
return CombatRatingsAI.combine_ratings_list([CombatRatingsAI.get_fleet_rating(fleet_id) for fleet_id in
FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.MILITARY)])
示例6: assign_invasion_bases
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def assign_invasion_bases():
"""Assign our troop bases to invasion targets."""
universe = fo.getUniverse()
all_troopbase_fleet_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.ORBITAL_INVASION)
available_troopbase_fleet_ids = set(FleetUtilsAI.extract_fleet_ids_without_mission_types(all_troopbase_fleet_ids))
aistate = get_aistate()
for fid in list(available_troopbase_fleet_ids):
if fid not in available_troopbase_fleet_ids: # entry may have been discarded in previous loop iterations
continue
fleet = universe.getFleet(fid)
if not fleet:
continue
sys_id = fleet.systemID
system = universe.getSystem(sys_id)
available_planets = set(system.planetIDs).intersection(set(aistate.qualifyingTroopBaseTargets.keys()))
debug("Considering Base Troopers in %s, found planets %s and registered targets %s with status %s" % (
system.name, list(system.planetIDs), available_planets,
[(pid, aistate.qualifyingTroopBaseTargets[pid]) for pid in available_planets]))
targets = [pid for pid in available_planets if aistate.qualifyingTroopBaseTargets[pid][1] != -1]
if not targets:
debug("Failure: found no valid target for troop base in system %s" % system)
continue
status = aistate.systemStatus.get(sys_id, {})
local_base_troops = set(status.get('myfleets', [])).intersection(available_troopbase_fleet_ids)
target_id = INVALID_ID
best_score = -1
target_troops = 0
for pid, (p_score, p_troops) in assign_invasion_values(targets).items():
if p_score > best_score:
best_score = p_score
target_id = pid
target_troops = p_troops
if target_id == INVALID_ID:
continue
local_base_troops.discard(fid)
found_fleets = []
troops_needed = max(0, target_troops - FleetUtilsAI.count_troops_in_fleet(fid))
found_stats = {}
min_stats = {'rating': 0, 'troopCapacity': troops_needed}
target_stats = {'rating': 10, 'troopCapacity': troops_needed + _TROOPS_SAFETY_MARGIN}
FleetUtilsAI.get_fleets_for_mission(target_stats, min_stats, found_stats,
starting_system=sys_id, fleet_pool_set=local_base_troops,
fleet_list=found_fleets)
for fid2 in found_fleets:
FleetUtilsAI.merge_fleet_a_into_b(fid2, fid)
available_troopbase_fleet_ids.discard(fid2)
available_troopbase_fleet_ids.discard(fid)
aistate.qualifyingTroopBaseTargets[target_id][1] = -1 # TODO: should probably delete
target = TargetPlanet(target_id)
fleet_mission = aistate.get_fleet_mission(fid)
fleet_mission.set_target(MissionType.ORBITAL_INVASION, target)
示例7: calculateColonisationPriority
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def calculateColonisationPriority():
"""calculates the demand for colony ships by colonisable planets"""
global allottedColonyTargets, colony_growth_barrier
enemies_sighted = foAI.foAIstate.misc.get("enemies_sighted", {})
galaxy_is_sparse = ColonisationAI.galaxy_is_sparse()
total_pp = fo.getEmpire().productionPoints
num_colonies = len(list(AIstate.popCtrIDs))
# significant growth barrier for low aggression, negligible for high aggression
colony_growth_barrier = 2 + ((0.5 + foAI.foAIstate.aggression) ** 2) * fo.currentTurn() / 50.0
colonyCost = AIDependencies.COLONY_POD_COST * (1 + AIDependencies.COLONY_POD_UPKEEP * num_colonies)
turnsToBuild = 8 # TODO: check for susp anim pods, build time 10
mil_prio = foAI.foAIstate.get_priority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_MILITARY)
allottedPortion = [[[0.6, 0.8], [0.3, 0.4]], [[0.8, 0.9], [0.3, 0.4]]][galaxy_is_sparse][any(enemies_sighted)][
fo.empireID() % 2
]
# if ( foAI.foAIstate.get_priority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_COLONISATION)
# > 2 * foAI.foAIstate.get_priority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_MILITARY)):
# allottedPortion *= 1.5
if mil_prio < 100:
allottedPortion *= 2
elif mil_prio < 200:
allottedPortion *= 1.5
elif fo.currentTurn() > 100:
allottedPortion *= 0.75 ** (num_colonies / 10.0)
# allottedColonyTargets = 1+ int(fo.currentTurn()/50)
allottedColonyTargets = 1 + int(total_pp * turnsToBuild * allottedPortion / colonyCost)
outpost_prio = foAI.foAIstate.get_priority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_OUTPOST)
# if have any outposts to build, don't build colony ships TODO: make more complex assessment
if outpost_prio > 0 or num_colonies > colony_growth_barrier:
return 0.0
if num_colonies > colony_growth_barrier:
return 0.0
numColonisablePlanetIDs = len(
[pid for (pid, (score, _)) in foAI.foAIstate.colonisablePlanetIDs.items() if score > 60][
: allottedColonyTargets + 2
]
)
if numColonisablePlanetIDs == 0:
return 1
colonyshipIDs = FleetUtilsAI.get_empire_fleet_ids_by_role(EnumsAI.AIFleetMissionType.FLEET_MISSION_COLONISATION)
numColonyships = len(FleetUtilsAI.extract_fleet_ids_without_mission_types(colonyshipIDs))
colonisationPriority = 60 * (1 + numColonisablePlanetIDs - numColonyships) / (numColonisablePlanetIDs + 1)
# print
# print "Number of Colony Ships : " + str(numColonyships)
# print "Number of Colonisable planets : " + str(numColonisablePlanetIDs)
# print "Priority for colony ships : " + str(colonisationPriority)
if colonisationPriority < 1:
return 0
return colonisationPriority
示例8: calculateOutpostPriority
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def calculateOutpostPriority():
"""calculates the demand for outpost ships by colonisable planets"""
global allotted_outpost_targets
base_outpost_cost = AIDependencies.OUTPOST_POD_COST
enemies_sighted = foAI.foAIstate.misc.get("enemies_sighted", {})
galaxy_is_sparse = ColonisationAI.galaxy_is_sparse()
total_pp = fo.getEmpire().productionPoints
num_colonies = len(list(AIstate.popCtrIDs))
# significant growth barrier for low aggression, negligible for high aggression
if num_colonies > colony_growth_barrier:
return 0.0
mil_prio = foAI.foAIstate.get_priority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_MILITARY)
NOT_SPARCE, ENEMY_UNSEEN = 0, 0
IS_SPARCE, ENEMY_SEEN = 1, 1
allotted_portion = {
(NOT_SPARCE, ENEMY_UNSEEN): (0.6, 0.8),
(NOT_SPARCE, ENEMY_SEEN): (0.3, 0.4),
(IS_SPARCE, ENEMY_UNSEEN): (0.8, 0.9),
(IS_SPARCE, ENEMY_SEEN): (0.3, 0.4),
}[(galaxy_is_sparse, any(enemies_sighted))][fo.empireID() % 2]
if mil_prio < 100:
allotted_portion *= 2
elif mil_prio < 200:
allotted_portion *= 1.5
allotted_outpost_targets = 1 + int(total_pp * 3 * allotted_portion / base_outpost_cost)
num_outpost_targets = len(
[
pid
for (pid, (score, specName)) in foAI.foAIstate.colonisableOutpostIDs.items()
if score > 1.0 * base_outpost_cost / 3.0
][:allotted_outpost_targets]
)
if num_outpost_targets == 0 or not tech_is_complete(AIDependencies.OUTPOSTING_TECH):
return 0
outpostShipIDs = FleetUtilsAI.get_empire_fleet_ids_by_role(EnumsAI.AIFleetMissionType.FLEET_MISSION_OUTPOST)
num_outpost_ships = len(FleetUtilsAI.extract_fleet_ids_without_mission_types(outpostShipIDs))
outpost_priority = 50 * (num_outpost_targets - num_outpost_ships) / num_outpost_targets
# print
# print "Number of Outpost Ships : " + str(num_outpost_ships)
# print "Number of Colonisable outposts: " + str(num_outpost_planet_ids)
print "Priority for outpost ships : " + str(outpost_priority)
if outpost_priority < 1:
return 0
return outpost_priority
示例9: _calculate_outpost_priority
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def _calculate_outpost_priority():
"""Calculates the demand for outpost ships by colonisable planets."""
global allotted_outpost_targets
base_outpost_cost = AIDependencies.OUTPOST_POD_COST
enemies_sighted = foAI.foAIstate.misc.get('enemies_sighted', {})
galaxy_is_sparse = ColonisationAI.galaxy_is_sparse()
total_pp = fo.getEmpire().productionPoints
colony_growth_barrier = foAI.foAIstate.character.max_number_colonies()
if state.get_number_of_colonies() > colony_growth_barrier:
return 0.0
mil_prio = foAI.foAIstate.get_priority(PriorityType.PRODUCTION_MILITARY)
not_sparse, enemy_unseen = 0, 0
is_sparse, enemy_seen = 1, 1
allotted_portion = {
(not_sparse, enemy_unseen): (0.6, 0.8),
(not_sparse, enemy_seen): (0.3, 0.4),
(is_sparse, enemy_unseen): (0.8, 0.9),
(is_sparse, enemy_seen): (0.3, 0.4),
}[(galaxy_is_sparse, any(enemies_sighted))]
allotted_portion = foAI.foAIstate.character.preferred_outpost_portion(allotted_portion)
if mil_prio < 100:
allotted_portion *= 2
elif mil_prio < 200:
allotted_portion *= 1.5
allotted_outpost_targets = 1 + int(total_pp * 3 * allotted_portion / base_outpost_cost)
num_outpost_targets = len([pid for (pid, (score, specName)) in foAI.foAIstate.colonisableOutpostIDs.items()
if score > max(1.0 * base_outpost_cost / 3.0, ColonisationAI.MINIMUM_COLONY_SCORE)]
[:allotted_outpost_targets])
if num_outpost_targets == 0 or not tech_is_complete(AIDependencies.OUTPOSTING_TECH):
return 0
outpost_ship_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.OUTPOST)
num_outpost_ships = len(FleetUtilsAI.extract_fleet_ids_without_mission_types(outpost_ship_ids))
outpost_priority = (50.0 * (num_outpost_targets - num_outpost_ships)) / num_outpost_targets
# discourage early outposting for SP_SLY, due to supply and stealth considerations they are best off
# using colony ships until they have other colonizers (and more established military)
if list(ColonisationAI.empire_colonizers) == ["SP_SLY"]:
outpost_priority /= 3.0
# print
# print "Number of Outpost Ships : " + str(num_outpost_ships)
# print "Number of Colonisable outposts: " + str(num_outpost_planet_ids)
print "Priority for outpost ships: " + str(outpost_priority)
if outpost_priority < 1:
return 0
return outpost_priority
示例10: _calculate_colonisation_priority
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def _calculate_colonisation_priority():
"""Calculates the demand for colony ships by colonisable planets."""
global allottedColonyTargets
enemies_sighted = foAI.foAIstate.misc.get('enemies_sighted', {})
galaxy_is_sparse = ColonisationAI.galaxy_is_sparse()
total_pp = fo.getEmpire().productionPoints
num_colonies = len(list(AIstate.popCtrIDs))
colony_growth_barrier = foAI.foAIstate.character.max_number_colonies()
colony_cost = AIDependencies.COLONY_POD_COST * (1 + AIDependencies.COLONY_POD_UPKEEP * num_colonies)
turns_to_build = 8 # TODO: check for susp anim pods, build time 10
mil_prio = foAI.foAIstate.get_priority(PriorityType.PRODUCTION_MILITARY)
allotted_portion = ([[[0.6, 0.8], [0.3, 0.4]], [[0.8, 0.9], [0.4, 0.6]]][galaxy_is_sparse]
[any(enemies_sighted)])
allotted_portion = foAI.foAIstate.character.preferred_colonization_portion(allotted_portion)
# if ( foAI.foAIstate.get_priority(AIPriorityType.PRIORITY_PRODUCTION_COLONISATION)
# > 2 * foAI.foAIstate.get_priority(AIPriorityType.PRIORITY_PRODUCTION_MILITARY)):
# allotted_portion *= 1.5
if mil_prio < 100:
allotted_portion *= 2
elif mil_prio < 200:
allotted_portion *= 1.5
elif fo.currentTurn() > 100:
allotted_portion *= 0.75 ** (num_colonies / 10.0)
# allottedColonyTargets = 1+ int(fo.currentTurn()/50)
allottedColonyTargets = 1 + int(total_pp * turns_to_build * allotted_portion / colony_cost)
outpost_prio = foAI.foAIstate.get_priority(PriorityType.PRODUCTION_OUTPOST)
# if have any outposts to build, don't build colony ships TODO: make more complex assessment
if outpost_prio > 0 or num_colonies > colony_growth_barrier:
return 0.0
if num_colonies > colony_growth_barrier:
return 0.0
num_colonisable_planet_ids = len([pid for (pid, (score, _)) in foAI.foAIstate.colonisablePlanetIDs.items()
if score > 60][:allottedColonyTargets + 2])
if num_colonisable_planet_ids == 0:
return 1
colony_ship_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.COLONISATION)
num_colony_ships = len(FleetUtilsAI.extract_fleet_ids_without_mission_types(colony_ship_ids))
colonisation_priority = 60 * (1 + num_colonisable_planet_ids - num_colony_ships) / (num_colonisable_planet_ids + 1)
# print
# print "Number of Colony Ships : " + str(num_colony_ships)
# print "Number of Colonisable planets : " + str(num_colonisable_planet_ids)
# print "Priority for colony ships : " + str(colonisation_priority)
if colonisation_priority < 1:
return 0
return colonisation_priority
示例11: get_empire_standard_fighter
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def get_empire_standard_fighter():
"""Get the current empire standard fighter stats, i.e. the most common shiptype within the empire.
:return: Stats of most common fighter in the empire
:rtype: ShipCombatStats
"""
stats_dict = Counter()
for fleet_id in FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.MILITARY):
ship_stats = FleetCombatStats(fleet_id, consider_refuel=True).get_ship_combat_stats()
stats_dict.update(ship_stats)
most_commons = stats_dict.most_common(1)
if most_commons:
return most_commons[0][0]
else:
return default_ship_stats()
示例12: _calculate_outpost_priority
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def _calculate_outpost_priority():
"""Calculates the demand for outpost ships by colonisable planets."""
global allotted_outpost_targets
base_outpost_cost = AIDependencies.OUTPOST_POD_COST
enemies_sighted = foAI.foAIstate.misc.get('enemies_sighted', {})
galaxy_is_sparse = ColonisationAI.galaxy_is_sparse()
total_pp = fo.getEmpire().productionPoints
num_colonies = len(list(AIstate.popCtrIDs))
colony_growth_barrier = foAI.foAIstate.character.max_number_colonies()
if num_colonies > colony_growth_barrier:
return 0.0
mil_prio = foAI.foAIstate.get_priority(PriorityType.PRODUCTION_MILITARY)
not_sparse, enemy_unseen = 0, 0
is_sparse, enemy_seen = 1, 1
allotted_portion = {
(not_sparse, enemy_unseen): (0.6, 0.8),
(not_sparse, enemy_seen): (0.3, 0.4),
(is_sparse, enemy_unseen): (0.8, 0.9),
(is_sparse, enemy_seen): (0.3, 0.4),
}[(galaxy_is_sparse, any(enemies_sighted))]
allotted_portion = foAI.foAIstate.character.preferred_outpost_portion(allotted_portion)
if mil_prio < 100:
allotted_portion *= 2
elif mil_prio < 200:
allotted_portion *= 1.5
allotted_outpost_targets = 1 + int(total_pp * 3 * allotted_portion / base_outpost_cost)
num_outpost_targets = len([pid for (pid, (score, specName)) in foAI.foAIstate.colonisableOutpostIDs.items()
if score > 1.0 * base_outpost_cost / 3.0][:allotted_outpost_targets])
if num_outpost_targets == 0 or not tech_is_complete(AIDependencies.OUTPOSTING_TECH):
return 0
outpost_ship_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.OUTPOST)
num_outpost_ships = len(FleetUtilsAI.extract_fleet_ids_without_mission_types(outpost_ship_ids))
outpost_priority = 50 * (num_outpost_targets - num_outpost_ships) / num_outpost_targets
# print
# print "Number of Outpost Ships : " + str(num_outpost_ships)
# print "Number of Colonisable outposts: " + str(num_outpost_planet_ids)
print "Priority for outpost ships: " + str(outpost_priority)
if outpost_priority < 1:
return 0
return outpost_priority
示例13: get_current_exploration_info
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def get_current_exploration_info():
"""Returns ([current target list], [available scout list])."""
fleet_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.EXPLORATION)
available_scouts = []
already_covered = set()
for fleet_id in fleet_ids:
fleet_mission = foAI.foAIstate.get_fleet_mission(fleet_id)
if not fleet_mission.type:
available_scouts.append(fleet_id)
else:
if fleet_mission.type == MissionType.EXPLORATION:
already_covered.add(fleet_mission.target)
if not fleet_mission.target:
print "problem determining existing exploration target systems"
else:
print "found existing exploration target: %s" % fleet_mission.target
return list(already_covered), available_scouts
示例14: calculateExplorationPriority
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def calculateExplorationPriority():
"""calculates the demand for scouts by unexplored systems"""
global scoutsNeeded
universe = fo.getUniverse()
empire = fo.getEmpire()
numUnexploredSystems = len(
ExplorationAI.borderUnexploredSystemIDs
) # len(foAI.foAIstate.get_explorable_systems(AIExplorableSystemType.EXPLORABLE_SYSTEM_UNEXPLORED))
numScouts = sum(
[
foAI.foAIstate.fleetStatus.get(fid, {}).get("nships", 0)
for fid in FleetUtilsAI.get_empire_fleet_ids_by_role(EnumsAI.AIFleetMissionType.FLEET_MISSION_EXPLORATION)
]
) # FleetUtilsAI.get_empire_fleet_ids_by_role(AIFleetMissionType.FLEET_MISSION_EXPLORATION)
productionQueue = empire.productionQueue
queuedScoutShips = 0
for queue_index in range(0, len(productionQueue)):
element = productionQueue[queue_index]
if element.buildType == EnumsAI.AIEmpireProductionTypes.BT_SHIP:
if foAI.foAIstate.get_ship_role(element.designID) == EnumsAI.AIShipRoleType.SHIP_ROLE_CIVILIAN_EXPLORATION:
queuedScoutShips += element.remaining * element.blocksize
milShips = MilitaryAI.num_milships
# intent of the following calc is essentially
# new_scouts_needed = min(need_cap_A, need_cap_B, base_need) - already_got_or_queued
# where need_cap_A is to help prevent scouting needs from swamping military needs, and
# need_cap_B is to help regulate investment into scouting while the empire is small.
# These caps could perhaps instead be tied more directly to military priority and
# total empire production.
scoutsNeeded = max(
0,
min(4 + int(milShips / 5), 4 + int(fo.currentTurn() / 50), 2 + numUnexploredSystems ** 0.5)
- numScouts
- queuedScoutShips,
)
explorationPriority = int(40 * scoutsNeeded)
print
print "Number of Scouts : " + str(numScouts)
print "Number of Unexplored systems: " + str(numUnexploredSystems)
print "military size: ", milShips
print "Priority for scouts : " + str(explorationPriority)
return explorationPriority
示例15: get_current_exploration_info
# 需要導入模塊: import FleetUtilsAI [as 別名]
# 或者: from FleetUtilsAI import get_empire_fleet_ids_by_role [as 別名]
def get_current_exploration_info(verbose=True):
"""returns ( [current target list] , [available scout list] ) """
fleet_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(AIFleetMissionType.FLEET_MISSION_EXPLORATION)
available_scouts = []
already_covered = set()
for fleet_id in fleet_ids:
fleet_mission = foAI.foAIstate.get_fleet_mission(fleet_id)
if len(fleet_mission.get_mission_types()) == 0:
available_scouts.append(fleet_id)
else:
targets = [targ.target_id for targ in fleet_mission.get_targets(AIFleetMissionType.FLEET_MISSION_EXPLORATION)]
if verbose:
if len(targets) == 0:
print "problem determining existing exploration target systems from targets:\n%s" % (fleet_mission.get_targets(AIFleetMissionType.FLEET_MISSION_EXPLORATION))
else:
print "found existing exploration targets: %s" % targets
already_covered.update(targets)
return list(already_covered), available_scouts